📄 ylf240128a-3.s
字号:
; 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 + -