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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:828119 發表于 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. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:368534 發表于 2020-10-11 10:16 | 只看該作者
程序沒有細看,有仿真器的話,看看程序有沒有進入減法的相關代碼,應該很好檢查的。
回復

使用道具 舉報

板凳
ID:160500 發表于 2020-10-11 10:24 | 只看該作者
程序邏輯不對啊。我沒有看你的程序,只是從問題來推測BUG
回復

使用道具 舉報

地板
ID:21069 發表于 2020-10-11 19:54 | 只看該作者
不要else if(keyscanf()==2),直接 if(keyscanf()==2),可先將值設一個3,4,5,按減看結果,也可屏蔽加的部份直接調減的部份
回復

使用道具 舉報

5#
ID:239055 發表于 2020-10-12 08:05 來自觸屏版 | 只看該作者
你按鈕檢測返回邏輯有問題,你可以直接寫K1==0的時候執行加,k2執行減,沒必要執行一個返回,然后再用返回值來判斷加還是減
回復

使用道具 舉報

6#
ID:828434 發表于 2020-10-12 09:42 | 只看該作者
程序沒有細看,有仿真器的話,看看程序有沒有進入減法的相關代碼,應該很好檢查的。
回復

使用道具 舉報

7#
ID:584814 發表于 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;
}
都是順次執行寫成這樣條理就清楚了:
if(k1==0)return 2;
if(k2==0)return 1;
if(k1==1&&k2==1)keyan=1;
keyscanf()不管前面return了什么結尾都return 0。
先理清程序,其他問題自己查。
回復

使用道具 舉報

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

使用道具 舉報

9#
ID:828119 發表于 2020-10-12 21:01 | 只看該作者
好的,正在改,謝謝各位
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本天天操 | 一区不卡在线观看 | 99久久久99久久国产片鸭王 | 国产视频一区二区 | 九九色综合 | 久久亚洲欧美日韩精品专区 | 国产综合一区二区 | 在线一级片 | 黄网站色大毛片 | 日韩精品在线看 | av免费成人 | 欧美日韩大陆 | 在线观看成人 | 免费一区二区 | 欧美视频三区 | 涩涩操 | 欧美美女爱爱 | 国产精品久久久久久久久久免费看 | 特级黄一级播放 | 一级h片| 中文字幕一区二区三区四区五区 | 一区二区三区欧美 | 欧美在线一区二区三区 | 欧美淫| a视频在线 | 亚洲综合字幕 | 天天操天天天干 | 午夜精品久久久久久 | 免费一看一级毛片 | 亚洲综合精品 | 成人国产精品免费观看 | 天天射影院 | 亚洲高清av| 欧美日韩在线免费 | 在线观看久草 | 91精品91久久久 | 国产一区二区三区免费观看在线 | www.久久99| 国产精品特级毛片一区二区三区 | 日韩欧美一区在线 | 中午字幕在线观看 |