x4 鍵盤 每按一次鍵盤 控制七段顯示器
2 ;PROGRAM : 4-7.ASM (4-7.PRJ) 2002.DEC.30. ;FUNCTION: 4X4 MATRIX KEYPAD DEMO PROGRAM BY STEVEN #INCLUDEHT46R23.INC.CHIPHT46R23 ; MY_DATA.SECTION'DATA' ;== DATA SECTION == DEL1 DB ? ;DELAY LOOP COUNT 1 DEL2 DB ? ;DELAY LOOP COUNT 2 DEL3DB ?;DELAY LOOP COUNT 3 COUNTDB ? KEYDB ? ;KEY CODE REGISTER ; SEG_PORTEQUPB;DEFINE 7-SEG PORT SEG_PORTCEQUPBC ;DEFINE 7-SEG PORT CONTROL REG. KEY_PORTEQUPA;DEFINE KEYPAD PORT KEY_PORTC EQUPAC;DEFINE KEY PORT VONTROL REG. MY_CODE.SECTIONAT 0'CODE' ;== PROGRAM SECTION == ORG 00H ;HT-46RXX RESET VECTOR CLRSEG_PORTC;CONFIG PA AS OUTPUT MODE
3 MAIN: CLR SEG_PORT;CLEAR DISPLAY CALL READ_KEY;READ KEYPAD MOVA,16 XORA,KEY SZZ;IS KEY NOT PRESSED(KEY=16)? JMP MAIN ;YES,RE-READ. MOVA,KEY CALLTRANS;GET 7 SEG DISPLAY CODE MOVSEG_PORT,A;DISPLAY KEY VALUE CALLDELAY;DELAY 1 SEC. JMPMAIN
4 ;******************************************************************** ; SCAN 4x4 MATRIX ON KEY PORT AND RETURN THE CODE IN KEY REGISTER ;IF NO KEY BEEN PRESSED, KEY=16. ;******************************************************************** READ_KEYPROC MOVA, B MOVKEY_PORTC,A;CONFIG PORT B BIT 7-4 input BIT 3-0 output SETKEY_PORT;INITIAL PORT B CLRKEY;INITIAL KEY REGISTER MOVA,04 MOVCOUNT,A;SET ROW COUNTER CLR C;CLEAR CARRY FLAG
5 Key_port.4=0 按下 SCAN_KEY: RLCKEY_PORT;ROTATE SCANNING BIT SET C;MAKE SURE C=1 SNZ KEY_PORT.4;COLUMN 0 PRESSED? JMPEND_KEY;YES. INCKEY;NO, INCREASE KEY CODE. SNZ KEY_PORT.5;COLUMN 1 PRESSED? JMPEND_KEY;YES. INCKEY;NO, INCREASE KEY CODE. SNZ KEY_PORT.6;COLUMN 2 PRESSED? JMPEND_KEY;YES. INCKEY;NO, INCREASE KEY CODE. SNZ KEY_PORT.7;COLUMN 3 PRESSED? JMPEND_KEY;YES. INCKEY;NO, INCREASE KEY CODE. SDZCOUNT;HAVE ALL ROWs BEEN CHECKED? JMPSCAN_KEY;NO, NEXT ROW. END_KEY: RET READ_KEY ENDP
6 ;******************************************************************** ; Delay about DEL1(100)*10mS ;******************************************************************** DELAY PROC MOVA,100 MOVDEL1,A DEL_1: MOV A,30 MOV DEL2,A;SET DEL2 COUNTER DEL_2:MOVA,110 MOVDEL3,A;SET DEL3 COUNTER DEL_3: SDZ DEL3 ;DEL3 DOWN COUNT JMP DEL_3 SDZ DEL2 ;DEL2 DOWN COUNT JMP DEL_2 SDZDEL1;DEL1 DOWN COUNT JMPDEL_1 RET DELAYENDP
7 ;******************************************************************** ; RETURN THE TABLE VALUE INDEX BY A ;******************************************************************** TRANSPROC ADDMA,PCL RET A, B;0 RETA, B;1 RETA, B;2 RET A, B;3 RET A, B;4 RETA, B;5 RET A, B;6 RET A, B;7 RET A, B;8 RET A, B;9 RETA, B;a RETA, B;b RETA, B;c RETA, B;d RETA, B;E RETA, B;F TRANSENDP END