下面是電路圖。要求16個鍵按下能顯示0~F字樣。
看到這樣的電路和程序,不由得想起初學單片機時情景。
十幾年前,是一本北航的書,里面就是這樣的程序。
后來又看過幾本,里面也有雷同的程序。
其實,該程序編寫的很濫。
它把行列號碼,算的很清。還特意弄成幾個分支。
換下一行時,行號就要分別存入 00H、08H、10H、18H。
想法也太笨了,其實,只要加上 8,就可以編寫成循環程序了。
程序中,還有很多應該簡化的地方。
這程序學起來,的確浪費了我不少的時間。
根據題目中的電路和程序,做而論道改寫的程序如下。
;
ORG 0000H
SJMP START
ORG 0030H
;--------------------------------------
DUMA:
DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H //共陰段碼
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
;--------------------------------------
START:
MOV DPTR, #7F03H //8255初始化
MOV A, #90H
MOVX @DPTR, A
MOV A, #16
;--------------------------------------
KEY1:
ACALL KS1 //判斷有無鍵按下, 返回PA口狀態存放在A中
JZ KEY1 //無則返回
ACALL DELAY //調用延時子程序
ACALL KS1 //再次判斷有無鍵按下
JZ KEY1 //無則返回
;
MOV R2, #0FEH //初始列掃描字
MOV R3, #8 //檢查8次
MOV R4, #0 //初始鍵號
LK4:
MOV DPTR, #7F01H //指向PB口
MOV A, R2
MOVX @DPTR, A
MOV DPTR, #7F00H //指向PA口
MOVX A, @DPTR
JNB ACC.0, LK3
INC R4
JNB ACC.1, LK3
INC R4
MOV A, R2
RL A //無則左移一位列掃描字, 繼續判斷下一列
MOV R2, A
DJNZ R3, LK4
LK3:
ACALL KS1
JNZ LK3 //判斷按下的鍵有沒有彈起, 無則原地等待繼續判斷
;
MOV A, R4 //鍵號放于A中
MOV DPTR, #0030H //指向段碼表首址
MOVC A, @A + DPTR //鍵號轉成相應的段碼
MOV DPTR, #7F02H //指向PC口
MOVX @DPTR, A //數碼管顯示
;
SJMP KEY1
;--------------------------------------
KS1:
MOV DPTR, #7F01H //指向PB口
MOV A, #0
MOVX @DPTR, A
MOV DPTR, #7F00H //指向PA口
MOVX A, @DPTR
CPL A
ANL A, #03H
RET //返回PA口數據存放在A中, 若有鍵按下, 則A不等于零
;--------------------------------------
DELAY: //延時子程序, 約10ms
MOV R7, #20
D1: DJNZ R6, $
DJNZ R7, D1
RET
END
;======================================
本程序運行的仿真截圖,可見前面的插圖。
題目中的電路,僅僅使用了一個數碼管。這和實用的場合,還有差距。
如果使用動態顯示的方法,驅動多位數碼管,那么,矩陣鍵盤的規模,就可以再擴大一些。
而做而論道在這里給出的程序,卻不用增加很多,僅僅再添上三、五行即可夠用。
-
數碼管
+關注
關注
32文章
1887瀏覽量
91403 -
矩陣鍵盤
+關注
關注
7文章
207瀏覽量
31543
發布評論請先 登錄
相關推薦
鍵盤掃描和數碼管顯示源程序和電路圖
![<b class='flag-5'>鍵盤</b>掃描<b class='flag-5'>和數碼管</b>顯示源<b class='flag-5'>程序</b>和電路圖](https://file1.elecfans.com//web2/M00/A4/4A/wKgZomUMM4aAVo2JAAC2cbEqyVc136.jpg)
tm1637驅動數碼管程序
![tm1637<b class='flag-5'>驅動</b><b class='flag-5'>數碼管程序</b>](https://file1.elecfans.com//web2/M00/A7/18/wKgZomUMQliAToJwAAAxZLTdUbs054.png)
max7219驅動數碼管程序(51單片機+STM32 MAX7219數碼管程序案例)
![max7219<b class='flag-5'>驅動</b><b class='flag-5'>數碼管程序</b>(51單片機+STM32 MAX7219<b class='flag-5'>數碼管程序</b>案例)](https://file1.elecfans.com//web2/M00/A7/29/wKgZomUMQr-ABC_cAABcE2m7Ii8390.png)
51單片機超聲波模塊數碼管程序分享
使用51單片機和8255芯片驅動矩陣鍵盤控制數碼管切換顯示的程序
![使用51單片機和<b class='flag-5'>8255</b>芯片<b class='flag-5'>驅動</b><b class='flag-5'>矩陣</b><b class='flag-5'>鍵盤</b>控制<b class='flag-5'>數碼管</b>切換顯示的<b class='flag-5'>程序</b>](https://file.elecfans.com/web1/M00/A5/8A/o4YBAF1xzSOAdryuAAFHK8eQSME270.png)
矩陣按鍵、秒表、數碼管動態掃描和數碼管同時加減的程序免費下載
![<b class='flag-5'>矩陣</b>按鍵、秒表、<b class='flag-5'>數碼管</b>動態掃描<b class='flag-5'>和數碼管</b>同時加減的<b class='flag-5'>程序</b>免費下載](https://file.elecfans.com/web1/M00/91/90/o4YBAFzY1ZSAUiO8AAUvqPL-lVg829.png)
評論