|
给51黑电子论坛的朋友们分享一个用51单片机做的8人智力抢答器proteus仿真,下面是原理图:
抢答器的所有制作资料下载:
8人抢答.zip
(43.09 KB, 下载次数: 29)
源程序:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define disp_c P0
- #define disp_s P3
- #define disp_o P2
- #define player P1
- #define ON 1
- #define OFF 0
- sbit Juge1=P3^0;
- sbit Juge2=P3^1;
- sbit Light=P3^7;
- sbit Warm=P3^4;
- unsigned char key;
- unsigned char Num50=0,second,Num,Num1,count_down=29,over_time=99;
- unsigned char disdata1,disdata2,disbuf[3];
- unsigned char disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void keyboard(void) //键盘识别
- {
- key=0;
- if(Num==0)
- {
- if(player!=0xff)
- {
- Warm=ON;
- Light=OFF;
- switch(player)
- {
- case 0xfe:key=1;Light=OFF;break;
- case 0xfd:key=2;Light=OFF;break;
- case 0xfb:key=3;Light=OFF;break;
- case 0xf7:key=4;Light=OFF;break;
- case 0xef:key=5;Light=OFF;break;
- case 0xdf:key=6;Light=OFF;break;
- case 0xbf:key=7;Light=OFF;break;
- case 0x7f:key=8;Light=OFF;break;
- default:key=0;Light=ON;break;
- }
- Num=1;
- }
- }
- }
- void display(void) interrupt 1 //显示程序
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- Num50++;
- if(Num50==20)
- {
- Num50=0;second--;
- disdata2=second;
- disbuf[0]=disdata2/10;
- disbuf[1]=disdata2%10;
- disbuf[2]=disbuf[1]*16+disbuf[0];
- P0=disbuf[2];
- if(second==0) {TR0=0; Warm=OFF;Light=ON;}
- }
- }
- void display2 (void) interrupt 3
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- Num50++;
- if(Num50==20)
- {
- Num50=0;second--;
- disdata2=second;
- disbuf[0]=disdata2/10;
- disbuf[1]=disdata2%10;
- disbuf[2]=disbuf[1]*16+disbuf[0];
- P0=disbuf[2];
- if(second==0)
- {
- TR1=0; Warm=OFF;Light=ON;
- }
- }
- }
- void main() //主程序
- {
- EA=1;
- ET0=1;ET1=1;
- TMOD=0x11;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- Num1=0;P2=0;Light=OFF;
- while(1)
- {
- if(Juge1==0)
- {while(Juge1==0);P2=0;second=30;TR0=1;TR1=0;Num=0;Num1=1;Light=OFF;}
- if(Juge2==0)
- {while(Juge2==0);TR0=0;TR1=1;second=100;}
- keyboard();
- if(key!=0)
- {if(Num1==1) {P2=disp[key];TR0=0;second=30;TR1=1;}}
- }
- }
复制代码
|
|