教大神,我想使用按鍵控制數碼管顯示不同的內容,為啥實作不了呢,同一個按鍵,按一次顯示溫度、按一次顯示時間,如此回圈。按鍵加了延時后,按下去后數碼管會變黑也切換不了。感覺按鍵處理這塊有問題,求幫我分析下。
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0~9的值
u8 DisData[8];
u8 DisplayData[8];
u8 Data[8];
u8 keypro() //按鍵處理函式
{
u8 i,flag=0,t=0;
if(k1==0)
{
if(k1==0)
{
for(i=0;i<2;i++)
{
delay2s();
flag++;
if(flag==2)flag=0;
}
}
//while(!k1);
}
switch(flag)
{
case (0):t=0;break;
case (1):t=1;break;
}
return t;
}
void dyna() \\數碼管顯示函式
{
unsigned int i;
for(i=0;i<8;i++)
{
switch(i)
{
case (0):SA=0;SB=0;SC=0;break;
case (1):SA=1;SB=0;SC=0;break;
case (2):SA=0;SB=1;SC=0;break;
case (3):SA=1;SB=1;SC=0;break;
case (4):SA=0;SB=0;SC=1;break;
case (5):SA=1;SB=0;SC=1;break;
case (6):SA=0;SB=1;SC=1;break;
case (7):SA=1;SB=1;SC=1;break;
}
switch(keypro())
{
case 1:Data[i]=DisplayData[i];break;
case 0:Data[i]=DisData[i];break;
}
GPIO_DIG=Data[i];
delay(20);
GPIO_DIG=0x00;//消隱
}
}
uj5u.com熱心網友回復:
u8 keypro() //按鍵處理函式回傳的都是同一個值哪里實作切換?
要實作切換很簡單即設定一個布爾變數bit k=0;然后每按一次按鍵就取反即可。
{char a=0;while(++a==0&&!k1);k=~k;return k;}這樣的邏輯思路就可以實作了。
然后判斷k的邏輯值去執行不同事件即可。
uj5u.com熱心網友回復:
u8 keypro()
{
bit k=0;
if(k1==0)
{char a=0;
while(++a==0&&!k1);
k=~k;
}
return k;
}
按鍵按下去切換了,但是沒有鎖定, 松開又顯示回溫度了
uj5u.com熱心網友回復:
加松手檢測{char a=0;while(++a==0&&!k1);k=~k;while(!k1);return k;}另外k不能宣告在函式內,這些都是基礎知識。uj5u.com熱心網友回復:
我的按鍵代碼不需要IF,要充分理解程式,莫生搬硬套。uj5u.com熱心網友回復:
不錯,很實用。。。uj5u.com熱心網友回復:
不錯,很實用。。。uj5u.com熱心網友回復:
+1同樣的問題轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/17242.html
標籤:單片機/工控
下一篇:STM32F1系列CAN通信
