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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2757|回復: 8
收起左側

我想用單片機按鍵控制數(shù)碼管但是結果顯示按只能增加而不能減少?

[復制鏈接]
ID:828119 發(fā)表于 2020-10-11 08:25 | 顯示全部樓層 |閱讀模式
單片機源程序如下:
  1. #include"reg52.h"
  2. typedef unsigned int u16;
  3. typedef unsigned char u8;
  4. u8 num=0;
  5. u8 buff[2];
  6. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  7.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  8. sbit k2=P3^0;
  9. sbit k1=P3^1;
  10. sbit p22=P2^2;
  11. sbit p23=P2^3;
  12. sbit p24=P2^4;
  13. void delay(){
  14. u16 i=100;
  15. while(i--);
  16. }
  17. void digdisplay()
  18. {
  19.         u8 i;
  20.         for(i=0;i<=1;i++)
  21.         {
  22.                 switch(i)
  23.                 {
  24.                         case 0:p22=0;p23=0;p24=0;break;
  25.                         case 1:p22=0;p23=0;p24=1;break;}
  26.                          P0=buff[i];
  27.                         delay();
  28.                         P0=0x00;
  29.                
  30.         
  31.         }

  32. }
  33. u8 keyscanf()
  34. {
  35.         static u8 keyan=1;
  36.         if(keyan==1&&(k1==0||k2==0))
  37.         {        
  38.         delay();
  39.         keyan=0;
  40.         
  41. if(k1==0)return 2;
  42. else if(k2==0)return 1;
  43. }
  44. else if(k1==1&&k2==1){
  45.         keyan=1;
  46. }
  47. return 0;

  48. }


  49. void datpros()
  50. {
  51.         if(keyscanf()==1)
  52.         {num++;
  53.          if(num==100){
  54.          num=0;}
  55.         }
  56.         else if(keyscanf()==2)
  57.         {num--;
  58.         if(num==0)
  59.         {
  60.         num=99;}
  61.         }
  62.         buff[0]=smgduan[num%10];
  63.         buff[1]=smgduan[num/10];
  64. }




  65. void main()
  66. {
  67.         while(1){
  68.          datpros();
  69.          digdisplay();
  70.                    }

  71. }
復制代碼
回復

使用道具 舉報

ID:368534 發(fā)表于 2020-10-11 10:16 | 顯示全部樓層
程序沒有細看,有仿真器的話,看看程序有沒有進入減法的相關代碼,應該很好檢查的。
回復

使用道具 舉報

ID:160500 發(fā)表于 2020-10-11 10:24 | 顯示全部樓層
程序邏輯不對啊。我沒有看你的程序,只是從問題來推測BUG
回復

使用道具 舉報

ID:21069 發(fā)表于 2020-10-11 19:54 | 顯示全部樓層
不要else if(keyscanf()==2),直接 if(keyscanf()==2),可先將值設一個3,4,5,按減看結果,也可屏蔽加的部份直接調(diào)減的部份
回復

使用道具 舉報

ID:239055 發(fā)表于 2020-10-12 08:05 來自觸屏版 | 顯示全部樓層
你按鈕檢測返回邏輯有問題,你可以直接寫K1==0的時候執(zhí)行加,k2執(zhí)行減,沒必要執(zhí)行一個返回,然后再用返回值來判斷加還是減
回復

使用道具 舉報

ID:828434 發(fā)表于 2020-10-12 09:42 | 顯示全部樓層
程序沒有細看,有仿真器的話,看看程序有沒有進入減法的相關代碼,應該很好檢查的。
回復

使用道具 舉報

ID:584814 發(fā)表于 2020-10-12 11:05 | 顯示全部樓層
keyscanf()中的
if(k1==0)return 2;
else if(k2==0)return 1;
}
else if(k1==1&&k2==1){
        keyan=1;
}
都是順次執(zhí)行寫成這樣條理就清楚了:
if(k1==0)return 2;
if(k2==0)return 1;
if(k1==1&&k2==1)keyan=1;
keyscanf()不管前面return了什么結尾都return 0。
先理清程序,其他問題自己查。
回復

使用道具 舉報

ID:451718 發(fā)表于 2020-10-12 17:35 | 顯示全部樓層
判斷問題:
按鍵檢測那里是自己寫,還是抄回來改的。那個keyan變量,是處理連按效果用的么?  建議刪除這個判斷,先直接簡單的檢測按鍵。
解決辦法:
先不處理數(shù)字,把按鍵值直接反饋到顯示界面,看看按鍵起到效果沒有。 是不是你要的結果。
回復

使用道具 舉報

ID:828119 發(fā)表于 2020-10-12 21:01 | 顯示全部樓層
好的,正在改,謝謝各位
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表