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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1799|回復: 2
打印 上一主題 下一主題
收起左側

求大佬,把這個單片機程序添上注釋,實在看不懂,想學習

[復制鏈接]
跳轉到指定樓層
樓主
ID:905437 發表于 2021-4-18 20:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. *  標題:                           三路搶答器                                  *
  2.                                                    *
  3. *                                                                                                                                                           *
  4. *  實驗說明:在10s的時間內,三位選手進行按鍵搶答,如果1號搶答,那么數碼管將顯示*
  5. 1號選手的號碼。并且蜂鳴器響,以此類推。如果10s時間到,蜂鳴器響,選手
  6. 無法進行搶答                                                                                    *                                                      


  7. #include <reg52.h>

  8. //IO口定義
  9. #define GPIO_DIG P0
  10. #define GPIO_SHOW P2

  11. sbit LSA=P3^0;
  12. sbit beep=P1^5;
  13. sbit K1=P3^1;
  14. sbit K2=P1^0;
  15. sbit K3=P1^1;
  16. sbit K4=P1^2;

  17. //--定義全局變量--//
  18. typedef unsigned int u16;
  19. unsigned char code DIG_CODE[18]={
  20. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  21. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff};
  22. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
  23. unsigned int Ge=0;
  24. unsigned int Shi=1;
  25. unsigned int num=0;
  26. unsigned int Res=10;
  27. unsigned int flag=0;

  28. //全局函數
  29. void DigDisplay();

  30. void delay(u16 i)
  31. {
  32.         while(i--);      
  33. }

  34. void main()
  35. {
  36.     TMOD = 0x01;
  37.     TH0 = 0x3C;
  38.     TL0 = 0x0B0;
  39.     EA = 1;
  40.     ET0 = 1;
  41.     TR0 = 1;
  42.         DigDisplay();


  43. }


  44. void DigDisplay()
  45. {
  46.         unsigned char i;
  47.         unsigned int j;
  48.         while(1)
  49.         {
  50.         for(i=0;i<2;i++)
  51.         {
  52.                 switch(i)         //位選,選擇點亮的數碼管,
  53.                 {
  54.                         case(0):
  55.                                 LSA=0;
  56.                                 GPIO_DIG=DIG_CODE[Shi];//發送段碼
  57.                                 break;//顯示第0位
  58.                         case(1):
  59.                                 LSA=1;
  60.                                 GPIO_DIG=DIG_CODE[Ge];//發送段碼
  61.                                 break;//顯示第1位
  62.                 }
  63.                
  64. /****************************************************************************/
  65. /*消隱函數要在數碼管更新頻率很快的條件下,才起作用,手動更換數碼管位選完全達不到這么快的速度,因此在這種情況下也是沒必要用消隱的  */
  66.                 j=10;                                                 //掃描間隔時間設定
  67.                 while(j--);        
  68.                 GPIO_DIG=0x00;//消隱
  69.                 }
  70.         if(K1==0)
  71.         {
  72.                 Res=10;
  73.                 flag=0;
  74.         }

  75.     else if(K2==0)
  76.         {
  77.                 GPIO_SHOW=~DIG_CODE[1];
  78.                 while(1)
  79.                 {
  80.                 beep=~beep;
  81.                 delay(10);
  82.                 if(K1==0)
  83.                 {
  84.                  Res=10;
  85.                  flag=0;
  86.                  GPIO_SHOW=~DIG_CODE[17];
  87.                  break;        
  88.                 }
  89.                 }

  90.         }

  91.         else if(K3==0)
  92.         {
  93.                 GPIO_SHOW=~DIG_CODE[2];
  94.                 while(1)
  95.                 {
  96.                 beep=~beep;
  97.                 delay(10);
  98.                 if(K1==0)
  99.                 {
  100.                  Res=10;
  101.                  flag=0;
  102.                  GPIO_SHOW=~DIG_CODE[17];
  103.                  break;
  104.                 }        
  105.                 }
  106.         }

  107.         else if(K4==0)
  108.         {
  109.                 GPIO_SHOW=~DIG_CODE[3];
  110.                 while(1)
  111.                 {
  112.                 beep=~beep;
  113.                 delay(10);
  114.                 if(K1==0)
  115.                 {
  116.                  Res=10;
  117.                  flag=0;
  118.                  GPIO_SHOW=~DIG_CODE[17];
  119.                  break;
  120.                 }        
  121.                 }
  122.         }

  123.         }


  124. }

  125. void Int1() interrupt 1
  126. {
  127.         TMOD = 0x01;
  128.     TH0 = 0x3C;
  129.     TL0 = 0x0B0;
  130.         num++;

  131.         if(num==20)
  132.         {
  133.                 num=0;
  134.                 flag++;
  135.                 Res--;
  136.                 Ge=Res%10;
  137.                 Shi=Res/10;               
  138.         }
  139.         
  140.         if(flag==10)
  141.         {
  142.                 while(1)
  143.                 {
  144.                 beep=~beep;
  145.                 delay(10);

  146.                 if(K1==0)
  147.             {
  148.                 Res=10;
  149.                 flag=0;
  150.                 break;
  151.             }
  152.                 }
  153.         }        
  154. }
復制代碼


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

使用道具 舉報

沙發
ID:584814 發表于 2021-4-20 10:42 | 只看該作者
按照VIP的路徑會很快有答案的
回復

使用道具 舉報

板凳
ID:889094 發表于 2021-4-20 12:28 | 只看該作者
看了顯示2個數據管還用個for 循環,程序結構不怎么樣。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美aaa一级片 | 99国产精品久久久久久久 | 欧美自拍视频 | 欧美日韩一区二区三区四区五区 | 国产 日韩 欧美 在线 | 国产在线观看一区二区三区 | 久久精品国产一区二区电影 | 国产精品1 | 性欧美精品一区二区三区在线播放 | 一区二区三区免费观看 | 亚州精品天堂中文字幕 | 午夜免费| 国产成人精品网站 | 欧美不卡 | 欧美日韩高清在线观看 | 在线国产一区二区 | 99精品一区二区三区 | 午夜免费网站 | a久久| 免费一区二区三区 | 天堂在线免费视频 | 一区二区日本 | 高清国产一区二区 | 国产精品高潮呻吟久久av野狼 | 欧美精品久久久久 | 久久99精品久久久久久秒播九色 | 九九亚洲| 中文字幕亚洲一区二区三区 | 日本三级网站在线 | 五月综合激情在线 | 天天操天天干天天透 | 五月婷亚洲 | 国产精品久久久久国产a级 欧美日韩国产免费 | 国产精品一区一区 | 欧美成人精品激情在线观看 | 九九亚洲 | 成人免费在线视频 | 亚洲精品一区二区三区蜜桃久 | com.国产| а天堂中文最新一区二区三区 | www.日本在线观看 |