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

📄 new9d4c.asm

📁 该程序采用汇编语言编写
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -