1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
單片機按鍵循環閃燈程序,按鍵不靈敏求大神改進!
[打印本頁]
作者:
chinarenxx
時間:
2020-3-28 23:02
標題:
單片機按鍵循環閃燈程序,按鍵不靈敏求大神改進!
// 按鍵循環閃燈程序,可以實現每按一次按鍵變換不同的閃光頻率,只是按鍵反應是不那么響應快。特別是三連閃的時候有時按鍵沒反應,要長按住按鍵才會滅燈。
//不管是用if語句,還是switch語句都差不多效果,放在main()里面按鍵效果也是差不多,求大神改進。點按按鍵就能實現換燈功能,最好是可以在滅燈的時候可以休眠待機,再按一下又能恢復亮燈。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led = P1^1;
sbit key1 =P3^2; //STC15W408AS此腳為外部中斷0,按一次led改變一次狀態。
uint knum; //key1按鍵按下次數計數變量
void keyscan();
void delay(uint xms);
void leds();
void delay(uint xms) //@12.000MHz 大約定時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();
}
}
作者:
羅程峰8200
時間:
2020-3-29 05:03
switch(knum)的前三步沒問題 第四部就會不靈敏了 因為你的LED程序里面的延時函數延時過長導致的,你這種情況最后用中斷 或者定時器來處理
作者:
liu5678
時間:
2020-3-29 11:39
case 2: led=0; delay(500); led=1; delay(500); break;
按鍵延時有些長,閃燈延時又有些短。
作者:
tyrl800
時間:
2020-3-29 14:20
樓主難道不知道單片機有定時器這個東西嗎?用定時器都會解決的
作者:
起風了~
時間:
2020-3-29 14:51
你可以試著改一下延時程序,就是定義的void delay那個函數中j數值再改小一點
作者:
chinarenxx
時間:
2020-3-29 15:43
昨天用了,定時中斷來控制按鍵,效果要好很多,可是睡眠模式的時候喚醒操作很遲頓,現在用低功耗模式待機也有4mA的電量消耗。還是達不到uA級別。PCON=0X02這個睡眠模式喚醒有沒有大神出手指點一下。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1