|
5黑幣
// 按鍵循環(huán)閃燈程序,可以實(shí)現(xiàn)每按一次按鍵變換不同的閃光頻率,只是按鍵反應(yīng)是不那么響應(yīng)快。特別是三連閃的時(shí)候有時(shí)按鍵沒(méi)反應(yīng),要長(zhǎng)按住按鍵才會(huì)滅燈。
//不管是用if語(yǔ)句,還是switch語(yǔ)句都差不多效果,放在main()里面按鍵效果也是差不多,求大神改進(jìn)。點(diǎn)按按鍵就能實(shí)現(xiàn)換燈功能,最好是可以在滅燈的時(shí)候可以休眠待機(jī),再按一下又能恢復(fù)亮燈。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led = P1^1;
sbit key1 =P3^2; //STC15W408AS此腳為外部中斷0,按一次led改變一次狀態(tài)。
uint knum; //key1按鍵按下次數(shù)計(jì)數(shù)變量
void keyscan();
void delay(uint xms);
void leds();
void delay(uint xms) //@12.000MHz 大約定時(shí)1ms
{
uint i,j;
for(i=xms;i>0;i--)
for(j=460;j>0;j--);
}
void leds()
{
led=0;
delay(300);
led=1;
delay(200);
led=0;
delay(300);
led=1;
delay(200);
led=0;
delay(300);
led=1;
delay(1200);
}
void keyscan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
while(!key1);
knum++;
if(knum==4)
knum=0;
}
}
switch(knum)
{
case 0: led=1; break; //滅燈
case 1: led=0; break; //亮燈
case 2: led=0; delay(500); led=1; delay(500); break; //一閃一滅
case 3: leds(); break; //三閃一滅
}
}
void main()
{
while(1)
{
keyscan();
}
}
|
|