標(biāo)題:
非中斷編寫的一鍵即時(shí)流水燈
[打印本頁]
作者:
hutians
時(shí)間:
2015-2-10 17:44
標(biāo)題:
非中斷編寫的一鍵即時(shí)流水燈
/*******************************************************************************************************
即時(shí)一鍵流水燈(89C52,程序優(yōu)化)
在老師出的一道簡(jiǎn)單的題中,卻出現(xiàn)了程序上的一些小毛病?此菩〉拿(shí)則在大程序
中產(chǎn)生不可估量的后果,如下是對(duì)延時(shí)中出現(xiàn)的問題的解決辦法:
一鍵流水燈要求即時(shí)響應(yīng),按下鍵盤立即響應(yīng),沒有延時(shí)!在我修改之前的里,延時(shí)函數(shù)
中沒有按鍵檢測(cè),從而導(dǎo)致了在按下按鍵后不能即時(shí)響應(yīng)(需要等到延時(shí)完成之后才能響應(yīng))。
另外由于疏忽在key0()函數(shù)中漏掉了松手檢測(cè),導(dǎo)致了一次按鍵多次選擇。更改后的程序由于
在延時(shí)中增加了鍵盤檢測(cè),所以只要有鍵按下,即使延時(shí)函數(shù)正在運(yùn)行也會(huì)立即跳出。
鍵:key~P3^0 P2用于控制流水燈
心得:在寫程序時(shí)要有嚴(yán)密的思維,在完成某個(gè)程序后要適當(dāng)給程序一些優(yōu)化,盡量使程
序更為精簡(jiǎn)。更重要的是要細(xì)心發(fā)現(xiàn)程序中一些不可見的弊端,這樣可以降低程序出錯(cuò)的機(jī)率。
寫程序時(shí)要養(yǎng)成好的習(xí)慣,使寫出的程序看起來言簡(jiǎn)意賅,不容易遺漏!
********************************************************************************************************/
#include"reg52.h"
sbit key = P3^0;
typedef unsigned int uint;
char i,count=0,flag;
char code tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,
0x07,0x0e,0x1c,0x38,0x70,0xe0,0xc0,0x80
};
int delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
{
for(y=120;y>0;y--);
if(key==0) return 0;
}
return 0;
}
void mode_1()
{
switch(count)
{
case 0: flag = 25; break; //不顯示
case 1: flag = 0; break; //從數(shù)組的第0個(gè)單元開始
case 2: flag = 8; break; //從數(shù)組的第8個(gè)單元開始
case 3: flag = 16; break; //從數(shù)組的第16個(gè)單元開始
}
}
void key0() //鍵盤掃描
{
if(key==0)
{
delay(10);
if(key==0)
{
count++; //若鍵盤有值則加1
if(count==4) count = 0;
mode_1();
i = 7; //用于跳出循環(huán)
while(!key); //松手檢測(cè)
}
}
}
void main()
{
char temp;
flag = 25;
while(1)
{
temp = flag;
for(i=0;i<8;i++)
{
if(flag==25) P2 = 0x00;
else
P2 = tab[temp++];
delay(300);
key0();
}
}
}
復(fù)制代碼
作者:
51gxl
時(shí)間:
2017-11-23 10:00
不錯(cuò)的思路,延時(shí)程序里加檢測(cè)。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1