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

📄 tyjianpan5.asm

📁 通用键盘显示程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	dat	equ	p1.5
	clk2	equ	p1.4
	set2	equ	p1.3
	led1	equ	p1.2
	led2	equ	p1.1
	led3	equ	p1.0
        ;使用前定义常量
	SDA	EQU	P1.6	                            ;24c02 I2C总线定义
	SCL	EQU	P1.7
	MTD	EQU	58H	                            ;发送数据缓冲区1首址 (缓冲区50H) 
	MRD	EQU	50H	                            ;接收数据缓冲区1首址 (缓冲区57H)
	;注意:iic与uart 的接收区是一样的
;******************24c02******************************
	ACK	BIT	10H	                            ;应答标志位变量
	SLA	DATA	60H	                            ;器件从地址变量
	SUBA	DATA	61H	                            ;器件子地址变量 
	NUMBYTE	DATA	62H	                            ;读/写的字节数变量
;定义器件地址
	CSI24WCXX	EQU	0A0H
	ORG	0000H
	lJMP	MAIN
	org	23h	                                    ;串行中断入口地址
	jmp	com_int	                                    ;串行中断服务程序
	;org	30h
MAIN:	nop
	nop
	clr	led1
	clr	led2
	clr	led3
	MOV	R4, #0F0H	                            ;/////延时,等待其它芯片复位好 
	DJNZ	R4, $
	mov	20h, #00h	                            ;00h-串口接受结素标志/01h-查看内容标志
            ;/02h-数据头标志/03h-确认标志/04h-设置运行标志
            ;/05h-数据正确标志1 /06h-数据正确标志2  /07h- 数据正确标志3 
	mov	21h, #00h	                            ;发送查询计数器
	mov	22h, #00h	                            ;10h-应答标志位变量/11h-  
	mov	23h, #00h	                            ;状态指示寄存 全灭
	mov	24h, #00h	                            ;分
	mov	25h, #12h	                            ;时
	mov	26h, #18h	                            ;日
	mov	27h, #07h	                            ;月
	mov	28h, #02h	                            ;星期
	mov	29h, #06h	                            ;年

	mov	2ah, #00h	                            ;灯1开分
	mov	2bh, #07h	                            ;灯1开时
	mov	2ch, #00h	                            ;灯1关分
	mov	2dh, #08h	                            ;灯1关时

	mov	2eh, #00h	                            ;机1开分
	mov	2fh, #09h	                            ;机1开时
	mov	30h, #00h	                            ;机1关分
	mov	31h, #10h	                            ;机1关时

	mov	32h, #00h	                            ;灯2开分
	mov	33h, #11h	                            ;灯2开时
	mov	34h, #00h	                            ;灯2关分
	mov	35h, #12h	                            ;灯2关时

	mov	36h, #00h	                            ;机2开分
	mov	37h, #13h	                            ;机2开时
	mov	38h, #00h	                            ;机2关分
	mov	39h, #14h	                            ;机2关时

	mov	3ah, #10h	                            ;展示时间分
	mov	3bh, #00h	                            ;展示时间时

	mov	3ch, #00h                                   ;单画超时时间
	mov	3dh, #00h                                   ;严重超时时间
	mov	3eh, #46h                                   ;串口数据接收指针->#46h
	mov	3fh, #00h                                   ;串口数据临时存储
	mov	40h, #00h	                            ;功能计数器
	mov	41h, #00h	                            ;键值存储
	mov	42h, #0aah	                            ;显示缓冲1
	mov	43h, #0aah	                            ;显示缓冲2
	mov	44h, #0aah	                            ;显示缓冲3
	mov	45h, #0aah	                            ;显示缓冲4
	mov	46h, #00h	                            ;1接收缓冲区开始
	mov	47h, #00h	                            ;2
	mov	48h, #00h	                            ;3
	mov	49h, #00h	                            ;4
	mov	4ah, #00h	                            ;5
	mov	4bh, #00h	                            ;6
	mov	4ch, #00h	                            ;7
	mov	4dh, #00h	                            ;8
	mov	4eh, #00h	                            ;9
	mov	4fh, #00h	                            ;10
            ;58H		;发送数据缓冲区1首址 (缓冲区50H) 8
            ;50H		;接收数据缓冲区1首址 (缓冲区57H) 8
	mov	sp, #63h	                            ;设置堆栈
            ;
	nop
	mov	r0, #46h	                            ;串口数据接收指针
	lcall	comm	                                    ;串口初始化
	setb	led1
	setb	led2
	setb	led3                                        ;LED全灭
	;lcall	bcsj                                        ;保存数据
	lcall	sjhf                                        ;数据恢复
main1:	nop
        mov     a,40h
        cjne    a,#00h, zhenchng
        inc     21h
        mov     a,21h
        cjne    a,#0ffh,zhenchng
        mov     21h,#00h
        lcall   com_send4                                   ;发送查询时间命令
zhenchng:nop
 	lcall	jianpan	                                    ;键盘程序
	lcall	jianzhi	                                    ;键值处理程序
	lcall   shujujk                                     ;数据监控
	lcall   com_cl                                      ;串口数据处理
	LCALL	sjzb	                                    ;数据准备
	LCALL	show	                                    ;显示程序
	ljmp	main1
	;*******************************
;******************************************************************
;数据监控
shujujk:nop
        mov   a,24h
        cjne  a,#60h,sjjk1
        mov   24h,#00h
sjjk1:  mov   a,25h
        cjne  a,#24h,sjjk2
        mov   25h,#00h
        ;***
sjjk2:  mov   a,2ah
        cjne  a,#60h,sjjk3
        mov   25h,#00h
sjjk3:  mov   a,2bh
        cjne  a,#24h,sjjk4
        mov   2bh,#00h
        ;***
sjjk4:  mov   a,2ch
        cjne  a,#60h,sjjk5
        mov   2ch,#00h
sjjk5:  mov   a,2dh
        cjne  a,#24h,sjjk6
        mov   2dh,#00h
        ;***
sjjk6:  mov   a,2eh
        cjne  a,#60h,sjjk7
        mov   2eh,#00h
sjjk7:  mov   a,2fh
        cjne  a,#24h,sjjk8
        mov   2fh,#00h
        ;***
sjjk8:  mov   a,30h
        cjne  a,#60h,sjjk9
        mov   30h,#00h
sjjk9:  mov   a,31h
        cjne  a,#24h,sjjka
        mov   31h,#00h
        ;***
sjjka:  mov   a,32h
        cjne  a,#60h,sjjkb
        mov   32h,#00h
sjjkb:  mov   a,33h
        cjne  a,#24h,sjjkc
        mov   33h,#00h
        ;***
sjjkc:  mov   a,34h
        cjne  a,#60h,sjjkd
        mov   34h,#00h
sjjkd:  mov   a,35h
        cjne  a,#24h,sjjke
        mov   35h,#00h
        ;***
sjjke:  mov   a,36h
        cjne  a,#60h,sjjkf
        mov   36h,#00h
sjjkf:  mov   a,37h
        cjne  a,#24h,sjjk10
        mov   37h,#00h
        ;***
sjjk10:  mov   a,38h
        cjne  a,#60h,sjjk11
        mov   38h,#00h
sjjk11:  mov   a,39h
        cjne  a,#24h,sjjk12
        mov   39h,#00h
        ;***
sjjk12:  mov   a,3ah
        cjne  a,#60h,sjjk13
        mov   3ah,#00h
sjjk13:  mov   a,3bh
        cjne  a,#60h,sjjk14
        mov   3bh,#00h
        ;***
sjjk14: nop
        ret
;******************************************************************
;保存数据程序
bcsj:	nop
        ;clr     es                     
	mov	a, 24h
	mov	mtd, a
	mov	a, 25h
	mov	mtd+1, a
	mov	a, 26h
	mov	mtd+2, a
	mov	a, 27h
	mov	mtd+3, a
	mov	a, 2ah
	mov	mtd+4, a
	mov	a, 2bh
	mov	mtd+5, a
	mov	a, 2ch
	mov	mtd+6, a
	mov	a, 2dh
	mov	mtd+7, a
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #00H
	MOV	NUMBYTE, #08
           ;注意,10ms后EEPROM写周期才结束
	LCALL	IWRNBYTE
	lcall	DELEY20MS
	lcall	DELEY20MS
           ;LCALL  IRDNBYTE 
	nop
	mov	a, 2eh
	mov	mtd, a
	mov	a, 2fh
	mov	mtd+1, a
	mov	a, 30h
	mov	mtd+2, a
	mov	a, 31h
	mov	mtd+3, a
	mov	a, 32h
	mov	mtd+4, a
	mov	a, 33h
	mov	mtd+5, a
	mov	a, 34h
	mov	mtd+6, a
	mov	a, 35h
	mov	mtd+7, a
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #08H
	MOV	NUMBYTE, #08
           ;注意,10ms后EEPROM写周期才结束
	LCALL	IWRNBYTE
	lcall	DELEY20MS
	lcall	DELEY20MS
           ;LCALL  IRDNBYTE 
	nop
	mov	a, 36h
	mov	mtd, a
	mov	a, 37h
	mov	mtd+1, a
	mov	a, 38h
	mov	mtd+2, a
	mov	a, 39h
	mov	mtd+3, a
	mov	a, 3ah
	mov	mtd+4, a
	mov	a, 3bh
	mov	mtd+5, a
	mov	a, 3ch             ;单画超时时间
	mov	mtd+6, a
	mov	a, 3dh             ;严重超时时间
	mov	mtd+7, a
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #10H
	MOV	NUMBYTE, #08
           ;注意,10ms后EEPROM写周期才结束
	LCALL	IWRNBYTE
	lcall	DELEY20MS
	lcall	DELEY20MS
           ;LCALL  IRDNBYTE 
        ;setb  es
	ret
;******************************************************************
;数据恢复程序
sjhf:	nop
        ;clr    es
	nop
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #00H
	MOV	NUMBYTE, #08
	LCALL	IRDNBYTE
	mov	a, 50h
	mov	24h, a
	mov	a, 51h
	mov	25h, a
	mov	a, 52h
	mov	26h, a
	mov	a, 53h
	mov	27h, a
	mov	a, 54h
	mov	2ah, a
	mov	a, 55h
	mov	2bh, a
	mov	a, 56h
	mov	2ch, a
	mov	a, 57h
	mov	2dh, a
            ;
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #08H
	MOV	NUMBYTE, #08
	LCALL	IRDNBYTE
            ;zhuanyi
	mov	a, 50h
	mov	2eh, a
	mov	a, 51h
	mov	2fh, a
	mov	a, 52h
	mov	30h, a
	mov	a, 53h
	mov	31h, a
	mov	a, 54h
	mov	32h, a
	mov	a, 55h
	mov	33h, a
	mov	a, 56h
	mov	34h, a
	mov	a, 57h
	mov	35h, a
            ;
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #10H
	MOV	NUMBYTE, #08
	LCALL	IRDNBYTE
	mov	a, 50h
	mov	36h, a
	mov	a, 51h
	mov	37h, a
	mov	a, 52h
	mov	38h, a
	mov	a, 53h
	mov	39h, a
	mov	a, 54h
	mov	3ah, a
	mov	a, 55h
	mov	3bh, a
        mov	a, 56h
	mov	3ch, a           ;单画超时时间
	mov	a, 57h
	mov	3dh, a           ;严重超时时间
	;setb    es
	ret
	/*
;页写EEPROM
;写入字节数据不要大于EEPROM的页字节数,否则会造成写入地址的'翻卷'
W24WCXXP:	nop
	;在这之前要把数据准备好
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #00H
	MOV	NUMBYTE, #8
	LCALL	IWRNBYTE	                            ;写入一页数据
	NOP	                                            ;注意,10ms后比EEPROM写周期才结束     
                        ;在此设置断点,观察ACK位,ACK为1时操作正确
	lcall	DELEY20MS
	lcall	DELEY20MS
	ret
           
;读 EEPROM          
R24WCXXP:	nop
	MOV	SLA, #CSI24WCXX
	MOV	SUBA, #08H
	MOV	NUMBYTE, #8
	LCALL	IRDNBYTE
	lcall	DELEY20MS
	NOP	                                            ;在此设置断点,观察MRD区及ACK位,ACK为1时操作正确
	RET	                                            ;操作结束
 */            
; **************  串口初始化   *****************
;设置串行口工作方式1,定时器1作为波特率发生器
;波特率设置为   2400  ;

comm:	mov	tmod, #20h	                            ;设置定时器T1工作方式2
	mov	tl1, #0fdh	                            ;定时器计数初值,波特率 9600 
	mov	th1, #0fdh	                            ;定时器重装值
	setb	ea	                                    ;允许总的中断
	setb	es	                                    ;允许串行中断
	mov	pcon, #00h	                            ;波特率不倍增
	mov	scon, #50h	                            ;设置串口工作方式1,REN = 1 允许接收
	setb	tr1	                                    ;定时器开始工作
	ret	                                            ;返回
;***************  串口中断服务程序   ***********
;串口接收的数据放在46h-4fh
com_int:	PUSH	ACC
	PUSH	PSW
	setb    rs0
	clr	es	                                    ;禁止串行中断
	clr	ri	                                    ;清除接收标志位
	mov	a, sbuf	                                    ;从缓冲区取出数据
	mov	3fh, a	                                    ;临时存储
	mov	r0, 3eh	                                    ;调指针
	mov	@r0, a
	inc	3eh
	mov	a, 3eh
	cjne	a, #4fh, zc1
	mov	3eh, #46h	                            ;数据超长,清指针
        setb    00h                                         ;接收完毕标志
zc1:	setb	es	                                    ;允许串行中断
	POP	PSW
	POP	ACC
	reti
;****************串口数据处理****************       
;*****************串口接收数据缓冲在3ch---44h
com_cl:	nop
	jnb	00h, exitcl
	clr     00h 
	mov     a,46h  
	mov     25h,a            ;时
	mov     a,47h
	mov     24h,a            ;分
	mov     a,48h  
        mov     3bh,a            ;展示时
	mov     a,49h
	mov     3ah,a            ;展示分
        ;
        mov     a,4eh            ;数据包号
        cjne    a,#04h,fail
        clr     led2
        sjmp    exitcl 
fail:   setb    led2
exitcl:	nop
        ret	                                            ;串口数据处理返回
;****************串口数据发送************
;****************************************
;发送时间,画面展示时间,超时时间
;例:120800100613000001
com_send1:	nop
	clr	es
	mov	sbuf, 25h	                            ;1---时	
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti
        mov	sbuf, 24h	                            ;2---分	
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti
	mov	sbuf, 3bh	                            ;3---展示时	 
	jnb	ti, $	                                    ;等待发送完毕
        clr	ti
        mov	sbuf, 3ah	                            ;4---展示分	
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti
        mov	sbuf, 3ch	                            ;5---单画超时	
	jnb	ti, $	                                    ;等待发送完毕
	clr	ti
	mov	sbuf, 3dh	                            ;6---严重超时	 
	jnb	ti, $	                                    ;等待发送完毕
        clr	ti
	mov	sbuf, #55h	                            ;7---空	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -