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

標題: 單片機數碼管只顯示0,按鍵無反應,求幫忙 [打印本頁]

作者: skcxks    時間: 2019-5-30 09:55
標題: 單片機數碼管只顯示0,按鍵無反應,求幫忙
  1. #include"math.h"
  2. #include "reg51.h"
  3. #define uchar unsigned char
  4. uchar key_temp,key=0,i,j,k,t=0;
  5. uchar a=0,b=0,c=0,d=0;
  6. unsigned long qian,hou;
  7. uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  8. static unsigned char state_key=0;
  9. static unsigned char state_dis=0;


  10. void keyscan()
  11. {
  12.         switch(state_key)
  13. {
  14.         case 0:
  15.          key_temp=(P1&0x0f);
  16.          if(key_temp!=0x0f)
  17.          t=0;
  18.          state_key=1;
  19.    break;
  20.         case 1:
  21.                 if(t>=10)
  22.                 {
  23.                 t=0;
  24.                 if(key_temp==(P1&0x0f))
  25.                 {
  26.                   if(P1^0==0)
  27.                                 key=1;
  28.                         if(P1^1==0)
  29.                                 key=2;
  30.                         if(P1^2==0)
  31.                                 key=3;
  32.                         if(P1^3==0)
  33.                                 key=4;
  34.                 }
  35.                 state_key=2;
  36.                 }
  37.                   
  38.                   else
  39.                         state_key=0;
  40.                         break;        
  41.                
  42.         case 2:
  43.                 if(P1&0x0f==0x0f)
  44.                 {
  45.                 state_key=0;
  46.                 break;
  47.                 }
  48.                 key=0;//default:break;
  49. }

  50. }

  51. void keyaction()
  52. {
  53. switch(key)
  54. {
  55.         case 1:break;
  56.         case 2:i=0;
  57.                      i++;
  58.                if(i>9)
  59.                break;
  60.         case 3:j=0;
  61.                                  if(j<=3)
  62.                                         j++;
  63.                                  switch(j)
  64.                                          {
  65.                                                  case 0:P3=0xfe;i++;break;
  66.                                                  case 1:P3=0xfd;i++;break;
  67.                                                  case 2:P3=0xfb;i++;break;
  68.                                                  case 3:P3=0xf7;i++;break;
  69.                                          }
  70.                                          break;
  71.         case 4: k=0;
  72.                       k++;
  73.                                         if(k==1)
  74.                                         hou=hou+qian;
  75.           qian=0;
  76.           if(k==2)
  77.           hou=hou+qian;
  78.           qian=0;
  79.           k=0;
  80.                                         break;                                       
  81. }
  82. }
  83. void display()
  84. {
  85. switch(j)
  86. {
  87.         case 0:P2=table[a];break;
  88.         case 1:P2=table[b];break;
  89.         case 2:P2=table[c];break;
  90.         case 3:P2=table[d];break;
  91. }
  92. }


  93. void display0()
  94. {

  95.         switch(state_dis)
  96. {
  97.         case 0:a=i;b=0;c=0;d=0;break;
  98.         case 1:b=i;c=0;d=0;break;
  99.         case 2:c=i;d=0;break;
  100.         case 3:d=i;break;
  101. }
  102. display();
  103. }



  104. void time0init()
  105. {
  106. TMOD=0x01;
  107.         TH0=-50000/256;
  108.          TL0=-50000%256;
  109.           EA=1;
  110.            ET0=1;
  111.             TR0=1;
  112. }



  113. void time0()interrupt 1
  114. {
  115. TH0=-50000/256;
  116. TL0=-50000%256;
  117. t++;
  118.                 if(state_dis<=3)
  119.                         state_dis++;
  120.                 else
  121.                   state_dis=0;
  122. if(t<10)
  123. t++;
  124. }




  125. void main()
  126. {
  127.         time0init();
  128.   while(1)
  129.         {
  130.          keyscan();
  131.          keyaction();
  132.          display0();
  133.          switch(j)
  134.          {
  135.                  case 0:qian=a;break;
  136.                  case 1:qian=a+b*10;break;
  137.                  case 2:qian=a+b*10+c*100;break;
  138.                  case 3:qian=a+b*10+c*100+d*1000;break;
  139.          }
  140.         a=0;
  141.         b=0;
  142.         c=0;
  143.         d=0;

  144.         }
復制代碼

數碼管只顯示0,按鍵無反應,求幫忙


作者: lxbeiming    時間: 2019-5-30 11:30
原理圖得提供啊,至少框圖有吧,怎么接線的
作者: suncat0504    時間: 2019-5-30 14:35
求助之前,自己先別急,靜下心來,仔細檢查代碼有沒有錯誤;程序處理邏輯有沒有問題。必要的話,各變量隨著處理流程的值變化,列成清單。如果程序是你寫的,對于if判斷后的處理代碼,是不是忘了{}而導致處理流程出問題,一定要檢查仔細。我看你的代碼,沒有注釋,不敢肯定有沒有問題,但是case中初始化為0,再判斷范圍,然后加1,這樣的處理邏輯很不正常,會導致每次都從0開始計數,if判斷后加1.每次都這樣,永遠不會有2以上的值。
作者: a庚    時間: 2019-5-30 19:46
不要這么用全局變量去傳遞參數,用函數返回值或者指針。這么寫自己看不亂么?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 男人天堂网av | www.99热| 午夜免费在线观看 | 人妖一区| 久久中文一区二区 | 免费观看一级毛片 | 国产91在线精品 | 国产精品视频免费观看 | 亚洲视频一区 | 亚洲天堂中文字幕 | 欧美精品一区在线发布 | 亚洲福利在线观看 | 国产精品精品视频一区二区三区 | 国产精品美女视频 | 成人精品国产 | av一级毛片| 一级美国黄色片 | 亚洲精品久久久久久久不卡四虎 | 免费在线h视频 | 欧洲高清转码区一二区 | 久久久久久成人 | 一级做a爰片性色毛片视频停止 | 精品一区二区电影 | 欧美日韩在线视频一区 | 羞羞的视频免费观看 | 特级毛片 | 一区二区三区国产精品 | 国产一区二区三区亚洲 | 欧美精品一区在线 | 欧美视频一区二区三区 | 国产精品99久久久久久动医院 | 久久高潮 | 欧美色a v| 黄色在线网站 | 国产精品毛片一区二区在线看 | 国产成人亚洲精品自产在线 | 中文字幕国产视频 | 久久99精品久久久久子伦 | 99伊人| 国产精品99久久久久久久vr | 亚洲国产精品久久人人爱 |