📄 12864.s
字号:
.even
_LCD12864_gotoXY::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 127
; }
; /*******************************************
; 函数名称: LCD12864_gotoXY
; 功 能: 移动到指定位置
; 参 数: Row--指定的行
; Col--指定的列
; 返回值 : 无
; /********************************************/
; void LCD12864_gotoXY(uchar Row, uchar Col)
; {
.dbline 128
; switch (Row) //选择行
clr R23
cpi R22,2
ldi R30,0
cpc R23,R30
breq L34
cpi R22,3
ldi R30,0
cpc R23,R30
breq L35
cpi R22,4
ldi R30,0
cpc R23,R30
breq L36
xjmp L31
X0:
.dbline 129
; {
L34:
.dbline 131
; case 2:
; LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列
mov R18,R20
subi R18,112 ; addi 144
clr R16
xcall _LCD12864_sendbyte
.dbline 131
xjmp L32
L35:
.dbline 133
; case 3:
; LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列
mov R18,R20
subi R18,120 ; addi 136
clr R16
xcall _LCD12864_sendbyte
.dbline 133
xjmp L32
L36:
.dbline 135
; case 4:
; LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列
mov R18,R20
subi R18,104 ; addi 152
clr R16
xcall _LCD12864_sendbyte
.dbline 135
xjmp L32
L31:
.dbline 137
mov R18,R20
subi R18,128 ; addi 128
clr R16
xcall _LCD12864_sendbyte
.dbline 137
L32:
.dbline -2
L30:
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 147
; default:
; LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列
; }
; }
; /*******************************************
; 函数名称: LCD12864_initial
; 功 能: 12864液晶初始化
; 参 数: 无
; 返回值 : 无
; /********************************************/
; void LCD12864_initial(void)
; {
.dbline 148
; Delayms(100); // 等待内部复位
ldi R16,100
ldi R17,0
xcall _Delayms
.dbline 149
; LCD12864_portini(); //端口初始化
xcall _LCD12864_portini
.dbline 151
;
; LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定
ldi R18,56
clr R16
xcall _LCD12864_sendbyte
L38:
.dbline 152
L39:
.dbline 152
; while(LCD12864_readBF());
xcall _LCD12864_readBF
tst R16
brne L38
.dbline 153
; LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示
ldi R18,12
clr R16
xcall _LCD12864_sendbyte
L41:
.dbline 154
L42:
.dbline 154
; while(LCD12864_readBF());
xcall _LCD12864_readBF
tst R16
brne L41
.dbline 155
; LCD12864_clear(); //清屏
xcall _LCD12864_clear
L44:
.dbline 156
L45:
.dbline 156
; while(LCD12864_readBF());
xcall _LCD12864_readBF
tst R16
brne L44
.dbline 157
; LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定
ldi R18,6
clr R16
xcall _LCD12864_sendbyte
.dbline -2
L37:
.dbline 0 ; func end
ret
.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 166
; }
; /*******************************************
; 函数名称: LCD12864_opGDRAM
; 功 能: 向GDRAM写入数据,并显示(完成绘图功能)
; 参 数: ptGDRAM--GDRAM数据指针
; 返回值 : 无
; /********************************************/
; void LCD12864_opGDRAM(const uchar *ptGDRAM)
; {
.dbline 168
; uchar i,j;
; uint x=0;
clr R22
clr R23
L48:
.dbline 169
L49:
.dbline 169
; while(LCD12864_readBF()); //读忙标志
xcall _LCD12864_readBF
tst R16
brne L48
.dbline 170
; LCD12864_sendbyte(iCmd,LCDb_EXTCMD1); //扩充指令集,并关闭绘图显示
ldi R18,52
clr R16
xcall _LCD12864_sendbyte
.dbline 172
; //写入并显示上半屏幕
; for(i=0;i<32;i++) //行地址计数
clr R20
xjmp L54
L51:
.dbline 173
; {
.dbline 174
; for(j=0;j<8;j++) //列地址计数
clr R10
xjmp L58
L55:
.dbline 175
.dbline 176
mov R18,R20
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 177
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 178
mov R18,R10
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 179
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 180
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 181
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 182
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 183
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 184
L56:
.dbline 174
inc R10
L58:
.dbline 174
mov R24,R10
cpi R24,8
brlo L55
.dbline 185
L52:
.dbline 172
inc R20
L54:
.dbline 172
cpi R20,32
brsh X1
xjmp L51
X1:
.dbline 187
; {
; 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 L62
L59:
.dbline 188
; {
.dbline 189
; for(j=8;j<16;j++)
ldi R24,8
mov R10,R24
xjmp L66
L63:
.dbline 190
.dbline 191
mov R18,R20
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 192
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 193
mov R18,R10
ori R18,128
clr R16
xcall _LCD12864_sendbyte
.dbline 194
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 195
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 196
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 197
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 198
ldi R16,10
ldi R17,0
xcall _Delayus
.dbline 199
L64:
.dbline 189
inc R10
L66:
.dbline 189
mov R24,R10
cpi R24,16
brlo L63
.dbline 200
L60:
.dbline 187
inc R20
L62:
.dbline 187
cpi R20,32
brsh X2
xjmp L59
X2:
.dbline 201
; {
; 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 202
; LCD12864_sendbyte(iCmd,LCDb_EXTCMD2); //打开绘图显示
ldi R18,54
clr R16
xcall _LCD12864_sendbyte
.dbline 203
; LCD12864_sendbyte(iCmd,LCDb_BASCMD); //还原回基本指令集模式
ldi R18,48
clr R16
xcall _LCD12864_sendbyte
.dbline -2
L47:
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 pkc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -