📄 公交车报站系统.asm
字号:
;************************************************************
;ST7920的测试程序,该程序使用并口,可测试128×64点阵。其接口为
;RS---P2.5 R/W---P2.6 E---------P2.7 DB0~7-----P0
;重庆电子网 www.cqmcu.com QQ 444011745 469040972
;************************************************************
RS EQU P2.5
RW EQU P2.6
E EQU P2.7
QJ EQU 30H
ORG 0000H
AJMP START
;主程序
ORG 0100H
START:
LCALL DELAY
LCALL DELAY
LCALL SETUP
MOV QJ,#0H
MAIN:
MOV P1,#0F8H
MOV A,P1
ANL A,#0F8H
CJNE A,#0F8H,HAVE
SJMP MAIN
HAVE:
MOV A,#01111111B
MOV B,A
NEXT:
MOV A,B
RL A
MOV P1,A
MOV B,A
MOV A,P1
ANL A,#0F8H
CJNE A,#0F8H,YES
SJMP NEXT
YES:
MOV A,P1
A0: CJNE A,#0DEH,A1 ;前进 1
LCALL FORWARD
A1: CJNE A,#0EEH,A2 ;后退 2
LCALL BACK
A2: CJNE A,#0DBH,A3 ;启动 7
MOV A,#01H ;清除显示
LCALL WRITE_COM
MOV A,#00001100B ;DISPLAY ON
LCALL WRITE_COM
MOV QJ,#0H
SJMP MAIN
A3: CJNE A,#0EBH,A4 ;复位 8
MOV QJ,#0H
MOV A,#01H ;清除显示
LCALL WRITE_COM
A4: CJNE A,#0F3H,Z1 ;宣传 9
MOV DPTR,#TAB4
LCALL DISP
Z1: MOV R0,#8
AA:
MOV A,#00011000B
LCALL WRITE_COM
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
DJNZ R0,AA
LJMP MAIN
DISP:
MOV A,#80H
LCALL WRITE_COM
LCALL WRITE_HZ
RET
/*
LCALL MOVE
MOV A,#80H
LCALL WRITE_COM
MOV A,#00H
LCALL WRITE_DAT
MOV A,#00H
LCALL WRITE_DAT
LCALL DELAY
LCALL DELAY
;造字
MOVE:
MOV R0,#0
MOV DPTR,#TAB
MOV A,#40H
LCALL WRITE_COM
A1: ; CGRAM:写16组,每组2字节
CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
INC R0
CJNE R0,#16,A1
RET
*/
FORWARD:
MOV A,QJ
CJNE A,#0H,ZHANDIAN1
MOV DPTR,#TAB1
LCALL DISP
MOV A,QJ
INC A
MOV QJ,A
SJMP R
ZHANDIAN1:
MOV A,QJ
CJNE A,#1H,ZHANDIAN2
MOV DPTR,#TAB2
LCALL DISP
MOV A,QJ
INC A
MOV QJ,A
SJMP R
ZHANDIAN2:
MOV A,QJ
MOV DPTR,#TAB3
LCALL DISP
SJMP R
RET
BACK:
MOV A,QJ
CJNE A,#2H,ZHANDIAN3
MOV DPTR,#TAB2
MOV A,QJ
DEC A
MOV QJ,A
LCALL DISP
SJMP R
ZHANDIAN3:
MOV A,QJ
MOV DPTR,#TAB1
LCALL DISP
SJMP R
R: RET
;初始化
SETUP:
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV A,#01H ;清除显示
LCALL WRITE_COM
MOV A,#00110000B ;8位MPU控制界面,基本指令集动作
LCALL WRITE_COM
MOV A,#00000010B ;DDRAM的计数器(AC)到"00H",降游标移动到开头原点位置
LCALL WRITE_COM
MOV A,#00000100B ;
LCALL WRITE_COM
MOV A,#00001000B ;DISPLAY OFF
LCALL WRITE_COM
MOV A,#00000001B ;CLEARING SCREEN
LCALL WRITE_COM
RET
;读数据
READ:
LCALL DELAY1
SETB RS
SETB RS
SETB RW
SETB RW
MOV P0,#0FFH
SETB E
SETB E
MOV A,P0
MOV A,P0
CLR E
CLR E
LCALL DELAY1
RET
;写指令
WRITE_COM:
LCALL DELAY
CLR RS
CLR RS
CLR RW
CLR RW
MOV P0,A
MOV P0,A
SETB E
SETB E
NOP
NOP
CLR E
CLR E
RET
;写显示数据
WRITE_DAT:
LCALL DELAY1
SETB RS
SETB RS
CLR RW
CLR RW
MOV P0,A
MOV P0,A
SETB E
SETB E
NOP
NOP
CLR E
CLR E
RET
;延时1×1+16×1+16×16×2+16×2+1×2=563us
DELAY1:
MOV R7,#10H
D11: MOV R6,#10H
DJNZ R6,$
DJNZ R7,D11
RET
;延时1×1+256×1+256×256×2+256×2+1×2=131843us
DELAY:
MOV R1,#00H
D2: MOV R2,#00H
DJNZ R2,$
DJNZ R1,D2
RET
;写32个字符到128×64液晶模块,前16个汉字在第一(二)行,后16个汉字在第三(四)行。
WRITE_HZ1:
MOV R4,#16
DDDD:MOV A,#01H
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
DJNZ R4,DDDD
RET
;写16个汉字到128×64液晶模块,前8个汉字在第一(二)行,后8个汉字在第三(四)行。
WRITE_HZ:
MOV R4,#16
DD:
CLR A
MOVC A,@A+DPTR
LCALL WRITE_DAT
INC DPTR
DJNZ R4,DD
RET
;定位,使汉字代码以偶字节开始
ORG 1000H
;"这里是16*16点阵的汉字代码表"
// //100
TAB1: DB "11单片机课程设计 "
TAB2: DB "22黑金刚51片机学 "
TAB3: DB "22黑金刚51片机学 "
TAB4: DB "22黑金刚51片机学 "
;结束
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -