欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求大佬,把這個單片機程序添上注釋,實在看不懂,想學習 [打印本頁]

作者: 孤獨人話    時間: 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. }
復制代碼



作者: man1234567    時間: 2021-4-20 10:42
按照VIP的路徑會很快有答案的
作者: birdzhyli    時間: 2021-4-20 12:28
看了顯示2個數據管還用個for 循環,程序結構不怎么樣。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1