藍橋杯的矩陣按鍵的掃瞄,使用reg52.h標頭檔案的時候需要自定義p4介面,因為在該標頭檔案中並沒有定義p4介面。
#include
"reg52.h"
#include
"intrins.h"
typedef
unsigned
char u8;
typedef
unsigned
int u16;
sfr p4 =
0xc0
;// 自定義p4介面,p4^4代替p3^7,p4^2代替p3^6
sbit r1 = p3^0;
// 行
sbit r2 = p3^1;
sbit r3 = p3^2;
sbit r4 = p3^3;
sbit c1 = p4^4;
// 列
sbit c2 = p4^2;
sbit c3 = p3^5;
sbit c4 = p3^4;
u8 temp_keys =0;
// 按鍵的位數
u8 code shuma[12]
=;// 外設初始化函式
void
init_system()
// 外設選通函式
void
select
(u8 local)
}// 簡單延時函式
void
delay()
// 數碼管點亮函式,單個數碼管
void
display
(u8 local, u8 num)
// 數碼管消隱函式
void
close_display()
// 按鍵掃瞄函式
void
scan_keys()
while
(!c1);}
else
if(c2 ==0)
while
(!c2);}
else
if(c3 ==0)
while
(!c3);}
else
if(c4 ==0)
while
(!c4);}
r2 =0;
r1 = r3 = r4 =1;
c1 = c2 = c3 = c4 =1;
if(c1 ==0)
while
(!c1);}
else
if(c2 ==0)
while
(!c2);}
else
if(c3 ==0)
while
(!c3);}
else
if(c4 ==0)
while
(!c4);}
r3 =0;
r2 = r1 = r4 =1;
c1 = c2 = c3 = c4 =1;
if(c1 ==0)
while
(!c1);}
else
if(c2 ==0)
while
(!c2);}
else
if(c3 ==0)
while
(!c3);}
else
if(c4 ==0)
while
(!c4);}
r4 =0;
r2 = r3 = r1 =1;
c1 = c2 = c3 = c4 =1;
if(c1 ==0)
while
(!c1);}
else
if(c2 ==0)
while
(!c2);}
else
if(c3 ==0)
while
(!c3);}
else
if(c4 ==0)
while
(!c4);}
if(temp_keys ==4)
else
if(temp_keys ==5)
else
if(temp_keys ==6)
else
if(temp_keys ==7)
}void
main()
}
初始化外設一般都是藍橋杯一上電就需要完成的事情,關閉蜂鳴器以及繼電器還有關閉led燈和數碼管這些外設,不然會使得上電之後無關的外設同時工作影響正常的顯示效果。 微控制器 按鍵掃瞄
按鍵掃瞄,我想應該是比較簡單的微控制器應用了,但是有時候看起來簡單的東西反而不好寫。本文拿大部分人覺得簡單的按鍵掃瞄聊聊我工作至今對於軟體結構的理解。嗯,對的,是結構,不是架構,暫時不敢提架構這個詞。下面說說我個人對於乙個按鍵檢測的 理解。按鍵檢測需要做什麼事情呢?乙個是按鍵按下的這個物理事件的檢測...
藍橋杯 微控制器 中斷程式設計
使用程式前,將跳線j5調整為btn模式 2 3引腳短接使第一列按鍵一端接地 將跳線j13調整為io模式 2 3引腳短接使u25或非門輸入訊號wr接地 按下p32 int0引腳對應的按鍵s5,l1狀態翻轉 按下p33 int1引腳對應的按鍵s4,l2狀態翻轉 include reg52.h unsig...
微控制器(四) 矩陣按鍵
矩陣鍵盤共有16個按鍵,如何通過按乙個按鍵,能夠將對應的引腳電位拉低,下面看一下電路圖 大概就是這樣,掃瞄按鍵的程式如下 unsigned char key scan void 這是縱向掃瞄 keyport 0xfd if 0xfd keyport 第二組四個按鍵 keyport 0xfb if 0...