📄 +_-
字号:
00EC 89DF xcall _delay
00EE .dbline 100
00EE ; sendbyte12864(com<<4); //接写低四位
00EE 042F mov R16,R20
00F0 0F70 andi R16,#0x0F
00F2 0295 swap R16
00F4 CBDF xcall _sendbyte12864
00F6 .dbline 101
00F6 ; delay(2);
00F6 02E0 ldi R16,2
00F8 10E0 ldi R17,0
00FA 82DF xcall _delay
00FC .dbline -2
00FC L24:
00FC .dbline 0 ; func end
00FC 4991 ld R20,y+
00FE 0895 ret
0100 .dbsym r com 20 c
0100 .dbend
0100 .dbfunc e write_dat12864 _write_dat12864 fV
0100 ; dat -> R20
.even
0100 _write_dat12864::
0100 4A93 st -y,R20
0102 402F mov R20,R16
0104 .dbline -1
0104 .dbline 109
0104 ; //CLR_CS;
0104 ; }
0104 ; /****************************************************************
0104 ; 写字数据指令
0104 ; *****************************************************************/
0104 ;
0104 ; void write_dat12864(uchar dat)
0104 ; {
0104 .dbline 111
0104 ; //SET_CS;
0104 ; sendbyte12864(0xfa);
0104 0AEF ldi R16,250
0106 C2DF xcall _sendbyte12864
0108 .dbline 112
0108 ; delay(2);
0108 02E0 ldi R16,2
010A 10E0 ldi R17,0
010C 79DF xcall _delay
010E .dbline 113
010E ; sendbyte12864(dat&0xf0);
010E 042F mov R16,R20
0110 007F andi R16,240
0112 BCDF xcall _sendbyte12864
0114 .dbline 114
0114 ; delay(2);
0114 02E0 ldi R16,2
0116 10E0 ldi R17,0
0118 73DF xcall _delay
011A .dbline 115
011A ; sendbyte12864(dat<<4);
011A 042F mov R16,R20
011C 0F70 andi R16,#0x0F
011E 0295 swap R16
0120 B5DF xcall _sendbyte12864
0122 .dbline 116
0122 ; delay(2);
0122 02E0 ldi R16,2
0124 10E0 ldi R17,0
0126 6CDF xcall _delay
0128 .dbline -2
0128 L25:
0128 .dbline 0 ; func end
0128 4991 ld R20,y+
012A 0895 ret
012C .dbsym r dat 20 c
012C .dbend
012C .dbfunc e lcd_pos12864 _lcd_pos12864 fV
012C ; x -> R20
012C ; y -> R10
.even
012C _lcd_pos12864::
012C 0E940000 xcall push_xgsetF00C
0130 422F mov R20,R18
0132 A02E mov R10,R16
0134 .dbline -1
0134 .dbline 124
0134 ; //CLR_CS;
0134 ; }
0134 ; /****************************************************************
0134 ; 液晶定位函数
0134 ; *****************************************************************/
0134 ;
0134 ; void lcd_pos12864(uchar y,uchar x)
0134 ; {
0134 .dbline 125
0134 ; switch(y)
0134 6A2D mov R22,R10
0136 7727 clr R23
0138 6030 cpi R22,0
013A 6707 cpc R22,R23
013C 69F0 breq L30
013E X5:
013E 6130 cpi R22,1
0140 E0E0 ldi R30,0
0142 7E07 cpc R23,R30
0144 69F0 breq L31
0146 X6:
0146 6230 cpi R22,2
0148 E0E0 ldi R30,0
014A 7E07 cpc R23,R30
014C 69F0 breq L32
014E X7:
014E 6330 cpi R22,3
0150 E0E0 ldi R30,0
0152 7E07 cpc R23,R30
0154 69F0 breq L33
0156 X8:
0156 0FC0 xjmp L28
0158 L30:
0158 .dbline 127
0158 ; {
0158 ; case 0: write_com12864(0x80+x);break;
0158 042F mov R16,R20
015A 0058 subi R16,128 ; addi 128
015C BBDF xcall _write_com12864
015E .dbline 127
015E 0BC0 xjmp L28
0160 L31:
0160 .dbline 128
0160 ; case 1: write_com12864(0x90+x);break;
0160 042F mov R16,R20
0162 0057 subi R16,112 ; addi 144
0164 B7DF xcall _write_com12864
0166 .dbline 128
0166 07C0 xjmp L28
0168 L32:
0168 .dbline 129
0168 ; case 2: write_com12864(0x88+x);break;
0168 042F mov R16,R20
016A 0857 subi R16,120 ; addi 136
016C B3DF xcall _write_com12864
016E .dbline 129
016E 03C0 xjmp L28
0170 L33:
0170 .dbline 130
0170 ; case 3: write_com12864(0x98+x);break;
0170 042F mov R16,R20
0172 0856 subi R16,104 ; addi 152
0174 AFDF xcall _write_com12864
0176 .dbline 130
0176 .dbline 131
0176 ; default:break;
0176 L28:
0176 .dbline -2
0176 L26:
0176 .dbline 0 ; func end
0176 0C940000 xjmp pop_xgsetF00C
017A .dbsym r x 20 c
017A .dbsym r y 10 c
017A .dbend
017A .dbfunc e writeString12864 _writeString12864 fV
017A ; i -> R20
017A ; str -> R10,R11
.even
017A _writeString12864::
017A 0E940000 xcall push_xgset300C
017E 5801 movw R10,R16
0180 .dbline -1
0180 .dbline 139
0180 ; }
0180 ;
0180 ; }
0180 ; /****************************************************************
0180 ; 12864的写字符串函数
0180 ; *****************************************************************/
0180 ; void writeString12864(uchar * str)
0180 ; {
0180 .dbline 140
0180 ; uchar i = 0;
0180 4427 clr R20
0182 09C0 xjmp L36
0184 L35:
0184 .dbline 142
0184 ; while(str[i] != '\0')//判断是否是字符串结束符
0184 ; {
0184 .dbline 143
0184 ; write_dat12864(str[i++]);
0184 242E mov R2,R20
0186 3324 clr R3
0188 4F5F subi R20,255 ; addi 1
018A E22D mov R30,R2
018C FF27 clr R31
018E EA0D add R30,R10
0190 FB1D adc R31,R11
0192 0081 ldd R16,z+0
0194 B5DF xcall _write_dat12864
0196 .dbline 144
0196 ; }
0196 L36:
0196 .dbline 141
0196 E42F mov R30,R20
0198 FF27 clr R31
019A EA0D add R30,R10
019C FB1D adc R31,R11
019E 2080 ldd R2,z+0
01A0 2220 tst R2
01A2 81F7 brne L35
01A4 X9:
01A4 .dbline -2
01A4 L34:
01A4 .dbline 0 ; func end
01A4 0C940000 xjmp pop_xgset300C
01A8 .dbsym r i 20 c
01A8 .dbsym r str 10 pc
01A8 .dbend
01A8 .dbfunc e drawpic12864 _drawpic12864 fV
01A8 ; k -> <dead>
01A8 ; i -> R20
01A8 ; j -> R22
01A8 ; p -> R10,R11
.even
01A8 _drawpic12864::
01A8 0E940000 xcall push_xgsetF00C
01AC 5801 movw R10,R16
01AE .dbline -1
01AE .dbline 150
01AE ; }
01AE ; /****************************************************************
01AE ; 画图函数 逐行,顺向,8*16
01AE ; ****************************************************************/
01AE ; void drawpic12864(const uchar *p)
01AE ; {
01AE .dbline 152
01AE ; uchar i, j, k ;
01AE ; write_com12864(0x36); //扩充指令集动作
01AE 06E3 ldi R16,54
01B0 91DF xcall _write_com12864
01B2 .dbline 153
01B2 ; delay(2);
01B2 02E0 ldi R16,2
01B4 10E0 ldi R17,0
01B6 24DF xcall _delay
01B8 .dbline 154
01B8 ; write_com12864(0x36);
01B8 06E3 ldi R16,54
01BA 8CDF xcall _write_com12864
01BC .dbline 155
01BC ; delay(2);
01BC 02E0 ldi R16,2
01BE 10E0 ldi R17,0
01C0 1FDF xcall _delay
01C2 .dbline 156
01C2 ; write_com12864(0x3e); //找开绘图显示功能
01C2 0EE3 ldi R16,62
01C4 87DF xcall _write_com12864
01C6 .dbline 157
01C6 ; delay(2);
01C6 02E0 ldi R16,2
01C8 10E0 ldi R17,0
01CA 1ADF xcall _delay
01CC .dbline 158
01CC ; write_com12864(0x01); //清屏
01CC 01E0 ldi R16,1
01CE 82DF xcall _write_com12864
01D0 .dbline 159
01D0 ; for(i=0;i<32;i++) //画上半屏 32行点阵
01D0 4427 clr R20
01D2 0FC0 xjmp L42
01D4 L39:
01D4 .dbline 160
01D4 ; {
01D4 .dbline 161
01D4 ; write_com12864(0x80+i); //设定 DDRAM 位址到位址计数器(AC) 写每行点阵都要先写这个指令
01D4 042F mov R16,R20
01D6 0058 subi R16,128 ; addi 128
01D8 7DDF xcall _write_com12864
01DA .dbline 162
01DA ; write_com12864(0x80);
01DA 00E8 ldi R16,128
01DC 7BDF xcall _write_com12864
01DE .dbline 163
01DE ; for(j=0;j<16;j++) //每个字节8个点 16*8=128个点 所以上面画了128*32个点
01DE 6627 clr R22
01E0 05C0 xjmp L46
01E2 L43:
01E2 .dbline 164
01E2 ; {
01E2 .dbline 165
01E2 ; write_dat12864(*p++);
01E2 F501 movw R30,R10
01E4 0191 ld R16,Z+
01E6 5F01 movw R10,R30
01E8 8BDF xcall _write_dat12864
01EA .dbline 166
01EA ; }
01EA L44:
01EA .dbline 163
01EA 6395 inc R22
01EC L46:
01EC .dbline 163
01EC 6031 cpi R22,16
01EE C8F3 brlo L43
01F0 X10:
01F0 .dbline 167
01F0 ; }
01F0 L40:
01F0 .dbline 159
01F0 4395 inc R20
01F2 L42:
01F2 .dbline 159
01F2 4032 cpi R20,32
01F4 78F3 brlo L39
01F6 X11:
01F6 .dbline 168
01F6 ; for(i=0;i<32;i++) //画下半屏
01F6 4427 clr R20
01F8 0FC0 xjmp L50
01FA L47:
01FA .dbline 169
01FA ; {
01FA .dbline 170
01FA ; write_com12864(0x80+i);
01FA 042F mov R16,R20
01FC 0058 subi R16,128 ; addi 128
01FE 6ADF xcall _write_com12864
0200 .dbline 171
0200 ; write_com12864(0x88);
0200 08E8 ldi R16,136
0202 68DF xcall _write_com12864
0204 .dbline 172
0204 ; for(j=0;j<16;j++)
0204 6627 clr R22
0206 05C0 xjmp L54
0208 L51:
0208 .dbline 173
0208 ; {
0208 .dbline 174
0208 ; write_dat12864(*p++);
0208 F501 movw R30,R10
020A 0191 ld R16,Z+
020C 5F01 movw R10,R30
020E 78DF xcall _write_dat12864
0210 .dbline 175
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -