📄 yj12864.lis
字号:
010E .dbend
010E .dbfunc e LCD12864_sendstr _LCD12864_sendstr fV
010E ; ptString -> R20,R21
.even
010E _LCD12864_sendstr::
010E 0E940000 xcall push_gset1
0112 A801 movw R20,R16
0114 .dbline -1
0114 .dbline 143
0114 ; /*******************************************
0114 ; 函数名称: LCD12864_sendstr
0114 ; 功 能: 向12864液晶写入一个字符串
0114 ; 参 数: ptString--字符串指针
0114 ; 返回值 : 无
0114 ; /********************************************/
0114 ; void LCD12864_sendstr(uchar *ptString)
0114 ; {
0114 05C0 xjmp L25
0116 L24:
0116 .dbline 145
0116 .dbline 146
0116 FA01 movw R30,R20
0118 2191 ld R18,Z+
011A AF01 movw R20,R30
011C 01E0 ldi R16,1
011E E4DF xcall _LCD12864_sendbyte
0120 .dbline 147
0120 L25:
0120 .dbline 144
0120 ; while((*ptString)!='\0') //字符串未结束一直写
0120 FA01 movw R30,R20
0122 2080 ldd R2,z+0
0124 2220 tst R2
0126 B9F7 brne L24
0128 .dbline -2
0128 .dbline 148
0128 ; {
0128 ; LCD12864_sendbyte(iDat, *ptString++);
0128 ; }
0128 ; }
0128 L23:
0128 0E940000 xcall pop_gset1
012C .dbline 0 ; func end
012C 0895 ret
012E .dbsym r ptString 20 pc
012E .dbend
012E .dbfunc e LCD12864_clear _LCD12864_clear fV
.even
012E _LCD12864_clear::
012E .dbline -1
012E .dbline 156
012E ; /*******************************************
012E ; 函数名称: LCD12864_clear
012E ; 功 能: 12864液晶清屏
012E ; 参 数: 无
012E ; 返回值 : 无
012E ; /********************************************/
012E ; void LCD12864_clear(void)
012E ; {
012E .dbline 157
012E ; LCD12864_sendbyte(iCmd,LCDb_CLS);
012E 21E0 ldi R18,1
0130 0027 clr R16
0132 DADF xcall _LCD12864_sendbyte
0134 .dbline 158
0134 ; Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
0134 02E0 ldi R16,2
0136 10E0 ldi R17,0
0138 .dbline -2
0138 .dbline 159
0138 ; }
0138 L27:
0138 .dbline 0 ; func end
0138 7BCF xjmp _Delayms
013A .dbend
013A .dbfunc e LCD12864_readBF _LCD12864_readBF fc
013A ; busy -> R20
.even
013A _LCD12864_readBF::
013A 0E940000 xcall push_gset1
013E .dbline -1
013E .dbline 167
013E ; /*******************************************
013E ; 函数名称: LCD12864_readBF
013E ; 功 能: 12864液晶清屏
013E ; 参 数: 无
013E ; 返回值 : busy--为1时忙,为0时可以接收指令
013E ; /********************************************/
013E ; uchar LCD12864_readBF(void)
013E ; {
013E .dbline 169
013E ; uchar busy;
013E ; busy=LCD12864_readbyte(iCmd); //读回BF标志和地址
013E 0027 clr R16
0140 BBDF xcall _LCD12864_readbyte
0142 402F mov R20,R16
0144 .dbline 170
0144 ; if(busy&0x80) //如果忙,返回忙状态
0144 07FF sbrs R16,7
0146 02C0 rjmp L29
0148 .dbline 171
0148 ; busy=1;
0148 41E0 ldi R20,1
014A 01C0 xjmp L30
014C L29:
014C .dbline 173
014C ; else //不忙,可以写入
014C ; busy=0;
014C 4427 clr R20
014E L30:
014E .dbline 174
014E ; return busy;
014E 042F mov R16,R20
0150 .dbline -2
0150 L28:
0150 0E940000 xcall pop_gset1
0154 .dbline 0 ; func end
0154 0895 ret
0156 .dbsym r busy 20 c
0156 .dbend
0156 .dbfunc e LCD12864_gotoXY _LCD12864_gotoXY fV
0156 ; Col -> R20
0156 ; Row -> R22
.even
0156 _LCD12864_gotoXY::
0156 0E940000 xcall push_gset2
015A 422F mov R20,R18
015C 602F mov R22,R16
015E .dbline -1
015E .dbline 184
015E ; }
015E ; /*******************************************
015E ; 函数名称: LCD12864_gotoXY
015E ; 功 能: 移动到指定位置
015E ; 参 数: Row--指定的行
015E ; Col--指定的列
015E ; 返回值 : 无
015E ; /********************************************/
015E ; void LCD12864_gotoXY(uchar Row, uchar Col)
015E ; {
015E .dbline 185
015E ; switch (Row) //选择行
015E 7727 clr R23
0160 6230 cpi R22,2
0162 E0E0 ldi R30,0
0164 7E07 cpc R23,R30
0166 49F0 breq L35
0168 6330 cpi R22,3
016A E0E0 ldi R30,0
016C 7E07 cpc R23,R30
016E 51F0 breq L36
0170 6430 cpi R22,4
0172 E0E0 ldi R30,0
0174 7E07 cpc R23,R30
0176 59F0 breq L37
0178 0FC0 xjmp L32
017A X0:
017A .dbline 186
017A ; {
017A L35:
017A .dbline 188
017A ; case 2:
017A ; LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列
017A 242F mov R18,R20
017C 2057 subi R18,112 ; addi 144
017E 0027 clr R16
0180 B3DF xcall _LCD12864_sendbyte
0182 .dbline 188
0182 0EC0 xjmp L33
0184 L36:
0184 .dbline 190
0184 ; case 3:
0184 ; LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列
0184 242F mov R18,R20
0186 2857 subi R18,120 ; addi 136
0188 0027 clr R16
018A AEDF xcall _LCD12864_sendbyte
018C .dbline 190
018C 09C0 xjmp L33
018E L37:
018E .dbline 192
018E ; case 4:
018E ; LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列
018E 242F mov R18,R20
0190 2856 subi R18,104 ; addi 152
0192 0027 clr R16
0194 A9DF xcall _LCD12864_sendbyte
0196 .dbline 192
0196 04C0 xjmp L33
0198 L32:
0198 .dbline 194
0198 242F mov R18,R20
019A 2058 subi R18,128 ; addi 128
019C 0027 clr R16
019E A4DF xcall _LCD12864_sendbyte
01A0 .dbline 194
01A0 L33:
01A0 .dbline -2
01A0 .dbline 196
01A0 ; default:
01A0 ; LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列
01A0 ; }
01A0 ; }
01A0 L31:
01A0 0E940000 xcall pop_gset2
01A4 .dbline 0 ; func end
01A4 0895 ret
01A6 .dbsym r Col 20 c
01A6 .dbsym r Row 22 c
01A6 .dbend
01A6 .dbfunc e LCD12864_initial _LCD12864_initial fV
.even
01A6 _LCD12864_initial::
01A6 .dbline -1
01A6 .dbline 204
01A6 ; /*******************************************
01A6 ; 函数名称: LCD12864_initial
01A6 ; 功 能: 12864液晶初始化
01A6 ; 参 数: 无
01A6 ; 返回值 : 无
01A6 ; /********************************************/
01A6 ; void LCD12864_initial(void)
01A6 ; {
01A6 .dbline 205
01A6 ; Delayms(100); // 等待内部复位
01A6 04E6 ldi R16,100
01A8 10E0 ldi R17,0
01AA 42DF xcall _Delayms
01AC .dbline 206
01AC ; LCD12864_portini(); //端口初始化
01AC 7DDF xcall _LCD12864_portini
01AE .dbline 208
01AE ;
01AE ; LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定
01AE 28E3 ldi R18,56
01B0 0027 clr R16
01B2 9ADF xcall _LCD12864_sendbyte
01B4 L39:
01B4 .dbline 209
01B4 L40:
01B4 .dbline 209
01B4 ; while(LCD12864_readBF());
01B4 C2DF xcall _LCD12864_readBF
01B6 0023 tst R16
01B8 E9F7 brne L39
01BA .dbline 210
01BA ; LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示
01BA 2CE0 ldi R18,12
01BC 0027 clr R16
01BE 94DF xcall _LCD12864_sendbyte
01C0 L42:
01C0 .dbline 211
01C0 L43:
01C0 .dbline 211
01C0 ; while(LCD12864_readBF());
01C0 BCDF xcall _LCD12864_readBF
01C2 0023 tst R16
01C4 E9F7 brne L42
01C6 .dbline 212
01C6 ; LCD12864_clear(); //清屏
01C6 B3DF xcall _LCD12864_clear
01C8 L45:
01C8 .dbline 213
01C8 L46:
01C8 .dbline 213
01C8 ; while(LCD12864_readBF());
01C8 B8DF xcall _LCD12864_readBF
01CA 0023 tst R16
01CC E9F7 brne L45
01CE .dbline 214
01CE ; LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定
01CE 26E0 ldi R18,6
01D0 0027 clr R16
01D2 .dbline -2
01D2 .dbline 215
01D2 ; }
01D2 L38:
01D2 .dbline 0 ; func end
01D2 8ACF xjmp _LCD12864_sendbyte
01D4 .dbend
01D4 .dbfunc e LCD12864_opGDRAM _LCD12864_opGDRAM fV
01D4 ; i -> R20
01D4 ; x -> R22,R23
01D4 ; j -> R10
01D4 ; ptGDRAM -> R12,R13
.even
01D4 _LCD12864_opGDRAM::
01D4 0E940000 xcall push_gset4
01D8 6801 movw R12,R16
01DA .dbline -1
01DA .dbline 223
01DA ; /*******************************************
01DA ; 函数名称: LCD12864_opGDRAM
01DA ; 功 能: 向GDRAM写入数据,并显示(完成绘图功能)
01DA ; 参 数: ptGDRAM--GDRAM数据指针
01DA ; 返回值 : 无
01DA ; /********************************************/
01DA ; void LCD12864_opGDRAM(const uchar *ptGDRAM)
01DA ; {
01DA .dbline 225
01DA ; uchar i,j;
01DA ; uint x=0;
01DA 6627 clr R22
01DC 7727 clr R23
01DE L49:
01DE .dbline 226
01DE L50:
01DE .dbline 226
01DE ; while(LCD12864_readBF()); //读忙标志
01DE ADDF xcall _LCD12864_readBF
01E0 0023 tst R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -