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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數(shù)碼管只顯示四位0,而且按鍵無反應(yīng),應(yīng)該是單片機(jī)程序邏輯上的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:447891 發(fā)表于 2019-5-29 23:53 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
下面是原程序
  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.                 if(key_temp==(P1&0x0f))
  24.                 {
  25.                   if(P1^0==0)
  26.                                 key=1;
  27.                         if(P1^1==0)
  28.                                 key=2;
  29.                         if(P1^2==0)
  30.                                 key=3;
  31.                         if(P1^3==0)
  32.                                 key=4;
  33.                 }
  34.                 state_key=2;
  35.                 }
  36.                   
  37.                   else
  38.                         state_key=0;
  39.                         break;        
  40.                
  41.         case 2:
  42.                 if(key_temp==(P1&0x0f))
  43.                 {
  44.                 state_key=0;
  45.                 break;
  46.                 }
  47.                 key=0;//default:break;
  48. }

  49. }

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


  92. void display0()
  93. {

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



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



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




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

  141.         }
  142. }
復(fù)制代碼


數(shù)碼管只顯示四位0,而且按鍵無反應(yīng),應(yīng)該是邏輯上的問題,實(shí)在找不到,求大神!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:96682 發(fā)表于 2019-5-30 06:52 | 只看該作者
這源程序明顯被閹割過
回復(fù)

使用道具 舉報(bào)

板凳
ID:56665 發(fā)表于 2019-5-30 08:22 | 只看該作者
定時器及中斷好像沒問題,按鍵和顯示程序認(rèn)真檢查一下,這兩者其中一個出問題都會導(dǎo)致顯示0而沒有其它動作。
回復(fù)

使用道具 舉報(bào)

地板
ID:447891 發(fā)表于 2019-5-30 08:27 | 只看該作者
wc86110 發(fā)表于 2019-5-30 06:52
這源程序明顯被閹割過

這是我自己寫的程序,通過3位按鈕使用計(jì)算器
回復(fù)

使用道具 舉報(bào)

5#
ID:319023 發(fā)表于 2019-5-30 11:20 | 只看該作者
可以自己調(diào)試一下, main函數(shù)里先把數(shù)碼管用延時的方式都顯示一遍,沒有問題再調(diào)試按鍵。剛開始還要多看別人的代碼
回復(fù)

使用道具 舉報(bào)

6#
ID:517466 發(fā)表于 2019-5-30 14:13 | 只看該作者
1、keyaction()函數(shù)中
case 2:i=0;
                     i++;
               if(i>9)
               break;
        case 3:j=0;
                                 if(j<=3)
                                        j++;
這樣的處理邏輯,每次主函數(shù)進(jìn)入這個函數(shù)后,P1^1或者P1^2在按下時,走case 2或case 3的分支,i和j永遠(yuǎn)都是從0開始,加一次變成1,永遠(yuǎn)不會有2以后的數(shù)字出現(xiàn)?你確定是需要做成這樣的邏輯?
2、display()函數(shù)中case 1:P2=table[b][b];break;,這個table[b][b]是什么意思?
3、keyscan函數(shù)中
case 0:
         key_temp=(P1&0x0f);
         if(key_temp!=0x0f)
         t=0;
         state_key=1;
的處理,無論是否有按鈕按下,state_key=1;都會被執(zhí)行,下次進(jìn)入case 1的分支,你確定這個邏輯正確?不是應(yīng)該有按鈕按下了,下次才進(jìn)入case 1,判斷是那個按鈕按下嗎?是不是改成
if(key_temp!=0x0f) {
         t=0;
         state_key=1;
}更合理一些?
按照你現(xiàn)在的掃描邏輯,即使沒有按鈕按下,case 0,case 1,case 2也會按照順序全都走一遍!

另外自己的程序,無論是變量的聲明,還是代碼,都沒有注釋,即使現(xiàn)在你能看懂。過段時間你再看未必能明白。既然編程,一定要養(yǎng)成寫注釋的良好習(xí)慣。
回復(fù)

使用道具 舉報(bào)

7#
ID:213173 發(fā)表于 2019-5-30 14:46 | 只看該作者
樓上都是亂猜的,這種最基礎(chǔ)最基礎(chǔ)的東西都是錯的怎么幫你???
                case 1:
                        if(t>=10)
                        {
                                if(key_temp==(P1&0x0f))
                                {
                                        if(P1^0==0)??????????
                                                key=1;
                                        if(P1^1==0)??????????
                                                key=2;
                                        if(P1^2==0)?????????
                                                key=3;
                                        if(P1^3==0)?????????
                                                key=4;
                                }
                                state_key=2;
                        }
                        else
                        state_key=0;
                        break;        
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情国产精品 | 亚洲精品久久久蜜桃 | 欧洲一区二区三区 | 国产精品1区2区3区 一区中文字幕 | 天色综合网 | 国产精品久久久久久久久久尿 | 另类 综合 日韩 欧美 亚洲 | 日本人做爰大片免费观看一老师 | 精品欧美一区二区三区免费观看 | 欧美精品二区 | 天天干天天插天天 | 日本手机看片 | 欧美一级黄色片免费观看 | 精品日韩在线 | 人人操日日干 | 日日av| 天天操天天插天天干 | 日韩三级| 亚洲色图图片 | 国产成人网 | 国产精品一二三区 | a级大片免费观看 | 黄网站免费在线 | 精品一区二区三区四区 | 成人在线视频免费观看 | 欧美性另类| 爱爱小视频| 九九伊人sl水蜜桃色推荐 | 91精品久久久久久久久久 | 日本在线免费看最新的电影 | 在线观看亚洲专区 | 亚洲精品久久久久久下一站 | 五月婷六月丁香 | 国产成人免费视频网站视频社区 | 国产一区二区在线播放 | аⅴ资源新版在线天堂 | 在线色网 | 久久鲁视频 | 国产精彩视频 | 国产精品毛片久久久久久 | 国产精品国产精品国产专区不蜜 |