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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新手小白求助,為什么按鍵不能正常工作

[復制鏈接]
跳轉到指定樓層
樓主
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1138816 發表于 2024-12-7 09:05 | 只看該作者
AT89C51的Proteus仿真
回復

使用道具 舉報

板凳
ID:277550 發表于 2024-12-7 09:16 | 只看該作者
數碼管、led太占時間,key 應該使用中斷、連接到中斷的PIN,如P3^2。程序中使用全局變量定義是否按鍵了,然后中斷函數改變就是值,l數碼管程判斷、…………。
回復

使用道具 舉報

地板
ID:583948 發表于 2024-12-7 11:14 | 只看該作者
程序是順序執行的,你的led函數里面執行的時間至少大于3000ms了,很簡單來說,當你按按鍵的時候,其實單片機正在執行led函數里面的內容,所以你的按鍵程序并沒有執行,也就不會起作用了。解決辦法:
如評論區所言,按鍵修改為中斷,最直接有效;
其次就是降低led函數執行時間,可以采用時間片、狀態機等程序結構,加按鍵掃描一樣能實現你想要的功能
回復

使用道具 舉報

5#
ID:1138816 發表于 2024-12-7 14:37 | 只看該作者
devcang 發表于 2024-12-7 09:16
數碼管、led太占時間,key 應該使用中斷、連接到中斷的PIN,如P3^2。程序中使用全局變量定義是否按鍵了,然 ...

謝謝佬
回復

使用道具 舉報

6#
ID:1138816 發表于 2024-12-7 14:37 | 只看該作者
zpwgf 發表于 2024-12-7 11:14
程序是順序執行的,你的led函數里面執行的時間至少大于3000ms了,很簡單來說,當你按按鍵的時候,其實單片 ...

明白了,謝謝佬
回復

使用道具 舉報

7#
ID:1133081 發表于 2024-12-7 15:33 | 只看該作者


  1. #include <reg52.h>

  2. sbit key0 = P2^7;

  3. unsigned char code table[]={//共陽數碼管段碼
  4.                 0xc0,0xf9,0xa4,0xb0,
  5.                 0x99,0x92,0x82,0xf8,
  6.                 0x80,0x90,0x88,0x83,
  7.                 0xc6,0xa1,0x86,0x8e};
  8. unsigned char num=0;
  9. unsigned int temp=0;
  10. bit flag=0;
  11. bit mark=0;

  12. void InitTimer0(void)
  13. {
  14.     TMOD = 0x01;
  15.     TH0 = 0xD8;
  16.     TL0 = 0xF0;
  17.     EA = 1;
  18.     ET0 = 1;
  19.     TR0 = 1;
  20. }

  21. void key()
  22. {
  23.         static int count=0;
  24.         static bit sign=0;
  25.         if(!key0)
  26.         {
  27.                 if(++count>=100 && sign==0)//消抖+自鎖       
  28.                 {
  29.                         sign=1;
  30.                         flag=~flag;
  31.                 }
  32.         }
  33.         else
  34.         {
  35.                 count=0;
  36.                 sign=0;
  37.         }
  38. }

  39. void Timer0Interrupt(void) interrupt 1//中斷周期10ms
  40. {
  41.         static int i;
  42.         TH0 = 0xD8;
  43.         TL0 = 0xF0;
  44.         if(++i>=100)//1秒
  45.         {
  46.                 i=0;
  47.                 if(!flag)num=++num%10;//循環計數0~9       
  48.                 mark=~mark;
  49.         }
  50. }

  51. void main(void)
  52. {
  53.     InitTimer0();
  54.     while (1)
  55.     {
  56.                 key();
  57.                 if(!flag)
  58.                 {
  59.                         temp=0x01<<num;
  60.                         P0=temp;                                //P0顯示temp的低8位
  61.                         P1=temp>>8|0xfc;        //P1.0、P1.1顯示temp的9、10位,P1.2~1.7保持原來電平不變
  62.                         P2=table[num]|0x80;//P2.7保持高電平不變
  63.                 }
  64.                 else
  65.                 {
  66.                         if(mark)
  67.                         {
  68.                                 P0=0x00;
  69.                                 P1&=0xfc;//P1.2~1.7保持原來電平不變
  70.                         }
  71.                         else
  72.                         {
  73.                                 P0=0xff;
  74.                                 P1|=0x03;//P1.2~1.7保持原來電平不變
  75.                         }
  76.                 }
  77.    }
  78. }
復制代碼



回復

使用道具 舉報

8#
ID:1138816 發表于 2024-12-7 16:18 | 只看該作者
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: va在线 | 日本在线免费看最新的电影 | 精品1区2区 | 91在线视频播放 | 91中文字幕在线 | 亚洲精品成人在线 | 一级毛片色一级 | 97中文视频 | 成年人在线播放 | 国产日批 | 日本久久久久久久久 | 国产一区二区影院 | 91中文在线观看 | 国产视频亚洲视频 | 午夜成人免费视频 | 久久久久久久久蜜桃 | 嫩草懂你的影院入口 | 毛片免费观看视频 | 97久久精品午夜一区二区 | 97影院在线午夜 | 一区二区三区免费在线观看 | 久草免费福利 | 奇米四色影视 | 日本xx视频免费观看 | 可以免费观看的av片 | 日韩欧美一级 | 五月婷婷色 | 免费视频99| 欧美日韩不卡合集视频 | 欧美日韩精品在线一区 | 欧美久久视频 | 精品二三区 | 亚洲综合国产 | 国产精品精品 | 久久久久久综合 | 亚洲一二三区精品 | 一区日韩| 免费毛片网站 | 在线播放中文字幕 | 国产精品成人一区二区三区 | 久久精品一区 |