;=========================================
OUTPUT1 EQU 30H ;查表的暂存器
OUTPUT2 EQU 31H ;查表的暂存器
COUNT1 EQU 32H
C1 EQU 33H
C2 EQU 34H
C3 EQU 35H
C4 EQU 36H
C5 EQU 37H
C6 EQU 38H
C7 EQU 39H
C8 EQU 3AH
C9 EQU 3BH
C10 EQU 3CH
KEY BIT P3.7
ORG 0000H ;起始地址
JMP RESET
ORG 0003H ;外部中断入口地址
JMP INT
ORG 0030H
/*====================复位程序============================*/
RESET:
MOV C1,#00H ;偏移量
MOV C2,#00H
MOV C3,#00H
MOV C4,#00H
MOV C5,#00H
MOV C6,#00H
MOV C7,#00H
MOV C8,#00H
MOV C9,#00H
MOV C10,#00H
MOV OUTPUT1,#00H
MOV OUTPUT2,#00H
SETB KEY ;准备按键输入
MOV COUNT1,#00H
SETB EX0 ;分中断
SETB EA ;总中断
clr IT0 ;触发方式选择
/*=================主程序===============================*/
MAIN:
CALL KEY_SCAN
; CALL NOAD
LJMP MAIN
/*==按键处理程序(只做了两种模式,大家可以再加)======*/
KEY_SCAN:
JB KEY,KEY_RET ;为1则转移;按键未按下转移
LCALL DELAY
JB KEY,KEY_RET ;按键确认未按下转移
INC COUNT1
INC COUNT1
MOV A,COUNT1
CJNE A,#4,KEY_D ; 累加器内容与立即数比较,不等则转移
MOV COUNT1,#00H
KEY_D:
JNB KEY,$ ;若为0则等待
KEY_RET:
RET
/*============ 散转程序==========================*/
NOAD:
MOV DPTR,#TAB_B ;设置散转表地址
MOV A,COUNT1
JMP @A+DPTR
TAB_B: ;散转表
AJMP OPR_0
AJMP OPR_2
OPR_0:
MOV DPTR,#TAB1
MOV A,C1
MOVC A,@A+DPTR
MOV OUTPUT1,A
MOV DPTR,#TAB2
MOV A,C2
MOVC A,@A+DPTR
MOV OUTPUT2,A
CALL LLL
INC C1
INC C2
MOV A,C2
CJNE A,#64,OPR_0
MOV C1,#00H
MOV C2,#00H
MOV P1,#0FFH
call DELAY
LJMP OPR_RET
OPR_2:
MOV DPTR,#TAB3
MOV A,C3
MOVC A,@A+DPTR
MOV OUTPUT1,A
MOV DPTR,#TAB4
MOV A,C4
MOVC A,@A+DPTR
MOV OUTPUT2,A
CALL LLL
INC C3
INC C4
MOV A,C4
CJNE A,#64,OPR_2
MOV C3,#00H
MOV C4,#00H
LJMP OPR_RET
OPR_RET:
RET
;-------------------------------------------
LLL:MOV R3,#3
HHH: MOV P1,OUTPUT2
CLR P3.1
CALL DELAY2
SETB P3.1
MOV P1,OUTPUT1
CLR P3.0
CALL DELAY2
SETB P3.0
DJNZ R3,HHH
RET
/*===================中断处理程序===================*/
INT:
clr ea ;保证散转程序的完整显示
CALL NOAD ;散转程序
MOV P1,#0FFH
MOV C1,#00H ;偏移量
MOV C2,#00H
setb ea
RETI
/*================= 延时程序=====================*/
DELAY:
MOV R7,#50
D1: MOV R6,#250
DJNZ R6,$
DJNZ R7,D1
RET
DELAY2:MOV R6,#50
DJNZ R6,$
RET
;==立新爱你==阳字逆向取码,列行方式========================
TAB1:
DB 0FFH, 0EFH, 0EFH, 6FH, 0EFH, 0EFH, 0EEH, 0E9H, 0EFH, 0EFH, 0FH, 0AFH, 0EFH, 0EFH, 0FFH, 0FFH;;"立"上部分
DB 0DFH, 0DBH, 0D3H, 0CAH, 19H, 0CBH, 0D3H, 0DBH, 0FFH, 03H, 0DBH, 0DBH, 1DH, 0DDH, 0DDH, 0FFH;"新"上部分
DB 0FFH, 0BFH, 4DH, 69H, 65H, 6DH, 09H, 65H, 6CH, 6EH, 66H, 68H, 6EH, 6FH, 0CFH, 0FFH;
DB 7FH, 0BFH, 0FH, 0D3H, 0BCH, 0DFH, 67H, 0F0H, 0F5H, 17H, 0F7H, 77H, 0D7H, 0E3H, 0F7H, 0FFH;
TAB2:
DB 0BFH, 0BFH, 0BFH, 0BFH, 0BCH, 0B1H, 0BFH, 9FH, 0A7H, 0B8H, 0BFH, 0BFH, 0BFH, 9FH, 0BFH, 0FFH ;"立"下部分
DB 0DEH, 0EEH, 0B2H, 7EH, 80H, 0FAH, 0A6H, 0DEH, 0E7H, 0F8H, 0FFH, 0FFH, 00H, 0FFH, 0FFH, 0FFH ;"新"下部分
DB 0BFH, 0DFH, 5FH, 6FH, 0B3H, 0B8H, 0D5H, 0D5H, 0EDH, 0E5H, 0D9H, 0DDH, 0BFH, 3FH, 0BFH, 0FFH ;"爱"
DB 0FFH, 0FFH, 80H, 0FFH, 0EFH, 0F3H, 0FCH, 0DEH, 0BFH, 0C0H, 0FFH, 0FFH, 0FCH, 0E3H, 0F7H, 0FFH ;"你"
;=======================================================
END ;结束 程序是借鉴的,完全成功了,字是自己换上去的, |