曾经受过一个朋友的拜托帮他设计一个1带16的电子抢答器,考虑到以后他好升级于是采用了RS485总线来实现抢答器主机和从机的通讯,而不是像市面上从机不带单片机仅仅是开关量输出的简单做法。这样,以后可以最多加到255个接点(不过估计没有那么大的抢答赛了,呵呵)。 完成后经过朋友的适用感觉还不错,而我经常在网上看到有网友像自己做这个的帖子,所以把设计的文档发了上来。大家看来有什么问题欢迎在论坛上发贴讨论。 附件中包括了电路图sch和源程序(其中主机的程序是采用RTOS编写,对想学习os编程的网友有较大的参考价值),其中的电路和程序绝对是可以正确运行的,所以希望大家转载的话注明出自本站,谢谢。
#include <reg51.h> #define uchar unsigned char uchar a,b,c; sfr key=0x90; bit fkey=0; delay(uchar t ) { uchar i,j; for (i=0;i<t;i++) for (j=0;j<120;j++) ; } main() { while(1) { P2=0x01; key=0x0f; if(key !=0x0f) { delay(20); if(key !=0x0f) { a=key; } key=0xf0; c=key; a=a|c; if(fkey==0) { switch(a) { case 0xee:{P0=0x3f;fkey=1;break;} case 0xed:{P0=0x06;fkey=1;break;} case 0xeb:{P0=0x5b;fkey=1;break;} case 0xe7:{P0=0x4f;fkey=1;break;} case 0xde:{P0=0x66;fkey=1;break;} case 0xdd:{P0=0x6d;fkey=1;break;} case 0xdb:{P0=0x7d;fkey=1;break;} case 0xd7:{P0=0x07;fkey=1;break;} case 0xbe:{P0=0x7f;fkey=1;break;} case 0xbd:{P0=0x67;fkey=1;break;} case 0xbb:{P0=0x77;fkey=1;break;} case 0xb7:{P0=0x7c;fkey=1;break;} case 0x7e:{P0=0x39;fkey=1;break;} case 0x7d:{P0=0x5e;fkey=1;break;} case 0x7b:{P0=0x79;fkey=1;break;} case 0x77:{P0=0x71;fkey=1;break;} default: break; } } } } }
|