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

📄 ylf240128a-3.s

📁 自己编制的北京友力发公司的液晶显示模块驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
;          twop2 -> R20
;          twop1 -> R22
	.even
_twoparameter::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 147
; }
; 
; //两字节参数指令写入函数
; void twoparameter(uchar twop1,uchar twop2,uchar comd2)
; {
	.dbline 148
;     writedata(twop1);
	mov R16,R22
	xcall _writedata
	.dbline 149
;     writedata(twop2);
	mov R16,R20
	xcall _writedata
	.dbline 150
;     writecode(comd2);
	ldd R16,y+4
	xcall _writecode
	.dbline -2
L18:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l comd2 4 c
	.dbsym r twop2 20 c
	.dbsym r twop1 22 c
	.dbend
	.dbfunc e lcd_init _lcd_init fV
	.even
_lcd_init::
	sbiw R28,1
	.dbline -1
	.dbline 158
; }
; 
; /***********************************************************
; 液晶初始化,清屏
; ***********************************************************/
; //内置T6963C控制器液晶初始化函数
; void lcd_init(void)
; {
	.dbline 159
;     twoparameter(0x00,0x00,TXHOME); //文本显示区域首地址0x0000
	ldi R24,64
	std y+0,R24
	clr R18
	clr R16
	xcall _twoparameter
	.dbline 160
;     twoparameter(0x00,0x02,GRHOME); //图形显示区域首地址0x0200
	ldi R24,66
	std y+0,R24
	ldi R18,2
	clr R16
	xcall _twoparameter
	.dbline 162
; 
;     twoparameter(0x1E,0x00,TXAREA); //文本显示区域宽度30字节
	ldi R24,65
	std y+0,R24
	clr R18
	ldi R16,30
	xcall _twoparameter
	.dbline 163
;     twoparameter(0x1E,0x00,GRAREA); //图形显示区域宽度30字节
	ldi R24,67
	std y+0,R24
	clr R18
	ldi R16,30
	xcall _twoparameter
	.dbline 164
;     writecode(0x80); //显示方式设置(使用内部CGROM,OR合成)
	ldi R16,128
	xcall _writecode
	.dbline 166
;     
;     twoparameter(0x02,0x00,OFFSET);//偏移地址,1400
	ldi R24,34
	std y+0,R24
	clr R18
	ldi R16,2
	xcall _twoparameter
	.dbline 168
;     
;     writecode(0x94); //显示开关(Text on,graphics off,cursor off)
	ldi R16,148
	xcall _writecode
	.dbline -2
L19:
	adiw R28,1
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e lcd_clear _lcd_clear fV
;       cl_count -> R20,R21
	.even
_lcd_clear::
	xcall push_gset1
	sbiw R28,1
	.dbline -1
	.dbline 173
; }
; 
; //清除屏幕(清所有8K存储空间)
; void lcd_clear(void)
; {
	.dbline 175
;     uint cl_count;
;     twoparameter(0x00,0x00,ADPSET); //设置显示存储器首地址
	ldi R24,36
	std y+0,R24
	clr R18
	clr R16
	xcall _twoparameter
	.dbline 176
;     writecode(AWRON); //设置自动写状态
	ldi R16,176
	xcall _writecode
	.dbline 177
;     for(cl_count=960;cl_count>0;cl_count--)
	ldi R20,960
	ldi R21,3
	xjmp L24
L21:
	.dbline 178
	ldi R16,5
	xcall _writeauto
L22:
	.dbline 177
	subi R20,1
	sbci R21,0
L24:
	.dbline 177
	cpi R20,0
	cpc R20,R21
	brne L21
X0:
	.dbline 179
;         writeauto(0x05);
;     writecode(AWROFF); //关闭自动写状态
	ldi R16,178
	xcall _writecode
	.dbline -2
L20:
	adiw R28,1
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r cl_count 20 i
	.dbend
	.dbfunc e dispauto _dispauto fV
;              i -> R20
;        address -> R22,R23
;              j -> R12
;         column -> R10
;           line -> y+9
;              y -> R22
;              x -> R20
	.even
_dispauto::
	xcall push_gset4
	mov R22,R18
	mov R20,R16
	sbiw R28,1
	ldd R10,y+11
	.dbline -1
	.dbline 203
; }
; 
; //16*8点阵显示
; //x:0~29; y:0~127
; /*
; void disp168(uchar x,uchar y)
; {
; uchar i;
; uint address;
; address=y*30+x+0x0800; //计算显示存储器地址
; for(i=8;i>0;i--)
; {
; twoparameter((uchar)(address),(uchar)(address>>8),0x24); //设置显示存储器地址
; oneparameter(*ptr0++,0xc0); //点阵左部
; oneparameter(*ptr0++,0xc0); //点阵右部
; address+=30; //修改显示存储器地址
; }
; }
; */
; 
; //连续写点阵
; //x:0~29; y:0~127
; void dispauto(uchar x,uchar y,uchar line,uchar column)
; {
	.dbline 206
;     uchar i,j;
;     uint address;
;     address=y*30+x+480; //计算显示存储器地址
	ldi R24,30
	mul R24,R22
	movw R22,R0
	mov R2,R20
	clr R3
	add R22,R2
	adc R23,R3
	subi R22,32  ; offset = 480
	sbci R23,254
	.dbline 207
;     for(i=line;i>0;i--) //显示line行
	ldd R20,y+9
	xjmp L29
L26:
	.dbline 208
;     {
	.dbline 209
;         twoparameter((uchar)(address),(uchar)(address>>8),0x24); //设置显示存储器地址
	ldi R24,36
	std y+0,R24
	movw R18,R22
	mov R18,R19
	clr R19
	mov R16,R22
	xcall _twoparameter
	.dbline 210
;         writecode(0xb0); //数据自动写状态
	ldi R16,176
	xcall _writecode
	.dbline 211
;         for(j=column;j>0;j--) //共column列
	mov R12,R10
	xjmp L33
L30:
	.dbline 212
	.dbline 214
L31:
	.dbline 211
	dec R12
L33:
	.dbline 211
	clr R2
	cp R2,R12
	brlo L30
	.dbline 215
	ldi R16,178
	xcall _writecode
	.dbline 216
	subi R22,226  ; offset = 30
	sbci R23,255
	.dbline 217
L27:
	.dbline 207
	dec R20
L29:
	.dbline 207
	clr R2
	cp R2,R20
	brlo L26
	.dbline -2
L25:
	adiw R28,1
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r address 22 i
	.dbsym r j 12 c
	.dbsym r column 10 c
	.dbsym l line 9 c
	.dbsym r y 22 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e main _main fV
;          count -> R20
	.even
_main::
	sbiw R28,1
	.dbline -1
	.dbline 221
;         {
;         //writeauto(*ptr0); //自动写入数据
;         }
;         writecode(0xb2); //关闭自动写状态
;         address+=30; //修改显示存储器地址
;     }
; }
; 
; void main()
; {
	.dbline 223
;     unsigned char count;
;     DDRA|=0xff;
	in R24,0x1a
	ori R24,255
	out 0x1a,R24
	.dbline 224
;     DDRB|=0xff;
	in R24,0x17
	ori R24,255
	out 0x17,R24
	.dbline 225
;     PORTA|=0xff;
	in R24,0x1b
	ori R24,255
	out 0x1b,R24
	.dbline 226
;     PORTB|=0xff;
	in R24,0x18
	ori R24,255
	out 0x18,R24
	.dbline 227
;     lcd_init();
	xcall _lcd_init
	.dbline 228
;     lcd_clear();
	xcall _lcd_clear
	.dbline 229
;     twoparameter(0x00,0x14,ADPSET);
	ldi R24,36
	std y+0,R24
	ldi R18,20
	clr R16
	xcall _twoparameter
	.dbline 230
;     writecode(AWRON); //数据自动写状态
	ldi R16,176
	xcall _writecode
	.dbline 231
;     for(count=0;count<64;count++)//写入CG
	clr R20
	xjmp L38
L35:
	.dbline 232
	.dbline 233
	ldi R24,<_EXTCG
	ldi R25,>_EXTCG
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _writeauto
	.dbline 234
L36:
	.dbline 231
	inc R20
L38:
	.dbline 231
	cpi R20,64
	brlo L35
	.dbline 235
;     {
;         writeauto(EXTCG[count]);
;     }
;     writecode(AWROFF);
	ldi R16,178
	xcall _writecode
	.dbline 237
;     
;     twoparameter(0x40,0x00,ADPSET);
	ldi R24,36
	std y+0,R24
	clr R18
	ldi R16,64
	xcall _twoparameter
	.dbline 238
;     writecode(AWRON); //数据自动写状态
	ldi R16,176
	xcall _writecode
	.dbline 239
;     for(count=0;count<13;count++)//写入CG
	clr R20
	xjmp L42
L39:
	.dbline 240
	.dbline 241
	ldi R24,<_TXPRT
	ldi R25,>_TXPRT
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _writeauto
	.dbline 242
L40:
	.dbline 239
	inc R20
L42:
	.dbline 239
	cpi R20,13
	brlo L39
	.dbline 243
;     {
;         writeauto(TXPRT[count]);
;     }
;     writecode(AWROFF);
	ldi R16,178
	xcall _writecode
L43:
	.dbline 244
L44:
	.dbline 244
	xjmp L43
X1:
	.dbline -2
L34:
	adiw R28,1
	.dbline 0 ; func end
	ret
	.dbsym r count 20 c
	.dbend

⌨️ 快捷键说明

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