📄 new9d4c.asm
字号:
mul ab
mov dptr,#speech_addr
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
clr a
movc a,@a+dptr
mov p2,a
mov sconf,#01h
mov a,#01h
movc a,@a+dptr
mov p0,a
clr speech_cs
nop
nop
nop
nop
setb speech_cs
pop acc
mov p2,a
setb on_speak_flag
setb ex0
speak2:
ret
speak3:
; mov p4,#00h
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;speak car type
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
speak_cartype: ;你好,金额xxxxx元
MOV R1,#SPEAK_BUF
MOV @R1,#017H ;你好
INC R1
MOV R0,#RECDATA
MOV A,@R0
anl a,#0fh
JZ dispfare_type_fare1
add a,#0dh
MOV @R1,A
INC R1
dispfare_type_fare1:
MOV @R1,#18h
inc r1
mov r0,#RECDATA+1
lcall changed
mov @r1,#0ffh
MOV SPEAK_COUNT,#00H
mov micro_count,#30h ;this will sure to speak.
SETB EX0
setb spkflag
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
speak_yue: ;月票车,请通行
mov r1,#speak_buf
mov @r1,#02bh
inc r1
mov @r1,#0ffh
MOV SPEAK_COUNT,#00H
mov micro_count,#30h ;this will sure to speak.
SETB EX0
setb spkflag
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
speak_mian: ;免费车,请通行
mov r1,#speak_buf
mov @r1,#02ch
inc r1
mov @r1,#0ffh
MOV SPEAK_COUNT,#00H
mov micro_count,#30h ;this will sure to speak.
SETB EX0
setb spkflag
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
speak_chuang: ;闯关
mov r1,#speak_buf
mov @r1,#02dh
inc r1
mov @r1,#0ffh
MOV SPEAK_COUNT,#00H
mov micro_count,#30h ;this will sure to speak.
SETB EX0
setb spkflag
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
speak_pingan: ;谢谢,一路平安
mov r1,#speak_buf
mov @r1,#02eh
inc r1
mov @r1,#0ffh
MOV SPEAK_COUNT,#00H
mov micro_count,#30h ;this will sure to speak.
SETB EX0
setb spkflag
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
speak_start: ;系统正在加电自检
mov r1,#speak_buf
mov @r1,#02ah
inc r1
mov @r1,#0ffh
MOV SPEAK_COUNT,#00H
mov micro_count,#30h ;this will sure to speak.
SETB EX0
setb spkflag
ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: changed
;功能:
;I /P:
;O /P:
;注备:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
changed:
mov a,@r0
clr wan_flag
cjne a,#03ah,changed0
jmp changed1
changed0:
cjne a,#030h,changed02
jmp changed1
changed02:
setb wan_flag ;nxxxx
anl a,#0fh
mov @r1,a
inc r1
mov @r1,#20h ;wan
INC R1
changed1:
inc r0
mov a,@r0
clr qian_flag
cjne a,#03ah,changed1_1
jmp changed2
changed1_1:
cjne a,#030h,changed1_4
jmp changed1_3
changed1_4:
setb qian_flag ;nnxxx
anl a,#0fh
MOV @R1,A
INC R1
MOV @R1,#0ch ;qian
INC R1
jmp changed2
changed1_3:
jnb wan_flag,changed2
MOV @R1,#00h ;x0xxx
changed2:
INC R0
MOV A,@R0
clr bai_flag
cjne a,#3ah,changed2_1
jmp changed3
changed2_1:
cjne a,#30h,changed2_2
jmp changed2_3
changed2_2:
setb bai_flag
anl a,#0fh
MOV @R1,A
INC R1
MOV @R1,#0bH ;百
INC R1
JMP changed3
changed2_3:
jnb wan_flag,changed2_4
jnb qian_flag,changed3
MOV @R1,#00h ;xx0xx
jmp changed3
changed2_4:
jnb qian_flag,changed3
mov @r1,#00h
changed3:
INC R0
MOV A,@R0
clr shi_flag
cjne a,#3ah,changed3_1
INC R0 ;nnnnx
MOV A,@R0
anl a,#0fh
MOV @R1,A
INC R1
jmp changedret
changed3_1:
cjne a,#30h,changed3_5
jnb wan_flag,changed3_2
jnb qian_flag,changed3_3 ;for 0 jump
jnb bai_flag,changed3_4
MOV @R1,#0;A ;xxx0x
inc r0
mov a,@r0
anl a,#0fh
jz changedret
inc r1
mov @r1,a
inc r1
jmp changedret
changed3_2:
jnb qian_flag,changed3_2_1
jnb bai_flag,changed3_2_2
tt:
mov @r1,#0 ;0xx0x
tt1:
inc r0
mov a,@r0
anl a,#0fh
jz changedret11
inc r1
mov @r1,a
inc r1
jmp changedret
CHANGEDRET11:
INC R0
MOV A,@R0
ANL A,#0FH
JZ CHR
INC R1
MOV @R1,A
INC R1
jmp changedret
changed3_2_1:
jnb bai_flag,changed3_2_2
jmp tt
changed3_2_2:
jmp tt1
changed3_3:
jnb bai_flag,changed3_2_2
jmp tt
changed3_4:
jmp tt1
changed3_5:
anl a,#0fh
setb shi_flag
; jb wan_flag,changed3_5_1
jb qian_flag,changed3_5_2
jb bai_flag,changed3_5_3
cjne a,#01h,changed3_5_3
jmp changed3_5_4
changed3_5_2:
jb bai_flag,changed3_5_3
inc r1
changed3_5_3:
MOV @R1,A
INC R1
changed3_5_4:
MOV @R1,#0aH ;拾
INC R1
INC R0
MOV A,@R0
anl a,#0fh
jz changedret ;xnx
mov @r1,a
inc r1
changedret:
MOV @R1,#0dH ;元
INC R1
CHR:
ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: PUT_ON_LED
;功能: 数据发给LED显示
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PUT_ON_LED:
MOV DPTR,#LED_CODE
MOV R0,#LED_BUF+20
MOV B,#21
LOP0:
mov a,b
cjne a,#04,yyj0
jb dot_flag,yyj0_0
mov a,@r0
anl a,#0fh
movc a,@a+dptr
ajmp yyj2
yyj0_0:
mov a,@r0
anl a,#0fh
movc a,@a+dptr
add a,#020h
ajmp yyj2
yyj0:
cjne a,#09,yyj1
jb dot_flag,yyj1_1
mov a,@r0
anl a,#0fh
movc a,@a+dptr
ajmp yyj2
yyj1_1:
mov a,@r0
anl a,#0fh
movc a,@a+dptr
add a,#020h
ajmp yyj2
yyj1:
mov a,@r0
anl a,#0fh
MOVC A,@A+DPTR
yyj2:
lcall left_shift
DEC R0
DJNZ B,LOP0
SETB LED_STB
NOP
CLR LED_STB
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: left_shift
;功能: I2C通信,发送一个字节
;I /P:
;O /P:
;注备:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
left_shift:
mov r4,#08h
leftone:
rrc a
mov serial_data,c
setb serial_clock
clr serial_clock
djnz r4,leftone
ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: CLEAR_RAM
;功能: 清除外部RAM
;I /P:
;O /P:
;注备:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CLEAR_RAM:
mov p2,#00h
MOV B,#00h
CLR A
mov sconf,#02h
; CLR RAM_CS
MOV R0,#00H
CLEAR_RAM1:
MOVX @R0,A
INC R0
DJNZ B,CLEAR_RAM1
mov sconf,#01h
RET
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
delay: ;a*25ms
mov r7,#250
delay1:
mov r6,#200
djnz r6,$
djnz r7,delay1
djnz acc,delay
ret
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
delaya: ;a*25ms
mov r7,#6
delaya1:
mov r6,#90
djnz r6,$
djnz r7,delaya1
djnz acc,delaya
ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: RECEIVE_SEND
;功能: 串行口中断
;I /P: sbuf
;O /P: receive_buf
;注备:
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RECEIVE_SEND:
CLR ES
PUSH ACC
PUSH B
PUSH PSW
setb rs0
clr rs1
JBC RI,RECEIVE
SEND:
CLR TI
DJNZ TRANS_COUNT,SEND1
JMP SEND_RET
SEND1:
MOV SBUF,@R0
inc r0
SEND_RET:
POP PSW
POP B
POP ACC
SETB ES
RETI
RECEIVE:
MOV A,SBUF
MOV B,A
JB YYJDATA_MARK,REC_DATA
; JB start_MARK,REC_CHANNEL
JB addr_mark,rec_start
jb xun46_mark,rec_xuncomm
jb xun_mark,rec_46
CJNE A,#0FFH,yyj_1 ;判断是显示命令还是清屏查询命令
SETB addr_mark
jmp REC_RET
yyj_1:
cjne a,#0ah,ret_46
setb xun_mark
jmp rec_ret
rec_46:
cjne a,#046h,ret_46
setb xun46_mark
jmp rec_ret
ret_46:
clr xun_mark ;中间字节不是46出错,清除xun_mark标志返回
jmp rec_ret
rec_xuncomm:
cjne a,#0ah,rec_xuncomm1
clr xun_mark
clr xun46_mark
clr clear_flag
setb xun_flag
setb receive_mark
; lcall chaxun ;调用查询指令
jmp rec_ret
rec_xuncomm1:
cjne a,#0dh,ret_xuncomm
clr xun_mark
clr xun46_mark
clr xun_flag
setb clear_flag
setb receive_mark
; lcall clr_display ;调用清屏程序
jmp rec_ret
ret_xuncomm:
clr xun_mark
clr xun46_mark
jmp rec_ret
rec_start:
cjne a,#0ah,ret_start
SETB YYJDATA_MARK
mov rec_count,#0h
mov rec_bcc,#0h
CLR addr_mark
clr bcc_mark
jmp REC_RET
ret_start:
clr addr_mark
jmp rec_ret
REC_DATA:
jb bcc_mark,rec_end
MOV A,REC_COUNT
cjne a,#021,pre_data
mov a,sbuf
cjne a,rec_bcc,ret_data
setb bcc_mark
jmp rec_ret
ret_data:
clr receive_mark
clr yyjdata_mark
clr addr_mark
clr bcc_mark
jmp rec_ret
rec_end:
mov a,sbuf
cjne a,#0dh,ret_end
setb receive_mark
clr yyjdata_mark
clr addr_mark
clr bcc_mark
jmp rec_ret
ret_end:
clr receive_mark
clr yyjdata_mark
clr addr_mark
clr bcc_mark
jmp rec_ret
pre_data:
mov a,rec_count
ADD A,#RECDATA
MOV R0,A
MOV A,B
MOV @R0,A
xrl a,rec_bcc
mov rec_bcc,a
INC REC_COUNT
JMP REC_RET
REC_RET:
POP PSW
POP B
POP ACC
SETB ES
RETI
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: TIMER0_INT
;功能: 定时器0中断
;I /P:
;O /P:
;注备: 每1ms中断一次
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TIMER0_INT:
PUSH ACC
PUSH PSW
MOV TH0,#0f8H
; MOV TL0,#0d4H ;1ms f8cdH
MOV TL0,#0e0H ;1ms f8cdH
SETB SCAN_DOT
inc micro_count
INC LIGHT_COUNT0
INC LIGHT_COUNT
MOV A,LIGHT_COUNT
CJNE A,#10H,TIMER0_RET
MOV LIGHT_COUNT,#00H
COUNT_500MS:
INC SECOND_COUNT
MOV A,SECOND_COUNT
CJNE A,#1fH,TIMER0_RET
MOV SECOND_COUNT,#00H
; DEC STOP_COUNT
CPL SECOND
setb t500ms_flag
jnb cleardis_flag,timer0_ret ;cleardis_flag标志为0的话就返回
clr c
inc stop_count
mov a,stop_count
cjne a,#020h,gg
mov stop_count,#00h
clr cleardis_flag
jmp timer0_ret
gg:
jc timer0_ret
mov stop_count,#00h
clr cleardis_flag
TIMER0_RET:
POP PSW
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RST_SP: ;a*25ms
setb p4.0
setb p4.1
setb rest_speech
nop
nop
clr rest_speech
clr on_speak_flag
ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;名称: extern_int
;功能: 外部中断0
;I /P:
;O /P:
;注备: ISD PLAY OVER FLAG
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
extern_int0:
clr ex0
mov micro_count,#00h
setb spkflag
clr on_speak_flag
reti
;****************************************************************************
LED_CODE:
db 0ddh,018h,0ceh,09eh,01bh,097h,0d7h,01ch,0dfh,09fh,00h,00h,00h,00h,00h,00h
LED_CODE1:
db 0fdh,038h,0eeh,0beh,03bh,0b7h,0f7h,03ch,0ffh,0bfh,00h,00h,00h,00h,00h,00h
;;LED_CODE:
; db 0BBh,018h,073h,079h,0d8h,0e9h,0ebh,038h,0fbh,0F9h,00h,00h,00h,00h,00h,00H
;LED_CODE1:
; db 0bfh,01ch,077h,07dh,0dch,0edh,0efh,03ch,0Ffh,0Fdh,000h,00h,00h,00h,00h,00H
row_word:
db 80h,00h,40h,00h,20h,00h,10h,00h,08h,00h,04h,00h,02h,00h,01h,00h
db 00h,80h,00h,40h,00h,20h,00h,10h,00h,08h,00h,04h,00h,02h,00h,01h
speech_addr:
;2560
DB 00H,000H,00H,005H,00H,00aH,00H,00fH,00H,014H,00H,019H
DB 00H,01eH,00H,024H,00H,02aH,00H,030H,00H,035H,00H,03bH
DB 00H,041H,00H,047H,00H,04dH,00H,056H,00H,05fH,00H,068H
DB 00H,071H,00H,07bH,00H,085H,00H,08fH,00H,099H,00H,0a3H
DB 00H,0aaH,00H,0b2H,00H,0baH,00H,0c6H,00H,0d2H,00H,0dcH
DB 00H,0e2H,00H,0edH,00H,0F3H,00H,0F9H,01H,005H,01H,011H
DB 01H,01BH,01H,022H,00H,000H,00H,000H,00H,000H,00H,000H
db 01h,039h ;系统正在加电自 2a
db 01h,04eh ;月票,请通行 2b
db 01h,05ch ;免费,请通行 2c
db 01h,06bh ;闯关 2d
db 01h,072h ;谢谢!一路平安 2e
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -