📄 yj12864.s
字号:
; 功 能: 移动到指定位置
; 参 数: Row--指定的行
; Col--指定的列
; 返回值 : 无
; /********************************************/
; void LCD12864_gotoXY(uchar Row, uchar Col)
; {
.dbline 185
; switch (Row) //选择行
clr R23
cpi R22,2
ldi R30,0
cpc R23,R30
breq L35
cpi R22,3
ldi R30,0
cpc R23,R30
breq L36
cpi R22,4
ldi R30,0
cpc R23,R30
breq L37
xjmp L32
X0:
.dbline 186
; {
L35:
.dbline 188
; case 2:
; LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列
mov R18,R20
subi R18,112 ; addi 144
clr R16
xcall _LCD12864_sendbyte
.dbline 188
xjmp L33
L36:
.dbline 190
; case 3:
; LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列
mov R18,R20
subi R18,120 ; addi 136
clr R16
xcall _LCD12864_sendbyte
.dbline 190
xjmp L33
L37:
.dbline 192
; case 4:
; LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列
mov R18,R20
subi R18,104 ; addi 152
clr R16
xcall _LCD12864_sendbyte
.dbline 192
xjmp L33
L32:
.dbline 194
mov R18,R20
subi R18,128 ; addi 128
clr R16
xcall _LCD12864_sendbyte
.dbline 194
L33:
.dbline -2
.dbline 196
; default:
; LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列
; }
; }
L31:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Col 20 c
.dbsym r Row 22 c
.dbend
.dbfunc e LCD12864_initial _LCD12864_initial fV
.even
_LCD12864_initial::
.dbline -1
.dbline 204
; /*******************************************
; 函数名称: LCD12864_initial
; 功 能: 12864液晶初始化
; 参 数: 无
; 返回值 : 无
; /********************************************/
; void LCD12864_initial(void)
; {
.dbline 205
; Delayms(100); // 等待内部复位
ldi R16,100
ldi R17,0
xcall _Delayms
.dbline 206
; LCD12864_portini(); //端口初始化
xcall _LCD12864_portini
.dbline 208
;
; LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定
ldi R18,56
clr R16
xcall _LCD12864_sendbyte
L39:
.dbline 209
L40:
.dbline 209
; while(LCD12864_readBF());
xcall _LCD12864_readBF
tst R16
brne L39
.dbline 210
; LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示
ldi R18,12
clr R16
xcall _LCD12864_sendbyte
L42:
.dbline 211
L43:
.dbline 211
; while(LCD12864_readBF());
xcall _LCD12864_readBF
tst R16
brne L42
.dbline 212
; LCD12864_clear(); //清屏
xcall _LCD12864_clear
L45:
.dbline 213
L46:
.dbline 213
; while(LCD12864_readBF());
xcall _LCD12864_readBF
tst R16
brne L45
.dbline 214
; LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定
ldi R18,6
clr R16
.dbline -2
.dbline 215
; }
L38:
.dbline 0 ; func end
xjmp _LCD12864_sendbyte
.dbend
.dbfunc e LCD12864_opGDRAM _LCD12864_opGDRAM fV
; i -> R20
; x -> R22,R23
; j -> R10
; ptGDRAM -> R12,R13
.even
_LCD12864_opGDRAM::
xcall push_gset4
movw R12,R16
.dbline -1
.dbline 223
; /*******************************************
; 函数名称: LCD12864_opGDRAM
; 功 能: 向GDRAM写入数据,并显示(完成绘图功能)
; 参 数: ptGDRAM--GDRAM数据指针
; 返回值 : 无
; /********************************************/
; void LCD12864_opGDRAM(const uchar *ptGDRAM)
; {
.dbline 225
; uchar i,j;
; uint x=0;
clr R22
clr R23
L49:
.dbline 226
L50:
.dbline 226
; while(LCD12864_readBF()); //读忙标志
xcall _LCD12864_readBF
tst R16
brne L49
.dbline 227
; LCD12864_sendbyte(iCmd,LCDb_EXTCMD1); //扩充指令集,并关闭绘图显示
ldi R18,52
clr R16
xcall _LCD12864_sendbyte
.dbline 229
; //写入并显示上半屏幕
; for(i=0;i<32;i++) //行地址计数
clr R20
xjmp L55
L52:
.dbline 230
; {
.dbline 231
; for(j=0;j<8;j++) //列地址计数
clr R10
xjmp L59
L56:
.dbline 232
.dbline 233
mov R18,R20
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 234
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 235
mov R18,R10
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 236
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 237
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
add R30,R12
adc R31,R13
lpm R18,Z
ldi R16,1
xcall _LCD12864_sendbyte
.dbline 238
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 239
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
add R30,R12
adc R31,R13
lpm R18,Z
ldi R16,1
xcall _LCD12864_sendbyte
.dbline 240
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 241
L57:
.dbline 231
inc R10
L59:
.dbline 231
mov R24,R10
cpi R24,8
brlo L56
.dbline 242
L53:
.dbline 229
inc R20
L55:
.dbline 229
cpi R20,32
brsh X1
xjmp L52
X1:
.dbline 244
; {
; LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
; Delayus(10);
; LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
; Delayus(10);
; LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据
; Delayus(10);
; LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
; Delayus(10);
; }
; }
; //写入并显示下半屏幕
; for(i=0;i<32;i++)
clr R20
xjmp L63
L60:
.dbline 245
; {
.dbline 246
; for(j=8;j<16;j++)
ldi R24,8
mov R10,R24
xjmp L67
L64:
.dbline 247
.dbline 248
mov R18,R20
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 249
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 250
mov R18,R10
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 251
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 252
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
add R30,R12
adc R31,R13
lpm R18,Z
ldi R16,1
xcall _LCD12864_sendbyte
.dbline 253
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 254
movw R2,R22
subi R22,255 ; offset = 1
sbci R23,255
movw R30,R2
add R30,R12
adc R31,R13
lpm R18,Z
ldi R16,1
xcall _LCD12864_sendbyte
.dbline 255
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 256
L65:
.dbline 246
inc R10
L67:
.dbline 246
mov R24,R10
cpi R24,16
brlo L64
.dbline 257
L61:
.dbline 244
inc R20
L63:
.dbline 244
cpi R20,32
brsh X2
xjmp L60
X2:
.dbline 258
; {
; LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
; Delayus(10);
; LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
; Delayus(10);
; LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据
; Delayus(10);
; LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
; Delayus(10);
; }
; }
; Delayus(10);
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 259
; LCD12864_sendbyte(iCmd,LCDb_EXTCMD2); //打开绘图显示
ldi R18,54
clr R16
xcall _LCD12864_sendbyte
.dbline 260
; LCD12864_sendbyte(iCmd,LCDb_BASCMD); //还原回基本指令集模式
ldi R18,48
clr R16
xcall _LCD12864_sendbyte
.dbline -2
.dbline 261
; }
L48:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r x 22 i
.dbsym r j 10 c
.dbsym r ptGDRAM 12 pc
.dbend
.dbfunc e main _main fV
; i -> <dead>
.even
_main::
.dbline -1
.dbline 270
;
; /*******************************************
; 函数名称: main
; 功 能: 12864液晶驱动主程序
; 参 数: 无
; 返回值 : 无
; /********************************************/
; void main(void)
; {
.dbline 272
; uchar i;
; Board_init( ); //初始化开发板
xcall _Board_init
.dbline 273
; LCD12864_initial(); //初始化12864液晶
xcall _LCD12864_initial
xjmp L70
L69:
.dbline 276
;
; while(1)
; {
.dbline 277
; LCD12864_clear();
xcall _LCD12864_clear
L72:
.dbline 278
L73:
.dbline 278
xcall _LCD12864_readBF
tst R16
brne L72
.dbline 279
clr R18
ldi R16,1
xcall _LCD12864_gotoXY
.dbline 280
ldi R16,<L75
ldi R17,>L75
xcall _LCD12864_sendstr
.dbline 281
ldi R18,2
ldi R16,2
xcall _LCD12864_gotoXY
.dbline 282
ldi R16,<L76
ldi R17,>L76
xcall _LCD12864_sendstr
.dbline 283
clr R18
ldi R16,3
xcall _LCD12864_gotoXY
.dbline 284
ldi R16,<L77
ldi R17,>L77
xcall _LCD12864_sendstr
.dbline 285
ldi R18,1
ldi R16,4
xcall _LCD12864_gotoXY
.dbline 286
ldi R16,<L78
ldi R17,>L78
xcall _LCD12864_sendstr
.dbline 287
ldi R16,2000
ldi R17,7
xcall _Delayms
.dbline 289
xcall _LCD12864_clear
.dbline 290
ldi R16,<_GDRAM
ldi R17,>_GDRAM
xcall _LCD12864_opGDRAM
.dbline 291
ldi R16,2000
ldi R17,7
xcall _Delayms
.dbline 292
L70:
.dbline 275
xjmp L69
X3:
.dbline -2
.dbline 293
; while(LCD12864_readBF());
; LCD12864_gotoXY(1,0); //第1行,第1列显示
; LCD12864_sendstr("AVR_PQ1A 开发板");
; LCD12864_gotoXY(2,2); //第2行,第3列显示
; LCD12864_sendstr("皮球制作");
; LCD12864_gotoXY(3,0); //第3行,第1列显示
; LCD12864_sendstr("电话:13212800564");
; LCD12864_gotoXY(4,1); //第4行,第2列显示
; LCD12864_sendstr("www.txmcu.com ");
; Delayms(2000); //延时等待
;
; LCD12864_clear(); //清屏幕
; LCD12864_opGDRAM(GDRAM); //完成绘图,绘图后返回基本指令集模式
; Delayms(2000);
; }
; }
L68:
.dbline 0 ; func end
ret
.dbsym l i 1 c
.dbend
.area data(ram, con, rel)
.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\4_12864\YJ12864.C
L78:
.blkb 15
.area idata
.byte 'w,'w,'w,46,'t,'x,'m,'c,'u,46,'c,'o,'m,32,0
.area data(ram, con, rel)
.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\4_12864\YJ12864.C
L77:
.blkb 17
.area idata
.byte 181,231,187,176,58,49,51,50,49,50,56,48,48,53,54,52
.byte 0
.area data(ram, con, rel)
.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\4_12864\YJ12864.C
L76:
.blkb 9
.area idata
.byte 198,164,199,242,214,198,215,247,0
.area data(ram, con, rel)
.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\4_12864\YJ12864.C
L75:
.blkb 17
.area idata
.byte 'A,'V,'R,95,'P,'Q,49,'A,32,32,191,170,183,162,176,229
.byte 0
.area data(ram, con, rel)
.dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\4_12864\YJ12864.C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -