📄 main.asm
字号:
ORG 00H
SJMP START
ORG 003H;
JMP INT0_INT;
ORG 000BH
JMP T0_INT;
ORG 0023H
JMP UART51_INT;
START:
MOV SP,#50H;
RECBUF EQU 40H;
SENDBUF EQU 42H;
STATUS EQU 46H;
CYCLE EQU 047H;
TOKEN EQU 048H;
NUM EQU 49H;
KEY EQU 4AH;
POUT3 BIT P1.2;
;KEY1 BIT P0.0;
;KEY2 BIT P0.1;
;KEY3 BIT P0.3;
;KEY4 BIT P0.2;
KEY1 BIT ACC.0;
KEY2 BIT ACC.1;
KEY3 BIT ACC.3;
KEY4 BIT ACC.2;
RS BIT P1.7
RW BIT P1.6
EP BIT P1.5;
;;;;;; AUX REGISTER DEFINE ;;;;;;
P1M0 EQU 91H;
P1M1 EQU 92H;
P0M0 EQU 93H;
P0M1 EQU 94H;
P2M0 EQU 95H;
P2M1 EQU 96H;
P3M0 EQU 0B1H;
P3M1 EQU 0B2H;
CLK_DIV EQU 0C7H;
AUXR EQU 8EH;
LCALL DELAY3S;
LCALL DELAY3S;
LCALL DELAY3S;
LCALL IO_INITIAL
MOV R5,#30H;
LCALL lcd_wcmd;
LCALL DELAY;
MOV R5,#0CH;#0CH;
LCALL lcd_wcmd; 显于方式开
LCALL DELAY;
MOV R5,#06H;
LCALL lcd_wcmd;
LCALL DELAY;
MOV R5,#01H;;
LCALL lcd_wcmd;
LCALL DELAY;
;LCALL lcd_pos;
MOV R5,#8AH;
LCALL lcd_wcmd;
LCALL DELAY;
LCALL INT_INITIAL;
LCALL UART51_INITIAL;
CLR IE0;
CLR IE1;
CLR EX0;
CLR ES; 充许51串口中断
LCALL CLEAR_DISP;
;MOV DPTR,#TABLE1;
;LCALL DISP
MAIN:
CALL KEY_CHECK;
MOV A,KEY;
JZ MAIN
JNB KEY1,UART51_INT_NEXT1; KEY1
LCALL CLEAR_DISP;
MOV DPTR,#TABLE1;
LCALL DISP
MOV KEY,#00H;
JMP MAIN;
UART51_INT_NEXT1:
JNB KEY2,UART51_INT_NEXT2;
LCALL CLEAR_DISP;
MOV DPTR,#TABLE2;
LCALL DISP
MOV KEY,#00H;
JMP MAIN;
UART51_INT_NEXT2:
JNB KEY3,UART51_INT_NEXT3;
LCALL CLEAR_DISP;
MOV DPTR,#TABLE3;
LCALL DISP
MOV KEY,#00H;
JMP MAIN;
UART51_INT_NEXT3:
JNB KEY4,UART51_INT_NEXT4;
LCALL CLEAR_DISP;
MOV DPTR,#TABLE4;
LCALL DISP
MOV KEY,#00H;
JMP MAIN;
UART51_INT_NEXT4:
JMP MAIN;
UART51_INT_NEXT50:
JMP MAIN;
/***************************************/
IO_INITIAL:
;;;;;;;;; P0 HIGH RESISER INPUT PORT ;;;;
MOV P0M0,#0FFH;
; MOV P0M0,#00H;
MOV P0M1,#00H;
;;;;;;;; P1.0 P1.1 HIGH RESISER INPUT,OTHERS PIN ARE STANDER IO PORT
MOV P1M0,#00000011B;
;MOV P1M0,#00000000B;
MOV P1M1,#00000000B;
;;;;;;;;; P2 STANDAR IO PORT ;;;;
MOV P2M0,#00H;
MOV P2M1,#00H;
;;;;;;;;; P3 STANDAR IO PORT ;;;;
MOV P3M0,#00H;
MOV P3M1,#00H;
; MOV P3M1,#11111000b;
MOV CLK_DIV,#00H
MOV AUXR,#00H; T0,T1 1/12 clock mode; uart is standar 12T mode; disable a/d and spi interrupt
RET;
KEY_CHECK:
MOV KEY,#00H;
KEY_DOWN:
MOV A,P0;
JZ KEY_DOWN;
CLR POUT3;
MOV B,A;
CALL DELAY;
MOV A,P0;
CJNE A,B,KEY_ERROR;
MOV KEY,P0;
KEY_UP:
MOV A,P0;
JNZ KEY_UP;
SETB POUT3;
JMP KEY_END;
KEY_ERROR:
MOV KEY,#00H;
KEY_END:
RET
CLEAR_DISP:
MOV R5,#01H;;
LCALL lcd_wcmd;
LCALL DELAY;
RET;
DISP:
MOV R5,#91H
LCALL lcd_wcmd
LCALL DELAY
CALL WRITE
LCALL DELAY;
RET
WRITE:
MOV A,#00H;
MOVC A,@A+DPTR;
CJNE A,#00H,WRITE_NEXT1;
JMP WRITE_END;
WRITE_NEXT1:
MOV R4,A;
LCALL lcd_wdat;
LCALL DELAY;
INC DPTR;
JMP WRITE;
WRITE_END:
RET
DELAY:
MOV R7,#06H
DELAY1:
MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DELAY1
RET
;;;;;;;;;;;;;R4 ; data
lcd_wdat:
LCALL lcd_bz;
SETB RS;
CLR RW;
CLR EP;
NOP;
NOP;
MOV P2,R4;
NOP;
NOP;
NOP;
SETB EP;
NOP;
NOP;
NOP;
CLR EP;
RET;
;;;;;;;;;;; r5 CMD;
lcd_wcmd:
LCALL lcd_bz;
CLR RS;
CLR RW;
CLR EP;
NOP;
NOP;
NOP;
MOV P2,R5;
NOP;
NOP;
NOP;
SETB EP;
NOP;
NOP;
NOP;
CLR EP;
RET;
;;;;;;;;;;;;;;;;;;;;;;
lcd_bz:
CLR RS;
SETB RW;
SETB EP;
NOP;
NOP;
NOP;
BZ_LOOP:
MOV A,#80H;
MOV B,P2;
ANL A,B;
CJNE A,#80H,BZ_NEXT1;
JMP BZ_LOOP;
BZ_NEXT1:
CLR EP;
RET;
lcd_pos:
MOV R5,#80H;
LCALL lcd_wcmd;
RET;
DELAY3S:
MOV R7,#08H;
DELAY3S1:
MOV R6,#0fFH;
DELAY3S2:
MOV R5,#0FFH;
DELAY3S3:
NOP;
DJNZ R5,DELAY3S3;
DJNZ R6,DELAY3S2;
DJNZ R7,DELAY3S1;
RET;
UART51_INITIAL:
;;;;;;;;;;;;;;;;;;;;;;TMOD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV TMOD,#020H; 设置定时器1工作在2模式
;;;;;;;;;;;;;;;;;;;设置波特率 9600;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV PCON,#00H; CLR SMOD;
MOV TH1,#0FDH;
MOV TH1,#0FDH;
MOV TL1,#0FDH;
MOV TL1,#0FDH;
;;;;;;;;;;;;;;;;;;;SCON REGESTER SETTING ;;;;;;;;;;;;;;;;;;;;
CLR SM0;
SETB SM1; 单片机工作在方式1,一个起始位,一个停止位。
CLR SM2;
CLR TI ; 发送中断标志位,发送前软件置0
CLR RI ; 接收中断标志位,接收前软件置0
SETB TR1;起动定时器1
RET;
INT_INITIAL:
;;;;;;;;;;;;;;;;;;;;;;TCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SETB IT0; 外部中断0为沿触发
;SETB IT1; 外部中断1为沿触发
;SETB ET1; 定时器1中断充许
MOV IP,#10H;
CLR IE0;
CLR IE1;
CLR EX0;外部中断0中断充许
CLR EX1;外部中断1中断充许
CLR ES; 充许51串口中断
CLR EA;
RET ;
INT0_INT:
MOV R7,#0FFH;
DJNZ R7,$
MOV KEY,P0;
RETI
UART51_INT:
RETI;
T0_INT:
RETI;
TABLE1:DB '输入所需显示的汉字',00H
TABLE2:DB '输入所需显示的汉子',00H
TABLE3:DB '输入所需显示的汉子',00H
TABLE4:DB '输入所需显示的汉字',00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -