亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2074|回復: 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 單片機教程網

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