|
如果要節(jié)省單片機(jī)IO口,可以用一個(gè)按鍵,通過(guò)判斷按下的時(shí)間來(lái)執(zhí)行不同的子程序,自己閑來(lái)無(wú)事隨意寫了個(gè),可能不夠精簡(jiǎn),但是功能都有,proteus仿真能出來(lái),三種按鍵時(shí)間,短時(shí)間按下LED1亮,中等長(zhǎng)度時(shí)間LED2亮,長(zhǎng)時(shí)間按下LED3亮,具體按多久,自己稍微體會(huì)下就能把握
單片機(jī)長(zhǎng)短按鍵仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- sbit keyback=P1^0;
- sbit k=P1^4;
- sbit key1=P1^1;
- sbit key2=P1^2;
- sbit key3=P1^3;
- static uint i=0;
- uchar keystay=0x00;
- uchar T0RH;
- uchar T0RL;
- void configtimer0(uchar ms)
- {
- ulong tmp;
- tmp=11059200/12;
- tmp=(ms*tmp)/1000;
- tmp=65536-tmp+10;
- T0RH=(unsigned char)(tmp>>8);
- T0RL=(unsigned char)tmp;
- TMOD &=0xF0;
- TMOD |=0x01;
- TH0=T0RH;
- TL0=T0RL;
- ET0=1;
- TR0=1;
- }
- void Judge(uint num)
- {
- if((5<num)&&(num<=50))
- {
- key1=0;
- key2=1;
- key3=1;
- i=0;
- }
- if((50<num)&&(num<=120))
- {
- key2=0;
- key1=1;
- key3=1;
- i=0;
- }
- if(num>120)
- {
- key3=0;
- key1=1;
- key2=1;
- i=0;
- }
- }
- main()
- {
- EA=1;
- configtimer0(10);
- while(1)
- {
- if((keystay&0xFF)==0x00)
- {
- Judge(i);
- }
- }
- }
-
- void keyscan()
- {
- keystay=(keystay<<1) | (!keyback);
- }
-
- void interrupt_timer0()interrupt 1
- {
- TH0=T0RH;
- TL0=T0RL;
- keyscan();
- if((keystay&0xFF)==0xFF)
- {
- i++;
-
- if(i>400)
- {
- i=0;
- }
- …………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
全部資料51hei下載地址:
長(zhǎng)短按鍵.rar
(68.63 KB, 下載次數(shù): 221)
2017-11-8 14:44 上傳
點(diǎn)擊文件名下載附件
keil加proteus
|
評(píng)分
-
查看全部評(píng)分
|