遇到一個問題,如何按鍵按下既能控制流水燈又能把鍵值在數(shù)碼管中顯示呢?流水燈500ms的延時,和數(shù)碼管動態(tài)刷新延時小于10ms顯示有沖突。
bit和sbit,sfr都是C51擴(kuò)展的變量類型,不是標(biāo)準(zhǔn)C語言類型
1.bit類型的值是一個二進(jìn)制位,不是0就是1,類似布爾類型
2.sbit大部分是用在寄存器中的,方便對寄存器的某位進(jìn)行操作的。
sbit LED1 = P0^0 把P0端口的第0位命名為LED1,方便使用
sbit 位變量名=SFR 名稱^變量 位地址值
3.sfr也是一種擴(kuò)充數(shù)據(jù)類型:,占用一個內(nèi)存單元,利用它可以訪問51單片機(jī)內(nèi)部的所有特殊功能寄存器。如用sfr P1 = 0x90 指定P1來操作地址為0X90的寄存器
改變流水燈的方向
按鍵控制流水燈實(shí)現(xiàn)的功能:
1.key1啟動鍵,首次按下可以產(chǎn)生自上向下的流水燈效果
2.key2停止鍵,按下可以終止流水燈的運(yùn)動
3.key3和key4分別產(chǎn)生自上向下和自下向上的流水燈效果
實(shí)現(xiàn)的方法:
1.利用標(biāo)志位Startflag來控制流水燈的開始和停止,初始化定義為0停止,為1時上電便有流水燈效果。用標(biāo)志位UpDownflag控制流水燈的方向,初始化的值0,1來控制自上而下還是從下到上
2.利用移位運(yùn)算符實(shí)現(xiàn)流水燈效果
注意:移位運(yùn)算符實(shí)現(xiàn)循環(huán)移位才能實(shí)現(xiàn)流水燈的效果
C51庫函數(shù)自帶循環(huán)移位的效果:crol 循環(huán)左移 _cror_循環(huán)右移

按鍵應(yīng)用層功能函數(shù)
void Key_Service()
{
switch(Key_Scan())
{
case 1: Startflag = 1;break;//開始
case 2: Startflag = 0;break;//停止
case 3: UpDownflag =1;break;//向上流水燈
case 4: UpDownflag =0;break;//向下流水燈
default :break;
}
if(Startflag)
{
P0 = temp;
if(UpDownflag)
{
temp = (temp>>1)|0x80; //右移一位
if(temp == 0xff) //條件判斷給temp重新賦值,實(shí)現(xiàn)循環(huán)移位功能
temp = 0x7f;
}
else
{
temp = (temp<<1)|0x1;//左移一位
if(temp == 0xff) //條件判斷給temp重新賦值,實(shí)現(xiàn)循環(huán)移位功能
temp = 0xfe;
}
DelayXms(500);
}
}

自己遇到的一個問題:按鍵按下既能控制流水燈又能把鍵值在數(shù)碼管中顯示
2個功能分開都能正確運(yùn)行
糅合在一起就會出問題。
因為延時500ms數(shù)碼管動態(tài)刷新有問題
void main()
{
LEDBuf[0]=23;
LEDBuf[1]=23;
LEDBuf[2]=23;
while(1)
{
Key_Service();
Didplay_Service();
}
}
void Didplay_Service()
{
switch(Key_Scan())
{
case 1:LEDBuf[3]=1;break;
case 2:LEDBuf[3]=2;break;
case 3:LEDBuf[3]=3;break;
case 4:LEDBuf[3]=4;break;
default :break;
}
Display();
}
如果刪除500ms的延時,顯示效果是這樣的.

加上500ms延時,按鍵好像失效似的,返回顯示的鍵值也不對,很奇怪的問題。
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45492瀏覽量
670137 -
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129943 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1894瀏覽量
94122 -
流水燈
+關(guān)注
關(guān)注
21文章
435瀏覽量
61766 -
按鍵
+關(guān)注
關(guān)注
4文章
229瀏覽量
58496
發(fā)布評論請先 登錄
基于單片機(jī)的流水燈介紹_51單片機(jī)流水燈的五種實(shí)現(xiàn)方法
51單片機(jī)按鍵控制流水燈閃爍測試程序詳細(xì)資料免費(fèi)下載
使用51單片機(jī)進(jìn)行按鍵控制的資料說明
使用51單片機(jī)按鍵控制流水燈換速的程序免費(fèi)下載
使用51單片機(jī)進(jìn)行四按鍵五花樣流水燈設(shè)計的程序免費(fèi)下載
基于51單片機(jī)的流水燈設(shè)計
51單片機(jī)流水燈實(shí)驗
Proteus:單片機(jī)按鍵控制流水燈方向
51單片機(jī)按鍵控制流水燈
基于51單片機(jī)按鍵控制流水燈設(shè)計
評論