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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機檢測獨立按鍵是否按下代碼不對嗎?

[復制鏈接]
跳轉到指定樓層
樓主
ID:1038888 發表于 2022-7-8 21:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求走過路過的好哥哥,好姐姐,幫弟弟看看哪出問題了
單片機源程序如下:
  1. #include <reg52.h>

  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. sbit BEEP = P2^5;
  5. sbit KEY = P3^1;
  6. sbit LED = P2^0;


  7. //延時函數
  8. void delay_10us(u16 ten_us)
  9. {
  10.         while(ten_us--);
  11. }

  12. //初始化外部中斷0
  13. void exti0_init()
  14. {
  15.         EX0 = 1;
  16.         IT0 = 1; //外部中斷0觸發方式選擇下降沿
  17. }


  18. //初始化定時器
  19. void time0_init()
  20. {
  21.         TMOD |= 0x01;  //加或的目的是防止改變TOMD中已有的位數
  22.         TH0 = 0xFC;     
  23.         TL0 = 0x66;  
  24.         ET0 = 1;
  25.         TR0 = 1;
  26. }

  27. //main函數
  28. void main()
  29. {
  30.         time0_init();
  31.         exti0_init();
  32.         EA = 1;
  33.         while(1);
  34. }



  35. //定時器0中斷函數
  36. void time0() interrupt 1
  37. {
  38.         u8 num;
  39.         num++;
  40.         TH0 = 0xFC;
  41.         TL0 = 0x66;
  42.         //if(KEY==1)
  43.         //{
  44.         //        delay_10us(1000);
  45. //                ET0=0; //關閉定時器
  46.         //        PCON = 0x02; //打開掉電模式
  47.         //        _nop_();
  48.         //        _nop_();
  49.                 //_nop_();
  50. //        }
  51.         if(num>=2000)
  52.         {
  53.         
  54.                 u16 i = 2000;
  55.                 while(i--)
  56.                 {
  57.                         BEEP = !BEEP;
  58.                         delay_10us(100);        
  59.                 }
  60.                
  61.                 //LED = 1;
  62.         }
  63. }

  64. //外部中斷0函數
  65. void exti0() interrupt 0
  66. {
  67.         PCON=0; //關閉掉電模式
  68.         ET0=1; //打開定時器0
  69. }



復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:94031 發表于 2022-7-9 06:40 | 只看該作者
1 中斷函數里不應該加延時函數。2  想觸發外中斷,按鍵應接P3^2,而不是P3^1。
回復

使用道具 舉報

板凳
ID:1023753 發表于 2022-7-9 07:59 | 只看該作者
你按鍵注釋掉了  
回復

使用道具 舉報

地板
ID:332444 發表于 2022-7-9 08:02 | 只看該作者
檢測獨立按鍵代碼:if(KEY==0)...
回復

使用道具 舉報

5#
ID:213173 發表于 2022-7-9 10:14 | 只看該作者
給你改了,你試試。
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;

  5. sbit BEEP = P2^5;
  6. sbit KEY = P3^1;
  7. sbit LED = P2^0;

  8. u16 num;

  9. //延時函數
  10. /*
  11. void delay_10us(u16 ten_us)
  12. {
  13.         while(ten_us--);
  14. }*/

  15. //初始化外部中斷0
  16. void exti0_init()
  17. {
  18.         EX0 = 1;
  19.         IT0 = 1; //外部中斷0觸發方式選擇下降沿
  20. }

  21. //初始化定時器
  22. void time0_init()
  23. {
  24.         TMOD |= 0x01;  //加或的目的是防止改變TOMD中已有的位數
  25.         TH0 = 0xFC;     
  26.         TL0 = 0x66;  
  27.         TR0 = 1;
  28.         ET0 = 1;
  29.         EA = 1;
  30. }

  31. void main()
  32. {
  33.         time0_init();
  34.         exti0_init();
  35.         LED=0;//LED亮
  36.         while(1)
  37.         {
  38.                 if(!KEY)//啟動掉電模式
  39.                 {
  40.                         LED=1;//LED熄
  41.                         _nop_();
  42.                         _nop_();
  43.                         PCON = 0x02; //進入掉電模式
  44.                         _nop_();
  45.                         _nop_();
  46.                 }               
  47.         }
  48. }

  49. //定時器0中斷函數
  50. void time0() interrupt 1
  51. {
  52.         TH0 = 0xFC;
  53.         TL0 = 0x66;

  54.         BEEP = ~BEEP;//無源蜂鳴器響
  55.         num++;
  56.         if(num>=1000)//1秒
  57.         {
  58.                 num=0;
  59.                 BEEP = 1;//蜂鳴器復位
  60.                 TR0 = 0;//關閉定時器
  61.         }
  62. }

  63. //外部中斷0函數
  64. void exint0() interrupt 0
  65. {
  66. //        PCON=0; //關閉掉電模式
  67.         TR0 =1; //打開定時器0
  68.         LED=0;  //LED亮
  69. }
復制代碼
回復

使用道具 舉報

6#
ID:1038888 發表于 2022-7-10 16:28 | 只看該作者
xuyaqi 發表于 2022-7-9 06:40
1 中斷函數里不應該加延時函數。2  想觸發外中斷,按鍵應接P3^2,而不是P3^1。

粗心了,沒注意到觸發鍵的問題,謝謝師傅提醒,請問為什么中斷函數里面不能加延時函數呀
回復

使用道具 舉報

7#
ID:59202 發表于 2022-7-10 18:38 | 只看該作者
不是不能加延時程序,只是中斷函數的原則是盡量精簡,把運行時間盡量交到主程序,如果中斷函數中加入了較長的延時,那么主程序運行的時間就會大大減少,造成系統運行速度慢
回復

使用道具 舉報

8#
ID:1038888 發表于 2022-7-10 21:49 | 只看該作者
xxxevery 發表于 2022-7-10 18:38
不是不能加延時程序,只是中斷函數的原則是盡量精簡,把運行時間盡量交到主程序,如果中斷函數中加入了較長 ...

好嘞,明白了,感謝師傅
回復

使用道具 舉報

9#
ID:1013784 發表于 2022-7-11 01:56 | 只看該作者
你的外部中斷設置的引腳不對
回復

使用道具 舉報

10#
ID:1009217 發表于 2022-7-14 23:22 | 只看該作者
SRC51 發表于 2022-7-10 16:28
粗心了,沒注意到觸發鍵的問題,謝謝師傅提醒,請問為什么中斷函數里面不能加延時函數呀

中斷,就像你打游戲一樣有主線程和子線程,而中斷就是子線程,你要是花太多時間在你的子線程上面,主線程就會出問題啊,中斷也還分定時器中斷和外部中斷和串口中斷,定義那些你可以去網上查查
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美在线一区 | 天堂亚洲网 | 亚洲欧美日韩一区 | 国内自拍偷拍 | 国产精品亚洲片在线播放 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 久久99精品久久久久 | 久久不卡日韩美女 | 91国产视频在线 | 午夜免费网站 | 欧美日韩精品专区 | 成人 在线 | 91视频网| 日日干天天干 | 亚洲黄色片免费观看 | 欧美久久一区二区三区 | 亚洲福利在线观看 | 色噜噜狠狠色综合中国 | 欧美性吧 | 少妇一级淫片aaaaaaaaa | 亚洲一区国产精品 | 香蕉一区二区 | 国产精品二区三区在线观看 | 久久久久国产成人精品亚洲午夜 | 国产激情视频在线观看 | 国产黄色大片 | 日韩国产三区 | 中文字幕av一区二区三区 | 久久国内精品 | 久久99精品久久久久子伦 | 日韩2020狼一二三 | 久久久久国产一区二区三区 | 黄免费观看视频 | 国产高清自拍视频在线观看 | 色视频网站在线观看 | 久久高清| 国产精品一区视频 | 中文字幕一区二区三区日韩精品 | 精品综合久久久 | 国产视频福利 | 一级片在线观看视频 |