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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9731|回復: 3
收起左側

關于單片機按鍵Key1,每按一次數碼管加一遇到的問題,請大神老師指導

[復制鏈接]
ID:233997 發表于 2017-11-17 23:19 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;

  7. sbit Key1=P3^1;
  8. sbit Key2=P3^0;
  9. sbit Key3=P3^2;
  10. sbit Key4=P3^3;

  11. uchar num,num1,shi,ge;
  12. uint z,i,j;

  13. uchar code smgdisplay[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  14. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  15. void delayms(uint z);

  16. void keydown()
  17. {
  18.         if(Key1==0)
  19.         {
  20.                 delayms(5);
  21.                 if(Key1==0)     //再次確認按鍵按下
  22.                 {
  23.                         num++;
  24.                         if(num==60)
  25.                         num=0;
  26.                          while(!Key1);  //此處等待按鍵釋放 ,但不加該語句,程序依然能夠實現。這是為什么呢?
  27.                 }
  28.                         

  29.         }

  30. }   //關于該處語句的理解如此:按鍵按下松開,數碼管數值加一。開發板上的現象是按下數碼管不顯示任何數字,松開數值加一。

  31. void display(uchar num1)
  32. {
  33.         shi=num1/10;
  34.         ge=num1%10;
  35.         
  36.         LSA=1;
  37.         LSB=0;
  38.         LSC=0;
  39.         
  40.         P0=smgdisplay[shi];
  41.         delayms(10);
  42.         P0=0X00;

  43.         LSA=0;
  44.         LSB=0;
  45.         LSC=0;
  46.         
  47.         P0=smgdisplay[ge];
  48.         delayms(10);
  49.         P0=0X00;
  50.         
  51.                

  52. }

  53. void main()
  54. {
  55.         while(1)
  56.         {
  57.                 keydown();
  58.                 display(num);
  59.         }

  60.                

  61. }

  62. void delayms(uint z)
  63. {
  64.         for(i=z;i>0;i--)
  65.         for(j=110;j>0;j--);

  66. }




復制代碼

HC6800-ES V2.0 新版.pdf

759.71 KB, 下載次數: 7

回復

使用道具 舉報

ID:149988 發表于 2017-11-18 04:35 | 顯示全部樓層

RE: 關于按鍵Key1,每按一次數碼管加一遇到的問題,請大神老師指導

while(!Key1);是將鍵值取反,如果手已松開,鍵值等于1,取反后,鍵值等于0,while(0);跳出大循環,執行后面的程序。如果此時手沒有松開,鍵值等于0,取反后,鍵值等于1,while(1);繼續進行大循環,什么時候鍵值等于1,取反后,鍵值等于0,那時候跳出大循環。這也是為什么手松開數碼管才顯示加1的原因。

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:233997 發表于 2017-11-18 20:39 | 顯示全部樓層
不倒翁.WZT 發表于 2017-11-18 04:35
while(!Key1);是將鍵值取反,如果手已松開,鍵值等于1,取反后,鍵值等于0,while(0);跳出大循環,執行后 ...

是,謝謝。但如果不加這一句程序依然能夠實現,不明白為什么
回復

使用道具 舉報

ID:245899 發表于 2017-11-21 13:50 | 顯示全部樓層
bai850107 發表于 2017-11-18 20:39
是,謝謝。但如果不加這一句程序依然能夠實現,不明白為什么

不加這一句就沒有松手檢測,那么按下去數碼管就會加一,但如果不加這句按鍵有抖動數碼管可能會連續加上
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一二区在线 | 国产aa | 欧美日韩在线免费 | 亚洲国产二区 | 午夜在线视频 | 国产精品久久久久婷婷二区次 | 欧美一级毛片在线播放 | 日韩视频一区在线观看 | 精品中文字幕久久 | 羞羞视频免费观看 | 亚洲自拍偷拍视频 | 欧美福利三区 | 日本精品一区二区在线观看 | 中文字幕亚洲区 | 天天色图 | 福利影院在线看 | 午夜精品一区二区三区在线播放 | 青青草久久 | 日韩欧美在线视频播放 | 久操国产 | 精品国产久| 免费高潮视频95在线观看网站 | 91www在线观看 | 九一视频在线观看 | 国产成人99| aaa综合国产| 亚洲电影中文字幕 | 91人人在线 | 国产黄色大片在线观看 | 国产精品免费一区二区三区四区 | 国产一区二区三区四区在线观看 | www.操.com| 亚洲精品一区中文字幕乱码 | 在线视频日韩 | 亚洲精品日韩在线 | 亚洲精品久久久久久久久久久 | 久久99精品国产 | 国产精品日韩欧美一区二区三区 | 亚洲综合视频一区 | 欧美a区 | 久久99国产精一区二区三区 |