⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hkbus16.asm

📁 多数位分频器.............................................可直接编译
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;两种修改内容方式: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 + -