找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2051|回復(fù): 1
收起左側(cè)

五路按鍵搶答器單片機(jī)程序

[復(fù)制鏈接]
ID:622126 發(fā)表于 2019-10-21 18:39 | 顯示全部樓層 |閱讀模式
本帖最后由 Scorpionx 于 2019-11-10 21:05 編輯

五路按鍵搶答器,
P3^2~P3^6為搶答人
P3~7為主持人復(fù)位
4位數(shù)碼管顯示搶答者序號(hào)和倒計(jì)時(shí)

單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. /***************定 義 參 數(shù)***************/
  3. unsigned char xianshi=88,kaishi=0,daojishi=10,haoma=0,bitdisplay=0,k=0;
  4. unsigned int  i,n=0,  bittime=0;
  5. sbit d1=P3^2;                 //選手1
  6. sbit d2=P3^3;                 //選手2
  7. sbit d3=P3^4;                 //選手3
  8. sbit d4=P3^5;                 //選手4
  9. sbit d5=P3^6;                 //選手5
  10. sbit start=P3^7;                //主持人
  11. sbit LED=P2^7;
  12. unsigned char Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  13. /***************延 時(shí) 計(jì) 數(shù)***************/
  14. void delay (unsigned int t)                //t=1時(shí),1ms                                 
  15. {
  16.         unsigned int a,b;
  17.         for(a=0;a<t;a++)
  18.                 for(b=0;b<120;b++);
  19. }
  20. /***************中斷函數(shù)***************/
  21. void timer0(void)interrupt 1         //5ms中斷一次
  22. {
  23.         TH0 = (65536-5000)/256;
  24.         TL0 = (65536-5000)%256;
  25.         switch(bitdisplay)
  26.         {
  27.         case 0:P1=0xFB;P0=Tab[xianshi/10];break;
  28.         case 1:P1=0xF7;P0=Tab[xianshi%10];break;
  29.         case 2:P1=0xFE;P0=Tab[haoma];break;
  30.         case 3:P1=0xFD;P0=~0x40; break;
  31.         }
  32.         
  33.         bitdisplay++;            
  34.         bittime++;                        
  35.         if(bitdisplay==4)
  36.                 bitdisplay=0;
  37.         
  38.         if(bittime==200)          //5*200=1000ms
  39.         {
  40.                 bittime=0;
  41.                 xianshi--;
  42.         }
  43.         
  44.         if(xianshi==0) //如果倒計(jì)時(shí)結(jié)束則蜂鳴器與LED顯示
  45.         {
  46.                 P1=0xff;
  47.                 LED=1;         
  48.                 delay(1000);
  49.                 LED=0;
  50.                 TR0=0;
  51.         }
  52. }
  53. void djtime() //倒計(jì)時(shí)間修改
  54. {
  55.         while(n)
  56.                 {
  57.                         for(i=0;i<50;i++)
  58.                         {
  59.                                 P1=0xFB;P0=Tab[daojishi/10];
  60.                                 delay(5);
  61.                                 P1=0xF7;P0=Tab[daojishi%10];
  62.                                 delay(5);
  63.                         }
  64.                         if(d1==0)  
  65.                         delay(33);
  66.                         if(d1==0)
  67.                         daojishi--;
  68.                         
  69.                         if(daojishi>20)
  70.                         daojishi=20;
  71.                         if(daojishi<5)
  72.                         daojishi=5;
  73.                         if(start==0)
  74.                         delay(33);
  75.                         if(start==0)
  76.                         {
  77.                         n=0;
  78.                         LED=1;
  79.                         for(i=0;i<100;i++)
  80.                         {
  81.                                 P1=0xFB;P0=Tab[daojishi/10];
  82.                                 delay(5);
  83.                                 P1=0xF7;P0=Tab[daojishi%10];
  84.                                 delay(5);
  85.                         }
  86.                         P1=0xff;                                                
  87.                         LED=0;
  88.                         }
  89.                 }
  90. }
  91. /***************主  函  數(shù)***************/
  92. void main()
  93. {        
  94.         
  95.         TMOD=0X01;                 
  96.         TH0 = (65536-5000)/256;  
  97.         TL0 = (65536-5000)%256;
  98.         EA=1;                 
  99.         ET0=1;           //定時(shí)器中斷
  100.         TR0=0;         //定時(shí)器 ,等待手動(dòng)開啟
  101.         for(i=0;i<6;i++)
  102.                 {
  103.                         LED=~LED;
  104.                         delay(500);
  105.                 }
  106.         LED=0;   
  107.         while(1)
  108.         {   
  109.                 djtime();
  110.                 if(start==0)      
  111.                         delay(33);
  112.                 if(start==0)
  113.                 {
  114.                         k=1;
  115.                         haoma=0;            
  116.                         xianshi=kaishi;           
  117.                         TR0=1;
  118.                 }                        
  119.                 while(k)
  120.                 {
  121.                         while(xianshi)
  122.                         {
  123.                                 if(d1==0)  
  124.                                         delay(33);
  125.                                 if(d1==0)
  126.                                 {         
  127.                                         haoma=1;
  128.                                         break;        
  129.                                 }
  130.                                 if(d2==0)  
  131.                                         delay(33);
  132.                                 if(d2==0)
  133.                                 {                                
  134.                                         haoma=2;
  135.                                         break;                                                                        
  136.                                 }
  137.                                 if(d3==0)         
  138.                                         delay(33);
  139.                                 if(d3==0)
  140.                                 {                                
  141.                                         haoma=3;
  142.                                         break;                                
  143.                                 }               
  144.                                 if(d4==0)                                 
  145.                                         delay(33);
  146.                                 if(d4==0)
  147.                                 {                                
  148.                                         haoma=4;
  149.                                         break;                                
  150.                                 }                        
  151.                                 if(d5==0)                                 
  152.                                         delay(33);
  153.                                 if(d5==0)
  154.                                 {                                
  155.                                         haoma=5;
  156.                                         break;                                
  157.                                 }                        
  158.                         
  159.                         }         
  160.                         xianshi=daojishi;        
  161.                         LED=1;     
  162.                         delay(400);         
  163.                         LED=0;
  164.                         k=0;
  165.                 }
  166.         }        
  167. }            
復(fù)制代碼

以上程序51hei提供下載:
搶答器.docx (14.97 KB, 下載次數(shù): 7)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:791702 發(fā)表于 2020-6-28 12:29 | 顯示全部樓層
想要仿真圖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表