|
- ;=================================================================
- ;程序編寫(xiě)人:蘭建
- ;編寫(xiě)地點(diǎn):51hei培訓(xùn)機(jī)構(gòu)
- ;時(shí)間:6月4日上午星期四
- ;功能:矩陣鍵盤(pán)在P1口,利用反轉(zhuǎn)法讀取鍵值,16個(gè)獨(dú)立按鍵中的1-15號(hào)
- ;按鍵均有兩個(gè)功能,定義16號(hào)按鍵為功能鍵,按下不顯示任何數(shù)字,當(dāng)按
- ;住這個(gè)案件不松,再按下1-15號(hào)按鍵時(shí),數(shù)碼顯示16-30.
- ;=======================開(kāi)始初始化================================
- SHUCHU EQU P0 ;定義P0口為輸出口
- PIANXUAN EQU P2 ;設(shè)置P2.0為片選
- JIANPAN EQU P1 ;鍵盤(pán)接口
- ;========================程序開(kāi)始================================
- ORG 00H ;程序開(kāi)始
- JMP START ;跳到START
- ORG 0030H ;入口地址
- START:
- MOV PIANXUAN,#05 ;片選
- MOV SHUCHU,#0FFH ;上電默認(rèn)不顯示
- MOV R0,#00H ;順序碼清零
- MOV 30H,#00H ;鍵值存儲(chǔ)單元清零
- LOOP:
- MOV JIANPAN,#0F0H ;把P1口高四位設(shè)為輸入,同時(shí)把低四位設(shè)為0
- MOV A,JIANPAN ;讀P1口高四位列線(xiàn)
- ANL A,#0F0H ;屏蔽低四位
- MOV B,A ;保存高四位列線(xiàn)
- MOV JIANPAN,#0FH ;把P1口低四位設(shè)為輸入,同時(shí)把高四位設(shè)為0
- MOV A,JIANPAN ;讀取P1口低四位行線(xiàn)
- ANL A,#0FH ;屏蔽高四位
- ORL A,B ;列線(xiàn)和行線(xiàn)合并
- CJNE A,#0FFH,KEY ;判斷是否右鍵按下,右則跳到按鍵處理
- JMP LOOP ;沒(méi)有返回繼續(xù)查詢(xún)
- KEY:
- MOV 30H,A ;保存鍵值
- MOV DPTR,#TAB1 ;指向鍵值表
- MOV R0,#0FFH ;FF+1=0所以R0里面放FF,既可以顯示0
- L1:
- INC R0 ;順序碼加1
- MOV A,R0 ;
- MOVC A,@A+DPTR ;查鍵值表
- CJNE A,#77H,L2 ;判斷是否鍵值為表格最后一個(gè)
- JMP LOOP ;相等表示沒(méi)按鍵按下或者查到最后了,返回重新查詢(xún)
- L2:
- CJNE A,30H,L1
- CALL JISUAN ;計(jì)算處理分離十位和個(gè)位
- CALL DISPLAY ;動(dòng)態(tài)顯示十位和個(gè)位
- JMP LOOP ;返回、重新查詢(xún)
- ;========================計(jì)算子程序=========================
- ;輸入:30H
- ;輸出:"A和B"
- ;實(shí)現(xiàn)的功能:把30H的數(shù)據(jù)的十位和個(gè)位分離出來(lái)
- ;============================================================
- JISUAN:INC R0
- MOV A,R0 ;數(shù)據(jù)放在A中
- MOV B,#10 ;除數(shù)放在B中
- DIV AB ;商放在A中,余數(shù)放在B中
- RET
- ;========================顯示子程序==========================
- ;輸入:"A"
- ;輸出:"P0口"
- ;實(shí)現(xiàn)的功能:把A的數(shù)輸出到P0口顯示,十位和個(gè)位分開(kāi)顯示
- ;============================================================
- DISPLAY:MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;顯示十位
- MOV PIANXUAN,#02H ;片選
- CALL DELAY
- MOV SHUCHU,#0FFH
- MOV A,B
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;顯示個(gè)位
- MOV PIANXUAN,#03H ;片選
- CALL DELAY ;延時(shí)
- MOV SHUCHU,#0FFH
- RET
- ;========================延時(shí)程序============================
- ;輸入;無(wú)
- ;輸出: 無(wú)
- ;實(shí)現(xiàn)的功能:延時(shí)一段時(shí)間
- ;============================================================
- DELAY:
- MOV R6,#80
- L7:MOV R5,#80
- DJNZ R5,$
- DJNZ R6,L7
- RET
- ;=======================共陽(yáng)查表數(shù)據(jù)==============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H, 82H,0F8H,80H,90H ;0-9共陽(yáng)極數(shù)據(jù)
- ;=======================共陽(yáng)查表數(shù)據(jù)==============================
- TAB1:DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH
- DB 0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H ;反轉(zhuǎn)描碼表
- DB 66H,56H,36H,76H,65H,55H,35H,75H,63H
- DB 53H,33H,73H,67H,57H,37H,77H
- ;=========================程序結(jié)束================================
- END
復(fù)制代碼
|
|