找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2713|回復: 0
打印 上一主題 下一主題
收起左側

我的單片機獨立式鍵盤包含程序代碼原理圖

[復制鏈接]
跳轉到指定樓層
樓主
ID:1038354 發(fā)表于 2022-7-5 15:05 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
  • 獨立式鍵盤實驗設計

使用AT89S52單片機,設計一個具有8個按鍵的獨立式鍵盤,每個按鍵對應一個發(fā)光二極管。功能要求:無鍵按下時,鍵盤輸出全為“1”,發(fā)光二極管全部熄滅;有鍵按下時,其所對應發(fā)光二極管點亮。
  • 實驗原理

獨立式鍵盤電路組成由單片機最小系統(tǒng);
8個按鍵電路;8個LED電路。
單片機I/O口引腳分配8個按鍵接P0口;按鍵一端接地;另一端接P0口引腳,并通過上拉電阻接+5V。
8個LED接P1口,LED采用共陽極接法。
獨立式鍵盤電路設計時,每個按鍵的一端與P0口的一個引腳相連,另一端接地。
無鍵按下時,P0的8個I/O口均通過電阻接高電平,信息為“1” ,鍵盤輸出全為“1”發(fā)光二極管全部熄滅。
有鍵按下,將使對應的I/O口通過該鍵接地,信息為“0” ,對應發(fā)光二極管點亮。
CPU可以通過檢測P0的8個I/O口線哪個是“0”就可以識別是否有鍵按下,并能識別出是哪一個鍵按下。
  • 實驗過程

  • keil軟件中,新建項目,新建c語言獨立式鍵盤文件,輸入代碼保存并編譯,生成hex文件

代碼如下:

獨立式鍵盤功能實現(xiàn)分析
判斷是否有按鍵按下
while(x==0xff)                    //循環(huán)判斷是否有鍵按下
{
     x=P0;      //讀鍵盤狀態(tài)
}
delay10ms();    //延時10ms去抖動
x=P0;        //再次讀鍵盤狀態(tài)
if(x==0xff) continue;//如果無鍵按下則認為是按
   //鍵抖動,重新掃描根據(jù)鍵值點亮對應的發(fā)光二極管
switch(~x)                  
{
  case 0x01:P1=0xfe; break;//點亮第一個發(fā)光二極管
  case 0x02:P1=0xfd; break;//點亮第二個發(fā)光二極管
  case 0x04:P1=0xfb;break;//點亮第三個發(fā)光二極管
  case 0x08:P1=0xf7; break;//點亮第四個發(fā)光二極管
  case 0x10:P1=0xef; break;//點亮第五個發(fā)光二極管
  case 0x20:P1=0xdf; break;//點亮第六個發(fā)光二極管
  case 0x40:P1=0xbf; break;//點亮第七個發(fā)光二極管
  case 0x80:P1=0x7f; break;//點亮第八個發(fā)光二極管
   default:break;
}
}
}
  • 運行Proteus,新建“獨立式鍵盤”設計文件,放置并編輯ST89C52、CRYSTAL、CAP、CAP-ELEC 、RES 、BUTTON 、LED-YELLOW等元器件.有鍵按下,其發(fā)光二極管點亮。

  • 實驗總結

程序要判斷是否有2個或2個以上的鍵盤同時按下,以免鍵盤分析錯誤。
  • 實驗總結

給每個不同的功能模塊用不同的ID號標識,這樣,每按下一次按鍵,ID 的值是不相同的,所以單片機就很容易識別不同功能的身份了。 D1到D4發(fā)光二極管在每個時刻的閃爍的時間是受按鍵來控制,我們給D1到D4閃爍的時段,定義出不同的ID號,只要每次按下按鍵時,分別給出不同的ID號我們就能夠完成上面的任務了。

2.png (250.58 KB, 下載次數(shù): 133)

2.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表