使用AT89S52單片機,設計一個具有8個按鍵的獨立式鍵盤,每個按鍵對應一個發光二極管。功能要求:無鍵按下時,鍵盤輸出全為“1”,發光二極管全部熄滅;有鍵按下時,其所對應發光二極管點亮。 獨立式鍵盤電路組成由單片機最小系統;
8個按鍵電路;8個LED電路。
單片機I/O口引腳分配8個按鍵接P0口;按鍵一端接地;另一端接P0口引腳,并通過上拉電阻接+5V。
8個LED接P1口,LED采用共陽極接法。 獨立式鍵盤電路設計時,每個按鍵的一端與P0口的一個引腳相連,另一端接地。 無鍵按下時,P0的8個I/O口均通過電阻接高電平,信息為“1” ,鍵盤輸出全為“1”發光二極管全部熄滅。 有鍵按下,將使對應的I/O口通過該鍵接地,信息為“0” ,對應發光二極管點亮。 CPU可以通過檢測P0的8個I/O口線哪個是“0”就可以識別是否有鍵按下,并能識別出是哪一個鍵按下。 - 在keil軟件中,新建項目,新建c語言獨立式鍵盤文件,輸入代碼保存并編譯,生成hex文件
代碼如下:
獨立式鍵盤功能實現分析
判斷是否有按鍵按下
while(x==0xff) //循環判斷是否有鍵按下
{
x=P0; //讀鍵盤狀態
}
delay10ms(); //延時10ms去抖動
x=P0; //再次讀鍵盤狀態
if(x==0xff) continue;//如果無鍵按下則認為是按
//鍵抖動,重新掃描根據鍵值點亮對應的發光二極管
switch(~x)
{
case 0x01:P1=0xfe; break;//點亮第一個發光二極管
case 0x02:P1=0xfd; break;//點亮第二個發光二極管
case 0x04:P1=0xfb;break;//點亮第三個發光二極管
case 0x08:P1=0xf7; break;//點亮第四個發光二極管
case 0x10:P1=0xef; break;//點亮第五個發光二極管
case 0x20:P1=0xdf; break;//點亮第六個發光二極管
case 0x40:P1=0xbf; break;//點亮第七個發光二極管
case 0x80:P1=0x7f; break;//點亮第八個發光二極管
default:break;
}
} } - 運行Proteus,新建“獨立式鍵盤”設計文件,放置并編輯ST89C52、CRYSTAL、CAP、CAP-ELEC 、RES 、BUTTON 、LED-YELLOW等元器件.有鍵按下,其發光二極管點亮。
程序要判斷是否有2個或2個以上的鍵盤同時按下,以免鍵盤分析錯誤。 給每個不同的功能模塊用不同的ID號標識,這樣,每按下一次按鍵,ID 的值是不相同的,所以單片機就很容易識別不同功能的身份了。 D1到D4發光二極管在每個時刻的閃爍的時間是受按鍵來控制,我們給D1到D4閃爍的時段,定義出不同的ID號,只要每次按下按鍵時,分別給出不同的ID號我們就能夠完成上面的任務了。 |