|
給51黑電子論壇的朋友們分享一個用51單片機做的8人智力搶答器proteus仿真,下面是原理圖:
0.png (58.57 KB, 下載次數: 95)
下載附件
2016-9-28 00:17 上傳
0.png (52.27 KB, 下載次數: 70)
下載附件
2016-9-28 00:18 上傳
搶答器的所有制作資料下載:
8人搶答.zip
(43.09 KB, 下載次數: 29)
2016-9-28 00:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
源程序:
- #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;}}
- }
- }
復制代碼
|
|