久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 51單片機(jī)搶答器設(shè)計(jì) MAX7219程序Proteus仿真圖 [打印本頁]

作者: sivantroye    時(shí)間: 2025-6-28 14:19
標(biāo)題: 51單片機(jī)搶答器設(shè)計(jì) MAX7219程序Proteus仿真圖
以單片機(jī)為核心,設(shè)計(jì)一個(gè)8位競(jìng)賽搶答器:同時(shí)供8名選手或8個(gè)代表隊(duì)比賽,分別用8個(gè)按鈕S0-S7表示。
設(shè)置一個(gè)系統(tǒng)清除和搶答控制按鈕,由主持人控制。
搶答器具有鎖存與顯示功能。即選手按按鈕,鎖存相應(yīng)編號(hào),并在優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)清零。
搶答器具有定時(shí)搶答功能,且一次搶答的時(shí)間由主持人設(shè)定。
當(dāng)主持人啟動(dòng)“開始”鍵后,定時(shí)器進(jìn)行減計(jì)時(shí),同時(shí)揚(yáng)聲器發(fā)出短暫的聲響,聲響持續(xù)的時(shí)間為0.5s左右。
參賽選手在設(shè)定時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器上顯示選手的編號(hào)和搶答時(shí)間,并保持到主持人將系統(tǒng)清除為止。
如果定時(shí)時(shí)間已到,無人搶答,本次搶答無效,系統(tǒng)報(bào)警并禁止搶答,定時(shí)顯示器上顯示00.
通過按鍵改變搶答時(shí)間。



單片機(jī)源程序如下:
  1. #include "reg51.h"
  2. #include "max7219.h"
  3. sbit beep=P3^7;//蜂鳴器
  4. sbit k1=P2^0;//清零/設(shè)置
  5. sbit k2=P2^1;//開始

  6. uint beep_time=0;//蜂鳴器延時(shí)
  7. uchar mode=0;//模式,0復(fù)位,1開始,2設(shè)置,3停止,4超時(shí)錯(cuò)誤
  8. uchar sec=0,miao=10,miao_set=10;//倒計(jì)時(shí)
  9. uchar num=0;

  10. void main()
  11. {
  12.         TMOD|=0X01;
  13.         TH0=0X3C;
  14.         TL0=0XB0;
  15.         TH1=0XFC;
  16.         TL1=0X18;
  17.         ET1=1;        
  18.         ET0=1;//打開定時(shí)器0中斷允許
  19.         EA=1;//打開總中斷
  20.         TR0=1;//打開定時(shí)器
  21.         TR1=1;
  22.         max_init(4);
  23.         max_send_byte(1,miao/10);//初始化顯示
  24.         max_send_byte(2,miao%10);
  25.         max_send_byte(3,num/10);
  26.         max_send_byte(4,num%10);
  27.         while(1)
  28.         {
  29.                 if(mode>2)//開始模式
  30.                 {
  31.                         if(!k1)//復(fù)位
  32.                         {
  33.                                 mode=0;//復(fù)位模式
  34.                                 miao=miao_set;//復(fù)位倒計(jì)時(shí)
  35.                                 num=0;
  36.                                 max_send_byte(1,miao/10);//顯示
  37.                                 max_send_byte(2,miao%10);
  38.                                 max_send_byte(3,num/10);
  39.                                 max_send_byte(4,num%10);
  40.                                 while(!k1);
  41.                         }
  42.                 }
  43.                 if(mode==0)//復(fù)位狀態(tài)
  44.                 {
  45.                         if(!k2)//開始
  46.                         {
  47.                                 mode=1;//開始模式
  48.                                 miao=miao_set;
  49.                                 beep_time=500;//啟動(dòng)蜂鳴器
  50.                                 while(!k2);
  51.                         }
  52.                         if(!k1)//設(shè)置時(shí)間
  53.                         {
  54.                                 if(miao_set<30)
  55.                                         miao_set++;
  56.                                 else
  57.                                         miao_set=0;
  58.                                 max_send_byte(1,miao_set/10);//顯示
  59.                                 max_send_byte(2,miao_set%10);
  60.                                 while(!k1);
  61.                         }
  62.                 }
  63.                 if(mode==1)//搶答模式
  64.                 {
  65.                         switch(P1)
  66.                         {
  67.                                 case 0xfe:mode=3;num=1;//選手1
  68.                                         max_send_byte(3,num/10);//顯示
  69.                                         max_send_byte(4,num%10);
  70.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  71.                                         break;
  72.                                 case 0xfd:mode=3;num=2;//選手2
  73.                                         max_send_byte(3,num/10);//顯示
  74.                                         max_send_byte(4,num%10);
  75.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  76.                                         break;
  77.                                 case 0xfb:mode=3;num=3;//選手3
  78.                                         max_send_byte(3,num/10);//顯示
  79.                                         max_send_byte(4,num%10);
  80.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  81.                                         break;
  82.                                 case 0xf7:mode=3;num=4;//選手4
  83.                                         max_send_byte(3,num/10);//顯示
  84.                                         max_send_byte(4,num%10);
  85.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  86.                                         break;
  87.                                 case 0xef:mode=3;num=5;//選手5
  88.                                         max_send_byte(3,num/10);//顯示
  89.                                         max_send_byte(4,num%10);
  90.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  91.                                         break;
  92.                                 case 0xdf:mode=3;num=6;//選手6
  93.                                         max_send_byte(3,num/10);//顯示
  94.                                         max_send_byte(4,num%10);
  95.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  96.                                         break;
  97.                                 case 0xbf:mode=3;num=7;//選手7
  98.                                         max_send_byte(3,num/10);//顯示
  99.                                         max_send_byte(4,num%10);
  100.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  101.                                         break;
  102.                                 case 0x7f:mode=3;num=8;//選手8
  103.                                         max_send_byte(3,num/10);//顯示
  104.                                         max_send_byte(4,num%10);
  105.                                         beep_time=3000;//啟動(dòng)蜂鳴器
  106.                         }
  107.                 }
  108.         }
  109. }
  110. void Timer0() interrupt 1//定時(shí)器中斷
  111. {
  112.         TH0=0X3C;//重裝50ms
  113.         TL0=0XB0;
  114.         if(mode==1)//開始模式
  115.         {
  116.                 if(sec<20) //計(jì)時(shí)1s
  117.                         sec++;
  118.                 else
  119.                 {
  120.                         sec=0;
  121.                         if(miao>0)//倒計(jì)時(shí)
  122.                         {
  123.                                 miao--;
  124.                                 max_send_byte(1,miao/10);//顯示
  125.                                 max_send_byte(2,miao%10);
  126.                         }
  127.                         else
  128.                         {
  129.                                 mode=4;//超時(shí)
  130.                                 num=0;
  131.                                 beep_time=3000;
  132.                                 max_send_byte(1,miao/10);//顯示
  133.                                 max_send_byte(2,miao%10);
  134.                                 max_send_byte(3,num/10);//顯示
  135.                                 max_send_byte(4,num%10);
  136.                         }
  137.                 }
  138.         }
  139. }

  140. void Timer1() interrupt 3//定時(shí)器1中斷
  141. {
  142.         TH1=0XFC;           //重裝定時(shí)器
  143.         TL1=0X18;
  144.         if(beep_time>0)//蜂鳴器響
  145.         {
  146.                 beep_time--;//蜂鳴器計(jì)時(shí)減一
  147.                 beep=!beep;        //蜂鳴器取反,產(chǎn)生500HZ頻率
  148.         }
  149.         else
  150.                 beep=1;                //關(guān)閉蜂鳴器
  151. }
復(fù)制代碼
  1. #include "max7219.h"
  2. #include "intrins.h"
  3. //數(shù)碼管地址從1到8
  4. void max_send_byte(uchar addr,uchar i) //發(fā)送i到addr
  5. {
  6.         uchar k=0;
  7.         uchar a;
  8.         a=addr;
  9.         max_load=0;
  10.         for(k=0;k<8;k++)
  11.         {
  12.                 if((a & 0x80)>0)
  13.                         max_din=1;
  14.                 else
  15.                         max_din=0;
  16.                 a<<=1;
  17.                 max_clk=0;
  18.                 _nop_();
  19.                 max_clk=1;
  20.         }
  21.         a=i;
  22.         for(k=0;k<8;k++)
  23.         {
  24.                 if((a & 0x80)>0)
  25.                         max_din=1;
  26.                 else
  27.                         max_din=0;
  28.                 a<<=1;
  29.                 max_clk=0;
  30.                 _nop_();
  31.                 max_clk=1;
  32.         }
  33.         max_load=1;
  34. }
  35. //初始化
  36. //i設(shè)置數(shù)碼管個(gè)數(shù)
  37. void max_init(uchar i)
  38. {
  39.         max_send_byte(0x0b,i);//設(shè)置個(gè)數(shù)
  40.     max_send_byte(0x09,0xff);//譯碼方式
  41.         max_send_byte(0x0a,0x0f);//最亮
  42.         max_send_byte(0x0c,0x01);//開啟顯示
  43.         max_send_byte(0x00,0x00);//關(guān)閉測(cè)試功能
  44. }

復(fù)制代碼

仿真程序:
資料.7z (2.96 MB, 下載次數(shù): 0)





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 99热国产| 99超碰在线观看 | 日韩精品极品 | 三级视频在线观看 | 成人免费毛片嘿嘿连载视频 | 日韩欧美综合 | 久久久夜色精品 | 欧美日本精品 | 亚洲精品蜜桃 | 亚洲精品日韩丝袜精品 | 色婷婷丁香 | 国产一区二区免费在线观看 | 中文有码在线观看 | 日韩视频精品 | 在线看的av| 亚洲国产日韩在线 | 精品久久久久久久久久久久久久 | 四虎影视av| 国产suv精品一区 | 一区二区网站 | 超碰中文字幕 | 国产免费黄色 | 69精品人人人人 | 黄色成人免费网站 | 一级片欧美 | 日韩黄色录像 | 久久久久国产一区二区三区 | 国产精品美女在线 | 欧美美女一区二区 | 精品99视频 | 亚洲免费精品视频 | 欧美一级色 | 国产www | 日本特级黄色片 | 国产偷自拍 | 中文字幕网址在线 | www一级片| 亚洲在线免费视频 | 波多野结衣视频一区 | 日韩欧美国产一区二区三区 | 超碰在线99|