寫代碼思路
按照之前的文章關于數碼管說到的線與,在此之上我們將一個按鍵拓展為多個按鍵,對數碼管進行控制,就需要按鍵掃描函數,數碼管顯示函數,再加上個主函數和延遲函數就可以搞定。
01.原理圖
元器件為:7SEG-MPX6-CC、80C51、BUTTON
將原理圖畫好后,根據元件的連接和元件特性去寫代碼。
02.按鍵掃描函數
當我們按鍵按下時,需要判斷按鍵是否按下,如果按下了,我們需要給一個鍵標志,判斷它已經按下了。
按鍵掃描使用的方法為反轉法,除此方法外,還有掃描法。
或者你也可以先固定列,再判斷行是否按下,一行行去判斷,如果不在此列,則繼續下一列,同樣判斷每一行去確定按鍵是哪一個被按下了。【這個方法有空我會嘗試寫出來】
//********按鍵掃描函數
void Key_scan(){
if(P1!=0xf0)
{
Delay(10); //延遲10ms
if(P1!=0xf0)
{
key_value = P1;
P1 = 0x0f;
key_value += P1;
key_flag = 1;
Display(); //數碼管顯示函數
P1 = 0xf0;
}
}
else
{
key_flag = 0;
}
}
03.數碼管顯示函數
因為key_value是一個全局變量,所以并不需要傳參給Display函數,直接拿去判斷就可以了。
//********數碼管顯示函數
void Display(){
if(key_value==key_pad[0])
P2 = Table_cc[0];
else if(key_value==key_pad[1])
P2 = Table_cc[1];
else if(key_value==key_pad[2])
P2 = Table_cc[2];
else if(key_value==key_pad[3])
P2 = Table_cc[3];
else if(key_value==key_pad[4])
P2 = Table_cc[4];
else if(key_value==key_pad[5])
P2 = Table_cc[5];
else if(key_value==key_pad[6])
P2 = Table_cc[6];
else if(key_value==key_pad[7])
P2 = Table_cc[7];
else if(key_value==key_pad[8])
P2 = Table_cc[8];
else if(key_value==key_pad[9])
P2 = Table_cc[9];
else if(key_value==key_pad[10])
P2 = Table_cc[10];
else if(key_value==key_pad[11])
P2 = Table_cc[11];
else if(key_value==key_pad[12])
P2 = Table_cc[12];
else if(key_value==key_pad[13])
P2 = Table_cc[13];
else if(key_value==key_pad[14])
P2 = Table_cc[14];
else if(key_value==key_pad[15])
P2 = Table_cc[15];
}
04.延遲函數
假設運行一行代碼,是10us
那么循環100次就是1ms。
在延遲函數中,我加入了一個參數,為了就是能得到任何我想要延遲的時間。
例如:當k被賦為1時,我們for循環總共循環了100次,延時時間time = 100 * 10 =1000us = 1ms。
PS:如果需要實際的執行時間,還需要去debug一下,去算出一行代碼執行時間是多少。
//********延遲函數
void Delay(u16 k){
u16 i,j;
for(i = 0; i < k ; i++)
for(j = 0; j< 100 ;j++);
}
05.主函數
因為我們將實現的功能分成了各個函數去寫,所以我們的主函數很簡單,初始化加上我們需要調用的函數,就可以實現我們想要的功能了。
void main(){
//初始化引腳
P1 = 0xf0;
P2 = 0x00;
P3 = 0x00;
Key_scan();
}
06.結果展示
未上電時
按下第一個鍵
按下第六個鍵
按下最后一個鍵
-
原理圖
+關注
關注
1298文章
6344瀏覽量
234162 -
數碼管
+關注
關注
32文章
1882瀏覽量
91146 -
函數
+關注
關注
3文章
4332瀏覽量
62653 -
按鍵
+關注
關注
4文章
223瀏覽量
57606
發布評論請先 登錄
相關推薦
評論