📄 hkbus16.asm
字号:
;两种修改内容方式:1. (全覆盖) 地址 * ...................
; 2. (从第X幕开始覆盖) 地址 # X(第几幕)..........
;点阵图文屏特点:通过4094的Q8脚的输出,控制是由主板1还是由主板2输出显示
;不用164,165数据线,P3.0接结165的9脚
;P3.4控制1487的收发控制端
;修改时间DATAENT.TXT文件,停留方式06
;单色
;最大640*64,即最多160个16*16汉字.竖向可1-4行条屏
;CPU采用80C320芯片
;主板上
;P1.0,P1.1,P1.2,P1.3 行选ABCD
;P1.4 地址线A16
;P1.5 地址线A17
;P1.6 片选信号
;P1.7 片选信号
;P3.0 RS232通讯的RXD
;P3.1 RS232通讯的TXD
;P3.2 显示信号使能OE
;P3.3 显示信号锁存STO
;P3.4 1487控制端
;P3.5 控制所有片选有效,从高电平跳变到低电平产生8个时钟脉冲
;元器件有:80C320,27C512,74LS373,74LS245,628128,4094,4069,12887,232
;74LS164,74LS165,74LS259,24M晶振.
;80C320 内部寄存器分配:
;00H-07H R0-R7
;08H-19H 堆栈区
;1AH 最多可显示多少屏
;1BH 显示的起始屏号
;1CH 显示的结束屏号
;1DH 显示的当前屏号
;1EH 存一行有几个16点阵汉字
;1FH 存有几个条屏
;20H-23H 位标志区
;68H-7FH 显示花样数据暂存区
;数据结构(628128):
;0000H-0FBFFH 存BMP内容.从0000H-(SUM2,SUM1)为第一屏内容,依次存放以后屏内容.
;0F600H-0FFFFH 存每屏的显示方式.从第一屏开始存放,每屏为10字节.
;这10字节依次定义:移入方式,追加方式,移出方式,速度,后5字节保留不用.
ORG 0
LJMP MAIN
ORG 0023H
LJMP INES
ORG 0040H
;点阵屏物理参数定义,每个点阵屏只需修改7个参数
HOR EQU 08D ;点阵屏横向点共有几字节
VER EQU 16D ;点阵屏共有几行
NUM1 EQU 80H ;一个条屏(16行为一个条屏)共有几个字节
NUM2 EQU 00H ;NUM1为低位,NUM2为高位.
TIAO EQU 1 ;有几个条屏
SUM1 EQU 80H ;整个点阵屏有几个字节
SUM2 EQU 00H ;SUM1为低位,SUM2为高位.
ADDR1 EQU 41H
ADDR2 EQU 26H
ADDR3 EQU 7EH ;多机通讯地址字节
;字节参数选择需注意:
;1.该字节1的个数为奇数. 2.必须与通讯程序中的地址相同
;源程序
ORG 100H
MAIN:
MOV SP,#07H
CLR P3.4 ;发控制端清0,接收
SETB P1.3 ;控制所有片选有效,9572并入串出功能无效
; LCALL DELAY ;延时一段时间
MOV A,#04
LCALL PX
MOV A,#2FH
MOV DPTR,#7F8AH
MOVX @DPTR,A
INC DPTR
MOV A,#12H
MOVX @DPTR,A ;选中时钟,写时钟控制字.
MOV SP,#07H
MOV TMOD,#21H ;设置通讯波特率
MOV TH1,#0FDH ;bps=11.0592*1000000/32/12/(256-244)=2400 (33M晶振)
MOV TL1,#0FDH ;bps=11.0592*1000000/32/12/(256-255)=28800 (11M晶振)
MOV PCON,#00H ;#80H,波特率*2
MOV SCON,#0F0H ;baud rate=28800 parity=evenparity datebit=8 stopbit=1
CLR ET1
SETB TR1
SETB EA
CLR ES
MOV A,#01H
LCALL PX
CLR 11H
MOV 23H,#01H
MOV A,#HOR
RR A
MOV 1EH,A
MOV 1FH,#TIAO
MOV 20H,#00H
MOV 21H,#00H
MOV 22H,#00H
LCALL R29C040 ;读29C040数据到628128的1区
SETB ES
MOV A,#01
LCALL PX
JMP TESEN
TES: MOV R1,#01H
MOV DPTR,#0F000H
MOV R5,#VER
TES1:MOV R4,#HOR
TES2:MOV A,#0
MOVX @DPTR,A
INC DPTR
DJNZ R4,TES2
MOV A,DPL
CLR C
SUBB A,#02
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOV A,R1
MOVX @DPTR,A
INC DPTR
INC DPTR
INC R1
DJNZ R5,TES1
MOV R7,#01
MOV 40H,#00H ;某幕的起始地址41H,40H
MOV 41H,#0F0H
LCALL CDX1
MOV 73H,#01 ;亮度等级参数73H
LCALL ZHUZ71 ;HOR-HOR/10*73H==>74H
TESTD:LCALL DISS
JMP TESTD
TESEN:
CLR 0AH ;检测所存幕循环显示一次
list0:nop
MOV SP,#07H
MOV A,#01
LCALL PX
MOV DPTR,#0FFFAH ;0FFFAH中存亮度等级0-9
MOVX A,@DPTR
LCALL CHECKA ;限制A为0-9
MOV 73H,A ;亮度等级参数73H
LCALL ZHUZ71 ;HOR-HOR/10*73H==>74H
mov dptr,#0fffeh ;0FFFEH中存放显示屏的起始号(从00开始)
movx a,@dptr ;0FFFFH中存放显示屏的结束号
mov 1bh,a ;1BH中存放显示屏的起始号
inc dptr ;1CH中存放显示屏的结束号
movx a,@dptr ;1DH中存放显示屏的当前号
mov 1ch,a
mov 1dh,1bh
clr 21h
JNB 0AH,LIST
MOV 1DH,#0
LIST: mov sp,#07h
MOV A,1DH ;根据显示屏的当前号计算当前显示内容的首址
MOV B,#SUM1 ;放于(69H,68H)中
MUL AB ;A低位,B高位
MOV 68H,A
MOV 69H,B
MOV A,1DH
MOV B,#SUM2
MUL AB
ADD A,69H
MOV 69H,A
;MOV DPTR,#0FC00H
mov a,1dh ;根据显示屏的当前号计算当前显示内容的显示方式
mov b,#10 ;其中(28H)放 移入方式 1<=(28h)<=16
mul ab ; (29H)放 追加方式 1<=(29H)<=16
mov dpl,a ; (2AH)放 移出方式 1<=(2AH)<=16
mov a,b ; (2BH)放 速度 1<=(2BH)<=16
add a,#0f6h
mov dph,a
MOVX A,@DPTR
MOV 28H,A
cjne a,#00h,hy12
ljmp hy10
hy12:cjne a,#17,hy1
hy10:mov 28h,#01h
ljmp hy2
hy1:jnc hy10
hy2:INC DPTR
MOVX A,@DPTR
MOV 29H,A
INC DPTR
MOVX A,@DPTR
MOV 2AH,A
cjne a,#00,hy34
ljmp hy30
hy34:cjne a,#17,hy3
hy30:mov 2ah,#01h
ljmp hy4
hy3: jnc hy30
hy4: INC DPTR
MOVX A,@DPTR
MOV 2BH,A
cjne a,#00,hy55
ljmp hy50
hy55:cjne a,#16,hy5
hy50:mov 2bh,#01h
ljmp sel10
hy5: jnc hy50
SEL10:JNB 0AH,SEL11
MOV 28H,#0
MOV 29H,#0
MOV 2AH,#0
MOV 2BH,#0
SEL11: dec 28h ;根据(28H)中的内容选择移入的显示子程序
MOV A,28H
RL A
ADD A,28H
MOV DPTR,#SEL1
JMP QQ8
JMP @A+DPTR
SEL1:LJMP QQ0
LJMP QQ1
LJMP QQ2
LJMP QQ3
LJMP QQ4
LJMP QQ5
LJMP QQ6
LJMP QQ7
LJMP QQ8
LJMP QQ9
LJMP QQ10
LJMP QQ11
LJMP QQ12
LJMP QQ13
LJMP QQ14
LJMP QQ15
QQ0:CLR 06H ;左移
LJMP SEL2
QQ1: CLR 06H ;右移
LJMP SEL2
QQ2: CLR 06H ;上展
LJMP SEL2
QQ3: CLR 06H ;下展
LJMP SEL2
QQ4: CLR 06H ;上移
LJMP SEL2
QQ5: CLR 06H ;下移
LJMP SEL2
QQ6: CLR 06H ;左展
LJMP SEL2
QQ7: CLR 06H ;右展
LJMP SEL2
QQ8:CLR 06H ;立即
LCALL LILI
LJMP SEL2
QQ9:CLR 06H
LJMP SEL2
QQ10:CLR 06H
LJMP SEL2
QQ11:CLR 06H
LJMP SEL2
QQ12:CLR 06H
LJMP SEL2
QQ13:CLR 06H
LJMP SEL2
QQ14:NOP
QQ15:INC 51H
INC 51H
MOV A,#00H
ADD A,51H
CJNE A,#16,SDC1
SDC0:MOV 28H,#00
ANL A,#0FH
MOV 51H,A
LJMP SEL10
SDC1:JNC SDC0
MOV 28H,A
LJMP SEL10
SEL2:MOV A,29H ;根据(29H)中的内容选择追加方式子程序
DEC A
CJNE A,#00H,SEL20 ;1正常
MOV R5,#0FFH
SEZ1:LCALL DIS
DJNZ R5,SEZ1
LJMP SEL4
SEL20:CJNE A,#01h,SEL21 ;2连续
SETB 21H
LJMP QE
SEL21:CJNE A,#02H,SEL22 ;3闪烁
MOV R4,#05
SEF1:MOV R5,#20
SEF2:LCALL DIS
DJNZ R5,SEF2
MOV R2,#01
LCALL DELAY0
DJNZ R4,SEF1
MOV R5,#80H
SEF3:LCALL DIS
DJNZ R5,SEF3
LJMP SEL4
SEL22:CJNE A,#03H,SEL23 ;4暂停
MOV R4,#15
SEZ3:MOV R5,#0FFH
SEZ4:LCALL DIS
DJNZ R5,SEZ4
DJNZ R4,SEZ3
LJMP SEL4
SEL23:CJNE A,#04H,SEL24 ;5静止
SEJ1:LCALL DIS
JMP SEJ1
SEL24:CJNE A,#05H,SEL25 ;6时间
; LCALL DATE
SEL25:;LCALL DEL
SEL4:dec 2ah ;根据(2AH)中的内容选择移出方式的子程序
clr 21h
MOV A,2AH
RL A
ADD A,2AH
MOV DPTR,#SEL5
JMP QE8
JMP @A+DPTR
SEL5:LJMP QE0
LJMP QE1
LJMP QE2
LJMP QE3
LJMP QE4
LJMP QE5
LJMP QE6
LJMP QE7
LJMP QE8
LJMP QE9
LJMP QE10
LJMP QE11
LJMP QE12
LJMP QE13
LJMP QE14
LJMP QE15
QE0:SETB 06H ;左移
LJMP QE
QE1:SETB 06H ;右移
LJMP QE
QE2:SETB 06H ;上展
LJMP QE
QE3:SETB 06H ;下展
LJMP QE
QE4:SETB 06H ;上移
LJMP QE
QE5:SETB 06H ;下移
LJMP QE
QE6:SETB 06H ;左展
LJMP QE
QE7:SETB 06H ;右展
LJMP QE
QE8:SETB 06H ;立即
LCALL LILI
LJMP QE
QE9:SETB 06H
LJMP QE
QE10:SETB 06H
LJMP QE
QE11:SETB 06H
LJMP QE
QE12:SETB 06H
LJMP QE
QE13:SETB 06H
LJMP QE
QE14:NOP
QE15:
INC 51H
MOV A,#00H
ADD A,51H
CJNE A,#16,SEC1
SEC0:MOV 2AH,#00
ANL A,#0FH
MOV 51H,A
LJMP SEL4
SEC1:JNC SEC0
MOV 2AH,A
LJMP SEL4
QE: MOV A,#01
LCALL PX
INC 1DH
MOV A,1CH
INC A
CJNE A,1DH,QE99
MOV 1DH,1BH
JNB 0AH,QE98
CLR 0AH ;检测所存幕循环显示一次
CLR ES ;禁止串口通讯
MOV R4,#'2'
LCALL SENDTE ;TEST ACK
SETB ES
QE98:LJMP LIST0
QE99:LJMP LIST
;-----------------------------------------------------------
ZHUZ71:MOV A,#HOR ;HOR-HOR/10*73H==>74H
MOV B,#10
DIV AB
MOV B,73H
MUL AB
MOV B,A
MOV A,#HOR
CLR C
SUBB A,B
MOV 74H,A
RET
;------------------------------------------------------------------
DISS: MOV A,#01
LCALL PX
MOV DPTR,#0F000H
MOV R7,#0
LJMP DIS1
;------------------------------------------------------------------
DIS:
SETB P1.0 ;行号选择
SETB P1.1
SETB P1.2
CLR P3.3 ;STO脉冲锁存数据
MOV A,#0
LCALL PX
MOV DPTR,#8000H
MOV R7,#0
DIS1: MOV R1,74H ;74H--亮度参数
MOV R6,#HOR
DIS2: SETB P1.3 ;控制所有片选有效,9572并入串出功能无效
MOVX A,@DPTR
MOV 60H,A
INC DPTR
MOVX A,@DPTR
MOV 61H,A
INC DPTR
; MOVX A,@DPTR
; MOV 62H,A
; INC DPTR
; MOVX A,@DPTR
; MOV 63H,A
; INC DPTR
; mov 60h,#0
; mov 61h,#0
; mov 62h,#0
; mov 63h,#0
; mov a,r6
; clr c
; cjne a,#02,hhj
; mov 60h,#0e0h
; mov 61h,#0e0h
; mov 62h,#0e0h
; mov 63h,#0e0h
; jmp hhk
;hhj: jnc hhk
; mov 60h,r7
; mov 61h,r7
; mov 62h,r7
; mov 63h,r7
;hhk:
CLR P1.3 ;控制所有片选无效,9572并入串出功能有效
SETB P3.5 ;高电平根据WR上升沿顺序并行载入数据到9572
MOV A,60H
MOVX @R0,A
MOV A,61H
MOVX @R0,A
MOV A,62H
MOVX @R0,A
MOV A,63H
MOVX @R0,A
NOP
CLR P3.5 ;从高电平跳变到低电平产生8个时钟脉冲
NOP
DJNZ R1,OE_OM
SETB P3.2 ;亮度控制,OE关显示
OE_OM:DJNZ R6,DIS2
SETB P3.2 ;关显示OE
MOV A,R7 ;换行
CJNE A,#08,DIS3 ;是否扫完8行
SETB P1.3 ;控制所有片选有效,9572并入串出功能无效
RET
DIS3: mov c,acc.0
mov p1.0,c
mov c,acc.1
mov p1.1,c
mov c,acc.2
mov p1.2,c
;DIS3: MOV A,P1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -