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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6500|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

51單片機8路搶答器Proteus仿真+代碼設(shè)計(可設(shè)置搶答和答題時間)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:378929 發(fā)表于 2019-1-11 19:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
時間有限,用數(shù)碼管顯示8路搶答
用定時器進行8路掃描,間隔可以調(diào)十分小
此外,具有設(shè)置時間的功能(搶答和答題時間)

8路搶答器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. void Setsecond();//搶答器答題和搶答時間的設(shè)置函數(shù)聲明
  4. void delay(int k); //延時函數(shù)聲明

  5. //數(shù)碼管選管位
  6. sbit Sel1=P2^0;
  7. sbit Sel2=P2^1;
  8. sbit Sel3=P2^2;
  9. sbit Sel4=P2^3;
  10. sbit Sel5=P2^4;
  11. sbit Sel6=P2^5;

  12. //搶答器的狀態(tài)指示燈
  13. sbit led=P2^6;   //顯示復(fù)位和設(shè)置時間的狀態(tài)
  14. sbit Led1=P3^1;  //搶答失敗時,該燈會一直閃爍
  15. sbit Led2=P3^2;  //答題完畢時,該燈會一直閃爍

  16. //搶答器初始化搶答和答題時間按鍵
  17. sbit Set1=P3^3;  //設(shè)置搶答時間,+
  18. sbit Set2=P3^4;  //設(shè)置搶答時間,-
  19. sbit Set3=P3^5;  //設(shè)置答題時間,+
  20. sbit Set4=P3^6;  //設(shè)置答題時間,-
  21. sbit RST=P2^7;   //搶答器的復(fù)位按鍵
  22. sbit EN=P3^0;    //搶答器使能和設(shè)置搶答和答題時間按鍵

  23. unsigned char Tshu1=11,Tshu2=31,shu1=11,shu2=31,shu;//搶答器搶答時間和答題時間的相關(guān)變量
  24. unsigned char count0=0,count1=0,roberflag=0,scond1=0,second2=0,robernum=0;//搶答者的相關(guān)變量
  25. unsigned char Shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管段碼值
  26. bit Enflag=0; //搶答器使能的工作標(biāo)志變量,0表示正常工作,1表示設(shè)置時間(搶答和答題)


  27. void main()  //主函數(shù)
  28. {
  29.         unsigned char n=0;
  30.         TMOD=0x11;Led1=0;Led2=0;
  31.         TH0=(2^16-50000)/2^8;TL0=(2^16-50000)%2^8;
  32.         TH1=(2^16-50000)/2^8;TL1=(2^16-50000)%2^8;
  33.         TR0=1;ET0=1;TR1=1;ET1=1;EA=1;
  34.         while(1)
  35.         {
  36.                 for(n=0;n<6;n++) //這個循環(huán),實現(xiàn)數(shù)碼管的動態(tài)顯示
  37.                 {
  38.                 switch(n)
  39.                 {
  40.                         case 0:Sel1=1,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=0;
  41.                         if(Enflag == 0)
  42.                         P0=~Shuma[shu/10];
  43.                         else
  44.                         P0=~Shuma[shu1/10];break;
  45.                         case 1:Sel1=0,Sel2=1,Sel3=0,Sel4=0,Sel5=0,Sel6=0;
  46.                         if(Enflag == 0)
  47.                         P0=~Shuma[shu%10];
  48.                         else
  49.                         P0=~Shuma[shu1%10];break;
  50.                         case 2:Sel1=0,Sel2=0,Sel3=1,Sel4=0,Sel5=0,Sel6=0;P0=0xBF;break;
  51.                         case 3:Sel1=0,Sel2=0,Sel3=0,Sel4=1,Sel5=0,Sel6=0;P0=0xBF;break;
  52.                         case 4:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=1,Sel6=0;
  53.                         if(Enflag == 0)
  54.                         P0=~Shuma[robernum/10];
  55.                         else
  56.                         P0=~Shuma[shu2/10];break;
  57.                         case 5:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=1;
  58.                         if(Enflag == 0)
  59.                         P0=~Shuma[robernum%10];
  60.                         else
  61.                         P0=~Shuma[shu2%10];break;
  62.                         }
  63.                   delay(20);
  64.                         P0=0xff;
  65.          }
  66. }
  67. }

  68. void delay(int k)   //延時函數(shù),主要是為了數(shù)碼管的動態(tài)顯示
  69. {
  70.    while(k--);
  71. }

  72. void Timer0() interrupt 1  //定時器0,主要用于各種按鍵的掃描,每200ms一次
  73. {  
  74.   TH0=(2^16-50000)/2^8;TL0=(2^16-50000)%2^8;
  75.         count0++;
  76.         P1=0x00;
  77.         if(count0 == 5)
  78.         {
  79.                 count0=0;
  80.                 Setsecond();  //調(diào)用設(shè)置時間函數(shù),檢測是否有設(shè)置時間的動作
  81.                 if(RST == 0) //檢測是否有復(fù)位動作,有動作,則實現(xiàn)部分變量初始化值
  82.                 {
  83.                         roberflag=0;
  84.                         robernum=0;shu=0;
  85.                         led=~led;Led1=0;Led2=0;
  86.                         shu1=Tshu1;shu2=Tshu2;
  87.                 }
  88.                 if(EN == 0)
  89.                 {
  90.                         Enflag=~Enflag;
  91.                         led=~led;Led1=0;Led2=0;
  92.                 }
  93.                 if(Enflag == 0) //正常工作時候的,搶答人號碼的識別和顯示(同時判斷8口,不準(zhǔn)次掃描,無優(yōu)先級)
  94.                 {
  95.                 if(P1 != 0x00)
  96.                 {
  97.                         if(roberflag == 0) //只有在搶答時間才能搶答,roberflag=0表示搶答,1答題,2搶答失敗,3答題完畢
  98.                         {
  99.                         roberflag++;  
  100.                         switch(P1)
  101.                         {
  102.                                 case 0x01:robernum=1;break;
  103.                                 case 0x02:robernum=2;break;
  104.                                 case 0x04:robernum=3;break;
  105.                                 case 0x08:robernum=4;break;
  106.                                 case 0x10:robernum=5;break;
  107.                                 case 0x20:robernum=6;break;
  108.                                 case 0x40:robernum=7;break;
  109.                                 case 0x80:robernum=8;break;
  110.                                 default:break;
  111.                         }
  112.                 }
  113.         }
  114. }
  115. }
  116.         }

  117. void Timer1() interrupt 3    //定時器1主要是用于工作時的數(shù)碼顯示,跑表,1一秒刷新一次
  118. {
  119.         TH1=(2^16-50000)/2^8;TL1=(2^16-50000)%2^8;
  120.         if(roberflag == 2)
  121.                 Led1=~Led1;
  122.         if(roberflag == 3)
  123.                 Led2=~Led2;
  124.         count1++;
  125.         if(count1 == 20) //正常工作時候的跑表
  126.         {
  127.                 if(Enflag == 0)
  128.                 {
  129.                 if(roberflag == 0)  //搶答時間的跑表  
  130.                 {
  131.                         shu1--;
  132.                         shu = shu1;
  133.                 }
  134.                 if(roberflag == 1)  //答題時間的跑表
  135.                 {
  136.                         shu2--;
  137.                         shu = shu2;
  138.                 }
  139.                 if(shu1 == 0)
  140.                         roberflag=2;
  141.                 if(shu2 == 0)
  142.                         roberflag=3;
  143.           }
  144.                   count1=0;
  145.         }
  146. }

  147. void Setsecond()   //搶答時間和答題時間設(shè)置函數(shù),也是被T0調(diào)用,實現(xiàn)設(shè)置時間功效。
  148. {
  149.         if(Enflag == 1)
  150.         {
  151.                
  152.         if( Set1 == 0)
  153.         {
  154.           Tshu1++;
  155.         }
  156.         if(Set2 == 0)
  157.         {
  158.           Tshu1--;
  159.         }
  160.         if(Set3 == 0)
  161.         {
  162.                 Tshu2++;
  163.         }
  164.         if(Set4 == 0)
  165.         {
  166.                 Tshu2--;
  167.         }
  168.         shu1=Tshu1;  //Tshu1,Tshu2的出現(xiàn)是為了實現(xiàn)設(shè)置的搶答和答題時間具有存儲功能,不隨跑表而發(fā)生變化
  169.         shu2=Tshu2;
  170.   }
  171. }
復(fù)制代碼

所有資料51hei提供下載:
RoberAck.rar (18.17 KB, 下載次數(shù): 131)


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:464809 發(fā)表于 2019-1-12 10:23 | 只看該作者
有匯編程序嗎??
回復(fù)

使用道具 舉報

板凳
ID:736988 發(fā)表于 2020-5-4 17:29 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

地板
ID:344089 發(fā)表于 2020-12-26 16:01 | 只看該作者
好資料,謝謝樓主分享,學(xué)到了
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天堂视频一区 | 天天躁人人躁人人躁狂躁 | 国产成人免费 | 一区二区三区视频在线免费观看 | 国产精品极品美女在线观看免费 | 激情视频一区 | 日韩乱码一二三 | 日韩在线一区二区 | 欧美极品一区二区 | 免费xxxx大片国产在线 | 69av在线视频 | 欧美久久久久久久久中文字幕 | 亚洲欧美国产毛片在线 | 精品av天堂毛片久久久借种 | 亚洲精品乱码久久久久久按摩观 | av入口 | 99tv成人影院 | 国产无套一区二区三区久久 | 亚洲一区国产 | 一区二区高清在线观看 | 国产精品美女久久久久aⅴ国产馆 | 高清亚洲| 日韩视频在线播放 | 黄色av免费| 午夜精品久久久久久久星辰影院 | 日韩精品一区二区在线观看 | 午夜精品久久久久久久 | 中文字幕成人 | www.嫩草| 日韩欧美精品一区 | 玖玖精品 | 成人av片在线观看 | 人人爽人人爽 | 亚洲成人精品 | 国产欧美精品一区二区色综合 | 一区二区三区精品 | 一区影视 | 亚洲精品成人免费 | 精品在线观看入口 | 成人精品鲁一区一区二区 | 国产综合久久 |