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

📄 zlg7290.s

📁 数码管 按键芯片zlg7290的atmega128 的c语言程序
💻 S
字号:
	.module zlg7290.C
	.area text(rom, con, rel)
	.dbfile E:\PQ-1A\我的AVR\zlg7290/TWI.C
	.dbfunc e delay _delay fV
;              x -> R20,R21
;              y -> R22,R23
;              z -> R16,R17
	.even
_delay::
	xcall push_gset2
	.dbline -1
	.dbline 15
; #include <iom128v.h>
; #include <iom128.h>
; #include <macros.h>
; #include <stdio.h>
; #include "TWI.C"
; #include "zlg7290.h"
; 
; #define uchar unsigned char
; #define uint unsigned int
; 
; 
; /*
; 函数:ZLG7290_WriteReg()
; 功能:向ZLG7290的某个内部寄存器写入数据
; 参数:
	.dbline 17
; 	RegAddr:ZLG7290的内部寄存器地址
; 	dat:要写入的数据
	movw R20,R16
	xjmp L5
L2:
	.dbline 18
	ldi R22,1100
	ldi R23,4
	xjmp L9
L6:
	.dbline 18
L7:
	.dbline 18
	subi R22,1
	sbci R23,0
L9:
	.dbline 18
	cpi R22,0
	cpc R22,R23
	brne L6
X0:
L3:
	.dbline 17
	subi R20,1
	sbci R21,0
L5:
	.dbline 17
	cpi R20,0
	cpc R20,R21
	brne L2
X1:
	.dbline -2
	.dbline 19
; 返回:
; 	1:正常
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r x 20 i
	.dbsym r y 22 i
	.dbsym r z 16 i
	.dbend
	.dbfunc e TWI_init _TWI_init fV
	.even
_TWI_init::
	.dbline -1
	.dbline 28
; 	0:访问ZLG7290时出现异常
; */
; uchar ZLG7290_WriteReg(uchar RegAddr, uchar dat)
; {
;    uchar b;
;    b = TWI_write(ZLG7290_I2C_ADDR,RegAddr,1,&dat);
;    return b;
; }
; 
	.dbline 29
; /*
	ldi R24,32
	sts 112,R24
	.dbline 30
; 函数:ZLG7290_ReadReg()
	clr R2
	sts 113,R2
	.dbline 31
; 功能:从ZLG7290的某个内部寄存器读出数据
	ldi R24,68
	sts 116,R24
	.dbline -2
	.dbline 32
; 参数:
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e TWI_start _TWI_start fc
	.even
_TWI_start::
	.dbline -1
	.dbline 42
; 	RegAddr:ZLG7290的内部寄存器地址
; 	*dat:保存读出的数据
; 返回:
; 	1:正常
; 	0:访问ZLG7290时出现异常
; */
; uchar ZLG7290_ReadReg(uchar RegAddr, uchar *dat)
; {
;    	uchar b;
; 	b=TWI_read(ZLG7290_I2C_ADDR,RegAddr,1,dat);
	.dbline 43
;    	return b;
	ldi R24,164
	sts 116,R24
L12:
	.dbline 44
L13:
	.dbline 44
; }
	lds R2,116
	sbrs R2,7
	rjmp L12
	.dbline 45
; 
	ldi R16,1
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e TWI_stop _TWI_stop fV
	.even
_TWI_stop::
	.dbline -1
	.dbline 49
; /*
; 函数:ZLG7290_cmd()
; 功能:向ZLG7290发送控制命令
; 参数:
	.dbline 50
; 	cmd0:写入CmdBuf0寄存器的命令字(第1字节)
	ldi R24,148
	sts 116,R24
	.dbline -2
	.dbline 51
; 	cmd1:写入CmdBuf1寄存器的命令字(第2字节)
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e TWI_writeB _TWI_writeB fc
;            ack -> R20
;              c -> R16
	.even
_TWI_writeB::
	xcall push_gset1
	.dbline -1
	.dbline 63
; 返回:
; 	1:正常
; 	0:访问ZLG7290时出现异常
; */
; uchar ZLG7290_cmd(uchar cmd0, uchar cmd1)
; {
;     uchar b;
; 	uchar buf[2];
; 	buf[0] = cmd0;
; 	buf[1] = cmd1;
; 	b=TWI_write(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,2,buf);
; 	return b;
	.dbline 64
; }
	ldi R20,1
	.dbline 65
; 
	sts 115,R16
	.dbline 66
; /*
	ldi R24,132
	sts 116,R24
L17:
	.dbline 67
L18:
	.dbline 67
; 函数:ZLG7290_SegOnOff()
	lds R2,116
	sbrs R2,7
	rjmp L17
	.dbline 68
; 功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段
	lds R24,113
	andi R24,248
	cpi R24,24
	breq L20
	.dbline 69
; 参数:
	clr R20
L20:
	.dbline 70
; 	seg:取值0~63,表示数码管(或LED)的段号
	mov R16,R20
	.dbline -2
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ack 20 c
	.dbsym r c 16 c
	.dbend
	.dbfunc e TWI_readB _TWI_readB fc
;            ack -> R16
	.even
_TWI_readB::
	.dbline -1
	.dbline 81
; 	b:0表示熄灭,1表示点亮
; 返回:
; 	1:正常
; 	0:访问ZLG7290时出现异常
; 说明:
; 	在每一位数码管中,段号顺序按照“a,b,c,d,e,f,g,dp”进行
; */
; uchar ZLG7290_SegOnOff(uchar seg, uchar b)
; {
; 	uchar cmd,a;
; 	cmd = seg & 0x3F;
	.dbline 82
; 	if ( b ) cmd |= 0x80;
	tst R16
	breq L23
	.dbline 83
;     a=ZLG7290_cmd(0x01,cmd);
	ldi R24,196
	sts 116,R24
	xjmp L26
L23:
	.dbline 85
; 	return a;
; }
	ldi R24,132
	sts 116,R24
L25:
	.dbline 86
L26:
	.dbline 86
; /*
	lds R2,116
	sbrs R2,7
	rjmp L25
	.dbline 87
; 函数:ZLG7290_Download()
	lds R16,115
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbsym r ack 16 c
	.dbend
	.dbfunc e TWI_page_write _TWI_page_write fc
;              i -> R20
;              b -> R22
;            arr -> R10,R11
;              n -> R12
;           addr -> R20
;         devadd -> R14
	.even
_TWI_page_write::
	xcall push_gset5
	mov R20,R18
	mov R14,R16
	ldd R12,y+10
	ldd R10,y+12
	ldd R11,y+13
	.dbline -1
	.dbline 106
; 功能:下载数据并译码
; 参数:
; 	addr:取值0~7,显示缓存DpRam0~DpRam7的编号
; 	dp:是否点亮该位的小数点,0-熄灭,1-点亮
; 	flash:控制该位是否闪烁,0-不闪烁,1-闪烁
; 	dat:取值0~31,表示要显示的数据
; 返回:
; 	1:正常
; 	0:访问ZLG7290时出现异常
; 说明:
; 	显示数据具体的译码方式请参见ZLG7290的数据手册
; */
; uchar ZLG7290_Download(uchar addr, uchar dp, uchar f, uchar dat)
; {
; 	uchar cmd0;
; 	uchar cmd1;
; 	uchar b;
; 	cmd0 = addr & 0x0F;
; 	cmd0 |= 0x60;
	.dbline 107
; 	cmd1 = dat & 0x1F;
	clr R22
	.dbline 108
; 	if ( dp==1 ) cmd1 |= 0x80;
	xcall _TWI_start
	.dbline 109
; 	if ( f==1 ) cmd1 |= 0x40;
	mov R16,R14
	xcall _TWI_writeB
	mov R22,R16
	.dbline 110
; 	b=ZLG7290_cmd(cmd0,cmd1);
	tst R16
	brne L29
	.dbline 111
; 	return b;
	.dbline 112
; }
	xcall _TWI_stop
	.dbline 113
; 
	mov R16,R22
	xjmp L28
L29:
	.dbline 115
; /*void main()
; {
	mov R16,R20
	xcall _TWI_writeB
	mov R22,R16
	.dbline 116
;    uchar a=0;
	tst R16
	brne L31
	.dbline 117
;    TWI_init();
	.dbline 118
;    DDRA=0XFF;
	xcall _TWI_stop
	.dbline 119
;    a=ZLG7290_Download(1,0,0,31);;
	mov R16,R22
	xjmp L28
L31:
	.dbline 121
;    PORTA=a;
;    while(1);
	ldi R20,1
	xjmp L36
L33:
	.dbline 122
; }*/
	.dbline 123
; }*/
	movw R30,R10
	ldd R16,z+0
	xcall _TWI_writeB
	mov R22,R16
	.dbline 124
; }*/
	tst R16
	brne L37
	.dbline 125
; }*/
	.dbline 126
; }*/
	xcall _TWI_stop
	.dbline 127
; }*/
	mov R16,R22
	xjmp L28
L37:
	.dbline 129
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 130
L34:
	.dbline 121
	inc R20
L36:
	.dbline 121
	cp R12,R20
	brsh L33
	.dbline 131
; }*/
; }*/
; }*/
; }*/
	xcall _TWI_stop
	.dbline 132
; }*/
	ldi R16,80
	ldi R17,0
	xcall _delay
	.dbline 133
; }*/
	mov R16,R22
	.dbline -2
L28:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r b 22 c
	.dbsym r arr 10 pc
	.dbsym r n 12 c
	.dbsym r addr 20 c
	.dbsym r devadd 14 c
	.dbend
	.dbfunc e TWI_write _TWI_write fc
;          n_tmp -> R14
;              b -> R20
;            arr -> R22,R23
;              n -> R10
;           addr -> R12
;         devadd -> y+14
	.even
_TWI_write::
	xcall push_arg4
	xcall push_gset5
	mov R12,R18
	sbiw R28,4
	ldd R10,y+18
	ldd R22,y+20
	ldd R23,y+21
	.dbline -1
	.dbline 152
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
	.dbline 153
; }*/
	clr R20
	.dbline 154
; }*/
	mov R24,R12
	clr R25
	andi R24,7
	andi R25,0
	ldi R25,8
	mov R14,R25
	sub R14,R24
	.dbline 155
; }*/
	cp R14,R10
	brsh L43
	tst R14
	breq L43
	.dbline 156
; }*/
	.dbline 157
; }*/
	std y+2,R22
	std y+3,R23
	std y+0,R14
	mov R18,R12
	ldd R16,y+14
	xcall _TWI_page_write
	mov R20,R16
	.dbline 158
; }*/
	add R12,R14
	.dbline 159
; }*/
	sub R10,R14
	.dbline 160
; }*/
	mov R2,R14
	clr R3
	add R22,R2
	adc R23,R3
	.dbline 161
; }*/
	xjmp L43
L42:
	.dbline 163
	.dbline 164
	std y+2,R22
	std y+3,R23
	ldi R24,8
	std y+0,R24
	mov R18,R12
	ldd R16,y+14
	xcall _TWI_page_write
	mov R20,R16
	.dbline 165
	mov R24,R12
	subi R24,248    ; addi 8
	mov R12,R24
	.dbline 166
	mov R24,R10
	subi R24,8
	mov R10,R24
	.dbline 167
	subi R22,248  ; offset = 8
	sbci R23,255
	.dbline 168
L43:
	.dbline 162
; }*/
	mov R24,R10
	cpi R24,8
	brsh L42
	.dbline 169
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
	tst R10
	breq L45
	.dbline 170
; }*/
	std y+2,R22
	std y+3,R23
	std y+0,R10
	mov R18,R12
	ldd R16,y+14
	xcall _TWI_page_write
	mov R20,R16
L45:
	.dbline 171
; }*/
	mov R16,R20
	.dbline -2
L39:
	adiw R28,4
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r n_tmp 14 c
	.dbsym r b 20 c
	.dbsym r arr 22 pc
	.dbsym r n 10 c
	.dbsym r addr 12 c
	.dbsym l devadd 14 c
	.dbend
	.dbfunc e TWI_read _TWI_read fc
;              b -> R20
;              i -> R22
;            arr -> R10,R11
;              n -> R12
;           addr -> R14
;         devadd -> R22
	.even
_TWI_read::
	xcall push_gset5
	mov R14,R18
	mov R22,R16
	ldd R12,y+10
	ldd R10,y+12
	ldd R11,y+13
	.dbline -1
	.dbline 190
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
; }*/
	.dbline 191
; }*/
	clr R20
	.dbline 192
; }*/
	xcall _TWI_start
	.dbline 193
; }*/
	mov R16,R22
	xcall _TWI_writeB
	mov R20,R16
	.dbline 194
; }*/
	tst R16
	brne L48
	.dbline 195
; }*/
	.dbline 196
; }*/
	xcall _TWI_stop
	.dbline 197
; }*/
	mov R16,R20
	xjmp L47
L48:
	.dbline 199
; }*/
; }*/
	mov R16,R14
	xcall _TWI_writeB
	mov R20,R16
	.dbline 200
; }*/
	tst R16
	brne L50
	.dbline 201
; }*/
	.dbline 202
; }*/
	xcall _TWI_stop
	.dbline 203
; }*/
	mov R16,R20
	xjmp L47
L50:
	.dbline 205
; }*/
; }*/
	xcall _TWI_start
	.dbline 206
; }*/
	mov R16,R22
	ori R16,1
	xcall _TWI_writeB
	mov R20,R16
	.dbline 207
; }*/
	tst R16
	brne L52
	.dbline 208
; }*/
	.dbline 209
; }*/
	xcall _TWI_stop
	.dbline 210
; }*/
	mov R16,R20
	xjmp L47
L52:
	.dbline 212
; }*/
; }*/
	ldi R22,1
	xjmp L57
L54:
	.dbline 213
	.dbline 214
	ldi R16,1
	xcall _TWI_readB
	movw R30,R10
	std z+0,R16
	.dbline 215
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 216
L55:
	.dbline 212
	inc R22
L57:
	.dbline 212
	mov R24,R12
	subi R24,1
	cp R24,R22
	brsh L54
	.dbline 217
; }*/
; }*/
; }*/
; }*/
; }*/
	clr R16
	xcall _TWI_readB
	movw R30,R10
	std z+0,R16
	.dbline 218
; }*/
	xcall _TWI_stop
	.dbline 219
; }*/
	mov R16,R20
	.dbline -2
L47:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r b 20 c
	.dbsym r i 22 c
	.dbsym r arr 10 pc
	.dbsym r n 12 c
	.dbsym r addr 14 c
	.dbsym r devadd 22 c
	.dbend
	.dbfile E:\PQ-1A\我的AVR\zlg7290\zlg7290.C
	.dbfunc e ZLG7290_WriteReg _ZLG7290_WriteReg fc
;              b -> R20
;            dat -> y+6
;        RegAddr -> R20
	.even
_ZLG7290_WriteReg::
	st -y,r19
	st -y,r18
	xcall push_gset1
	mov R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 23
	.dbline 25
	movw R24,R28
	adiw R24,6
	std y+2,R24
	std y+3,R25
	ldi R24,1
	std y+0,R24
	mov R18,R20
	ldi R16,56
	xcall _TWI_write
	mov R20,R16
	.dbline 26
	.dbline -2
L58:
	adiw R28,4
	xcall pop_gset1
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r b 20 c
	.dbsym l dat 6 I
	.dbsym l dat 6 c
	.dbsym r RegAddr 20 c
	.dbend
	.dbfunc e ZLG7290_ReadReg _ZLG7290_ReadReg fc
;              b -> R20
;            dat -> R22,R23
;        RegAddr -> R20
	.even
_ZLG7290_ReadReg::
	xcall push_gset2
	movw R22,R18
	mov R20,R16
	sbiw R28,4
	.dbline -1
	.dbline 40
	.dbline 42
	std y+2,R22
	std y+3,R23
	ldi R24,1
	std y+0,R24
	mov R18,R20
	ldi R16,56
	xcall _TWI_read
	mov R20,R16
	.dbline 43
	.dbline -2
L59:
	adiw R28,4
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r b 20 c
	.dbsym r dat 22 pc
	.dbsym r RegAddr 20 c
	.dbend
	.dbfunc e ZLG7290_cmd _ZLG7290_cmd fc
;              b -> R20
;            buf -> y+4
;           cmd1 -> R20
;           cmd0 -> R22
	.even
_ZLG7290_cmd::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	sbiw R28,6
	.dbline -1
	.dbline 57
	.dbline 60
	std y+4,R22
	.dbline 61
	std y+5,R20
	.dbline 62
	movw R24,R28
	adiw R24,4
	std y+2,R24
	std y+3,R25
	ldi R24,2
	std y+0,R24
	ldi R18,7
	ldi R16,56
	xcall _TWI_write
	mov R20,R16
	.dbline 63
	.dbline -2
L60:
	adiw R28,6
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r b 20 c
	.dbsym l buf 4 A[2:2]c
	.dbsym r cmd1 20 c
	.dbsym r cmd0 22 c
	.dbend
	.dbfunc e ZLG7290_SegOnOff _ZLG7290_SegOnOff fc
;              a -> R20
;            cmd -> R20
;              b -> R22
;            seg -> R20
	.even
_ZLG7290_SegOnOff::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 79
	.dbline 81
	andi R20,63
	.dbline 82
	tst R22
	breq L63
	.dbline 82
	ori R20,128
L63:
	.dbline 83
	mov R18,R20
	ldi R16,1
	xcall _ZLG7290_cmd
	mov R20,R16
	.dbline 84
	.dbline -2
L62:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r a 20 c
	.dbsym r cmd 20 c
	.dbsym r b 22 c
	.dbsym r seg 20 c
	.dbend
	.dbfunc e ZLG7290_Download _ZLG7290_Download fc
;              b -> R20
;           cmd1 -> R22
;           cmd0 -> R20
;            dat -> y+8
;              f -> y+6
;             dp -> R10
;           addr -> R20
	.even
_ZLG7290_Download::
	xcall push_gset3
	mov R10,R18
	mov R20,R16
	.dbline -1
	.dbline 101
	.dbline 105
	andi R20,15
	.dbline 106
	ori R20,96
	.dbline 107
	ldd R22,y+8
	andi R22,31
	.dbline 108
	mov R24,R10
	cpi R24,1
	brne L66
	.dbline 108
	ori R22,128
L66:
	.dbline 109
	ldd R24,y+6
	cpi R24,1
	brne L68
	.dbline 109
	ori R22,64
L68:
	.dbline 110
	mov R18,R22
	mov R16,R20
	xcall _ZLG7290_cmd
	mov R20,R16
	.dbline 111
	.dbline -2
L65:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r b 20 c
	.dbsym r cmd1 22 c
	.dbsym r cmd0 20 c
	.dbsym l dat 8 c
	.dbsym l f 6 c
	.dbsym r dp 10 c
	.dbsym r addr 20 c
	.dbend

⌨️ 快捷键说明

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