本帖最后由 Scorpionx 于 2019-11-10 21:05 編輯
五路按鍵搶答器,
P3^2~P3^6為搶答人
P3~7為主持人復位
4位數碼管顯示搶答者序號和倒計時
單片機源程序如下:
- #include <reg52.h>
- /***************定 義 參 數***************/
- unsigned char xianshi=88,kaishi=0,daojishi=10,haoma=0,bitdisplay=0,k=0;
- unsigned int i,n=0, bittime=0;
- sbit d1=P3^2; //選手1
- sbit d2=P3^3; //選手2
- sbit d3=P3^4; //選手3
- sbit d4=P3^5; //選手4
- sbit d5=P3^6; //選手5
- sbit start=P3^7; //主持人
- sbit LED=P2^7;
- unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- /***************延 時 計 數***************/
- void delay (unsigned int t) //t=1時,1ms
- {
- unsigned int a,b;
- for(a=0;a<t;a++)
- for(b=0;b<120;b++);
- }
- /***************中斷函數***************/
- void timer0(void)interrupt 1 //5ms中斷一次
- {
- TH0 = (65536-5000)/256;
- TL0 = (65536-5000)%256;
- switch(bitdisplay)
- {
- case 0:P1=0xFB;P0=Tab[xianshi/10];break;
- case 1:P1=0xF7;P0=Tab[xianshi%10];break;
- case 2:P1=0xFE;P0=Tab[haoma];break;
- case 3:P1=0xFD;P0=~0x40; break;
- }
-
- bitdisplay++;
- bittime++;
- if(bitdisplay==4)
- bitdisplay=0;
-
- if(bittime==200) //5*200=1000ms
- {
- bittime=0;
- xianshi--;
- }
-
- if(xianshi==0) //如果倒計時結束則蜂鳴器與LED顯示
- {
- P1=0xff;
- LED=1;
- delay(1000);
- LED=0;
- TR0=0;
- }
- }
- void djtime() //倒計時間修改
- {
- while(n)
- {
- for(i=0;i<50;i++)
- {
- P1=0xFB;P0=Tab[daojishi/10];
- delay(5);
- P1=0xF7;P0=Tab[daojishi%10];
- delay(5);
- }
- if(d1==0)
- delay(33);
- if(d1==0)
- daojishi--;
-
- if(daojishi>20)
- daojishi=20;
- if(daojishi<5)
- daojishi=5;
- if(start==0)
- delay(33);
- if(start==0)
- {
- n=0;
- LED=1;
- for(i=0;i<100;i++)
- {
- P1=0xFB;P0=Tab[daojishi/10];
- delay(5);
- P1=0xF7;P0=Tab[daojishi%10];
- delay(5);
- }
- P1=0xff;
- LED=0;
- }
- }
- }
- /***************主 函 數***************/
- void main()
- {
-
- TMOD=0X01;
- TH0 = (65536-5000)/256;
- TL0 = (65536-5000)%256;
- EA=1;
- ET0=1; //定時器中斷
- TR0=0; //定時器 ,等待手動開啟
- for(i=0;i<6;i++)
- {
- LED=~LED;
- delay(500);
- }
- LED=0;
- while(1)
- {
- djtime();
- if(start==0)
- delay(33);
- if(start==0)
- {
- k=1;
- haoma=0;
- xianshi=kaishi;
- TR0=1;
- }
- while(k)
- {
- while(xianshi)
- {
- if(d1==0)
- delay(33);
- if(d1==0)
- {
- haoma=1;
- break;
- }
- if(d2==0)
- delay(33);
- if(d2==0)
- {
- haoma=2;
- break;
- }
- if(d3==0)
- delay(33);
- if(d3==0)
- {
- haoma=3;
- break;
- }
- if(d4==0)
- delay(33);
- if(d4==0)
- {
- haoma=4;
- break;
- }
- if(d5==0)
- delay(33);
- if(d5==0)
- {
- haoma=5;
- break;
- }
-
- }
- xianshi=daojishi;
- LED=1;
- delay(400);
- LED=0;
- k=0;
- }
- }
- }
復制代碼
以上程序51hei提供下載:
搶答器.docx
(14.97 KB, 下載次數: 7)
2019-10-21 18:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|