欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機通過單個按鍵按下時間(長短按鍵)執行不同功能 [打印本頁]

作者: 包包大人在此    時間: 2017-11-8 14:46
標題: 單片機通過單個按鍵按下時間(長短按鍵)執行不同功能
如果要節省單片機IO口,可以用一個按鍵,通過判斷按下的時間來執行不同的子程序,自己閑來無事隨意寫了個,可能不夠精簡,但是功能都有,proteus仿真能出來,三種按鍵時間,短時間按下LED1亮,中等長度時間LED2亮,長時間按下LED3亮,具體按多久,自己稍微體會下就能把握

單片機長短按鍵仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ulong unsigned long
  6. sbit keyback=P1^0;
  7. sbit k=P1^4;
  8. sbit key1=P1^1;
  9. sbit key2=P1^2;
  10. sbit key3=P1^3;
  11. static uint i=0;
  12. uchar keystay=0x00;
  13. uchar T0RH;
  14. uchar T0RL;

  15. void configtimer0(uchar ms)
  16. {
  17. ulong tmp;
  18. tmp=11059200/12;
  19. tmp=(ms*tmp)/1000;
  20. tmp=65536-tmp+10;
  21. T0RH=(unsigned char)(tmp>>8);
  22. T0RL=(unsigned char)tmp;
  23. TMOD &=0xF0;
  24. TMOD |=0x01;
  25. TH0=T0RH;
  26. TL0=T0RL;
  27. ET0=1;
  28. TR0=1;
  29. }


  30. void Judge(uint num)
  31. {
  32. if((5<num)&&(num<=50))
  33. {                                          
  34. key1=0;
  35. key2=1;
  36. key3=1;
  37. i=0;
  38. }
  39. if((50<num)&&(num<=120))
  40. {
  41. key2=0;
  42. key1=1;
  43. key3=1;
  44. i=0;
  45. }
  46. if(num>120)
  47. {
  48. key3=0;
  49. key1=1;
  50. key2=1;
  51. i=0;
  52. }
  53. }



  54. main()
  55. {
  56. EA=1;
  57. configtimer0(10);
  58. while(1)
  59. {
  60.   if((keystay&0xFF)==0x00)
  61. {
  62. Judge(i);
  63.           }
  64.          }
  65. }



  66. void keyscan()
  67. {
  68. keystay=(keystay<<1) | (!keyback);
  69. }
  70.   
  71. void interrupt_timer0()interrupt 1
  72. {
  73. TH0=T0RH;
  74. TL0=T0RL;
  75. keyscan();
  76. if((keystay&0xFF)==0xFF)
  77. {
  78.   i++;
  79.   
  80.   if(i>400)
  81.   {
  82.    i=0;
  83.          }
  84. …………
  85. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

全部資料51hei下載地址:
長短按鍵.rar (68.63 KB, 下載次數: 221)



作者: admin    時間: 2017-11-8 17:27
好資料,51黑有你更精彩!!!
作者: zqy181818    時間: 2017-11-8 20:39
好資料,51黑有你更精彩!!!
作者: zqy181818    時間: 2017-11-8 20:45
樓主請教一下void configtimer0(uchar ms)是什么函數。也就是它的作用。
作者: yatou520    時間: 2017-11-10 09:11
好東西,謝謝樓主分享!
作者: xbzxjks    時間: 2017-11-12 10:25
非常詳細,學習了!!!
作者: SJZ    時間: 2017-11-13 22:21
非常詳細,學習了!!!
作者: kkkvvvggg    時間: 2017-11-14 00:03
感謝樓主分享
作者: shui0419    時間: 2018-5-28 14:10
好東西,謝謝樓主分享!
作者: shui0419    時間: 2018-5-28 15:51
感謝樓主分享
作者: jaypie    時間: 2018-8-27 10:33
謝謝分享
作者: 大米861    時間: 2018-10-16 08:22
對我等初學者,有莫大的幫助,感謝樓主。
作者: s26250    時間: 2018-12-14 14:31
zqy181818 發表于 2017-11-8 20:45
樓主請教一下void configtimer0(uchar ms)是什么函數。也就是它的作用。

相當于把中斷裝初值 以及各類中斷的啟動 寫成一個函數 用于中斷初始化 方便調用
作者: s26250    時間: 2018-12-21 19:28
void keyscan()
{
keystay=(keystay<<1) | (!keyback);
}

  if((keystay&0xFF)==0x00)

請問這兩個有前輩可以解釋一下嗎?看不太懂。。。
作者: ggt    時間: 2018-12-21 19:39

好東西,謝謝樓主分享!
作者: petereisen    時間: 2018-12-21 19:54
樓主牛逼
作者: limao    時間: 2018-12-22 09:02
謝謝分享。
作者: AngryBeast    時間: 2018-12-22 13:23
感謝樓主分享
作者: jonejen    時間: 2019-2-21 14:12
來學習的
作者: luoyua    時間: 2019-3-7 21:08
程序中的i是干嘛的呀?
作者: zctwss321    時間: 2019-4-18 11:58
掃描函數 能解釋一下嗎
作者: zctwss321    時間: 2019-4-18 11:58
s26250 發表于 2018-12-21 19:28
void keyscan()
{
keystay=(keystay

這個我也沒看懂,同求
作者: 秋風涼    時間: 2019-11-3 16:39
謝謝  下個學習下
作者: 1481714970    時間: 2019-11-3 20:18
這個很高端  謝謝樓主分享
作者: hmgqljz111    時間: 2019-11-4 10:11
zqy181818 發表于 2017-11-8 20:45
樓主請教一下void configtimer0(uchar ms)是什么函數。也就是它的作用。

給定時器初始化,賦值
作者: vectorxu    時間: 2019-11-14 01:19

非常詳細,學習了!!!51黑有你更精彩!!!
作者: daiya    時間: 2019-11-14 11:19
不實用,不能實現到達時間不松按鍵也相應
作者: 511224qwer    時間: 2021-10-17 09:17
好資料,51黑有你更精彩!!!
作者: ydq2015ok    時間: 2023-11-6 17:00
好資料,51黑有你更精彩!!! 就是需要這方面的指導;謝謝!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1