lcd12864.lst
来自「atmega128串行操作lcd12864」· LST 代码 · 共 771 行 · 第 1/2 页
LST
771 行
0013D 9A15 SBI 0x02,5
0013E 981D CBI 0x03,5
(0109) if(date&0x80)
0013F FF47 SBRS R20,7
00140 C003 RJMP 0x0144
(0110) {SID_SET;}
00141 9A14 SBI 0x02,4
00142 9A1C SBI 0x03,4
00143 C002 RJMP 0x0146
(0111) else
(0112) {SID_CLE;}
00144 9A14 SBI 0x02,4
00145 981C CBI 0x03,4
(0113) delay_us(1);
00146 E001 LDI R16,1
00147 E010 LDI R17,0
00148 DF5E RCALL _delay_us
(0114) SCLK_SET;//时钟总线拉高,数据传送给显示屏
00149 9A15 SBI 0x02,5
0014A 9A1D SBI 0x03,5
(0115) delay_us(10);
0014B E00A LDI R16,0xA
0014C E010 LDI R17,0
0014D DF59 RCALL _delay_us
(0116) SCLK_CLE;
0014E 9A15 SBI 0x02,5
0014F 981D CBI 0x03,5
(0117) delay_us(3);
00150 E003 LDI R16,3
00151 E010 LDI R17,0
00152 DF54 RCALL _delay_us
(0118) date=date<<1;//高位先发
00153 0F44 LSL R20
00154 9563 INC R22
00155 3068 CPI R22,0x8
00156 F330 BCS 0x013D
(0119) }
(0120) date=dat&0xf0;
00157 2D4A MOV R20,R10
00158 7F40 ANDI R20,0xF0
(0121) for(i=0;i<8;i++)//把数据送到线上去
00159 2766 CLR R22
0015A C018 RJMP 0x0173
(0122) {
(0123) SCLK_CLE;
0015B 9A15 SBI 0x02,5
0015C 981D CBI 0x03,5
(0124) if(date&0x80)
0015D FF47 SBRS R20,7
0015E C003 RJMP 0x0162
(0125) {SID_SET;}
0015F 9A14 SBI 0x02,4
00160 9A1C SBI 0x03,4
00161 C002 RJMP 0x0164
(0126) else
(0127) {SID_CLE;}
00162 9A14 SBI 0x02,4
00163 981C CBI 0x03,4
(0128) delay_us(1);
00164 E001 LDI R16,1
00165 E010 LDI R17,0
00166 DF40 RCALL _delay_us
(0129) SCLK_SET;//时钟总线拉高,数据传送给显示屏
00167 9A15 SBI 0x02,5
00168 9A1D SBI 0x03,5
(0130) delay_us(3);
00169 E003 LDI R16,3
0016A E010 LDI R17,0
0016B DF3B RCALL _delay_us
(0131) SCLK_CLE;
0016C 9A15 SBI 0x02,5
0016D 981D CBI 0x03,5
(0132) delay_us(3);
0016E E003 LDI R16,3
0016F E010 LDI R17,0
00170 DF36 RCALL _delay_us
(0133) date=date<<1;//高位先发
00171 0F44 LSL R20
00172 9563 INC R22
00173 3068 CPI R22,0x8
00174 F330 BCS 0x015B
(0134) }
(0135) date=dat<<4;
00175 2D4A MOV R20,R10
00176 704F ANDI R20,0xF
00177 9542 SWAP R20
(0136) for(i=0;i<8;i++)//把数据送到线上去
00178 2766 CLR R22
00179 C018 RJMP 0x0192
(0137) { SCLK_CLE;
0017A 9A15 SBI 0x02,5
0017B 981D CBI 0x03,5
(0138) if(date&0x80)
0017C FF47 SBRS R20,7
0017D C003 RJMP 0x0181
(0139) {SID_SET;}
0017E 9A14 SBI 0x02,4
0017F 9A1C SBI 0x03,4
00180 C002 RJMP 0x0183
(0140) else
(0141) {SID_CLE;}
00181 9A14 SBI 0x02,4
00182 981C CBI 0x03,4
(0142) delay_us(1);
00183 E001 LDI R16,1
00184 E010 LDI R17,0
00185 DF21 RCALL _delay_us
(0143) SCLK_SET;//时钟总线拉高,数据传送给显示屏
00186 9A15 SBI 0x02,5
00187 9A1D SBI 0x03,5
(0144) delay_us(10);
00188 E00A LDI R16,0xA
00189 E010 LDI R17,0
0018A DF1C RCALL _delay_us
(0145) SCLK_CLE;
0018B 9A15 SBI 0x02,5
0018C 981D CBI 0x03,5
(0146) delay_us(3);
0018D E003 LDI R16,3
0018E E010 LDI R17,0
0018F DF17 RCALL _delay_us
(0147) date=date<<1;//高位先发
00190 0F44 LSL R20
00191 9563 INC R22
00192 3068 CPI R22,0x8
00193 F330 BCS 0x017A
(0148) }
(0149) CS_CLE;
00194 9A13 SBI 0x02,3
00195 981B CBI 0x03,3
(0150) delay_us(15);
00196 E00F LDI R16,0xF
00197 E010 LDI R17,0
00198 DF0E RCALL _delay_us
00199 940C 0236 JMP pop_xgsetF00C
_Lcd_putsachar:
dat --> R10
y --> R20
x --> R12
0019B 940E 023D CALL push_xgsetF03C
0019D 2F42 MOV R20,R18
0019E 2EC0 MOV R12,R16
0019F 84A8 LDD R10,Y+8
(0151) }
(0152)
(0153) //在指定的位置显示一个字母
(0154) void Lcd_putsachar(unsigned char x,unsigned char y,unsigned char dat)
(0155) {
(0156) switch(x)
001A0 2D6C MOV R22,R12
001A1 2777 CLR R23
001A2 3060 CPI R22,0
001A3 0767 CPC R22,R23
001A4 F069 BEQ 0x01B2
001A5 3061 CPI R22,1
001A6 E0E0 LDI R30,0
001A7 077E CPC R23,R30
001A8 F079 BEQ 0x01B8
001A9 3062 CPI R22,2
001AA E0E0 LDI R30,0
001AB 077E CPC R23,R30
001AC F089 BEQ 0x01BE
001AD 3063 CPI R22,3
001AE E0E0 LDI R30,0
001AF 077E CPC R23,R30
001B0 F099 BEQ 0x01C4
001B1 C017 RJMP 0x01C9
(0157) {
(0158) case 0:
(0159) Write_Command(0x80);
001B2 E800 LDI R16,0x80
001B3 DF1B RCALL _Write_Command
(0160) Write_Command(0x80+y);
001B4 2F04 MOV R16,R20
001B5 5800 SUBI R16,0x80
001B6 DF18 RCALL _Write_Command
(0161) break;
001B7 C011 RJMP 0x01C9
(0162) case 1:
(0163) Write_Command(0x90);
001B8 E900 LDI R16,0x90
001B9 DF15 RCALL _Write_Command
(0164) Write_Command(0x90+y);
001BA 2F04 MOV R16,R20
001BB 5700 SUBI R16,0x70
001BC DF12 RCALL _Write_Command
(0165) break;
001BD C00B RJMP 0x01C9
(0166) case 2:
(0167) Write_Command(0x88);
001BE E808 LDI R16,0x88
001BF DF0F RCALL _Write_Command
(0168) Write_Command(0x88+y);
001C0 2F04 MOV R16,R20
001C1 5708 SUBI R16,0x78
001C2 DF0C RCALL _Write_Command
(0169) break;
001C3 C005 RJMP 0x01C9
(0170) case 3:
(0171) Write_Command(0x98);
001C4 E908 LDI R16,0x98
001C5 DF09 RCALL _Write_Command
(0172) Write_Command(0x98+y);
001C6 2F04 MOV R16,R20
001C7 5608 SUBI R16,0x68
001C8 DF06 RCALL _Write_Command
(0173) break;
(0174) }
(0175) Write_one_char(dat);//写数据
001C9 2D0A MOV R16,R10
001CA DF6A RCALL _Write_one_char
001CB 940C 0246 JMP pop_xgsetF03C
_Lcd_puts_any:
i --> R10
p --> R12
y --> R20
x --> R14
001CD 940E 021A CALL push_xgsetF0FC
001CF 2F42 MOV R20,R18
001D0 2EE0 MOV R14,R16
001D1 84CA LDD R12,Y+10
001D2 84DB LDD R13,Y+11
(0176) }
(0177) //从指定的位置开始显示汉字或字符
(0178) void Lcd_puts_any(unsigned char x,unsigned char y,unsigned char *p)
(0179) {
(0180) unsigned char i=0;
001D3 24AA CLR R10
(0181) switch(x)
001D4 2D6E MOV R22,R14
001D5 2777 CLR R23
001D6 3060 CPI R22,0
001D7 0767 CPC R22,R23
001D8 F069 BEQ 0x01E6
001D9 3061 CPI R22,1
001DA E0E0 LDI R30,0
001DB 077E CPC R23,R30
001DC F079 BEQ 0x01EC
001DD 3062 CPI R22,2
001DE E0E0 LDI R30,0
001DF 077E CPC R23,R30
001E0 F089 BEQ 0x01F2
001E1 3063 CPI R22,3
001E2 E0E0 LDI R30,0
001E3 077E CPC R23,R30
001E4 F099 BEQ 0x01F8
001E5 C017 RJMP 0x01FD
(0182) {
(0183) case 0:
(0184) Write_Command(0x80);
001E6 E800 LDI R16,0x80
001E7 DEE7 RCALL _Write_Command
(0185) Write_Command(0x80+y);
001E8 2F04 MOV R16,R20
001E9 5800 SUBI R16,0x80
001EA DEE4 RCALL _Write_Command
(0186) break;
001EB C011 RJMP 0x01FD
(0187) case 1:
(0188) Write_Command(0x90);
001EC E900 LDI R16,0x90
001ED DEE1 RCALL _Write_Command
(0189) Write_Command(0x90+y);
001EE 2F04 MOV R16,R20
001EF 5700 SUBI R16,0x70
001F0 DEDE RCALL _Write_Command
(0190) break;
001F1 C00B RJMP 0x01FD
(0191) case 2:
(0192) Write_Command(0x88);
001F2 E808 LDI R16,0x88
001F3 DEDB RCALL _Write_Command
(0193) Write_Command(0x88+y);
001F4 2F04 MOV R16,R20
001F5 5708 SUBI R16,0x78
001F6 DED8 RCALL _Write_Command
(0194) break;
001F7 C005 RJMP 0x01FD
(0195) case 3:
(0196) Write_Command(0x98);
001F8 E908 LDI R16,0x98
001F9 DED5 RCALL _Write_Command
(0197) Write_Command(0x98+y);
001FA 2F04 MOV R16,R20
001FB 5608 SUBI R16,0x68
001FC DED2 RCALL _Write_Command
(0198) break;
(0199) }
(0200) for(i=0;p[i]!='\0';i++)
001FD 24AA CLR R10
001FE C007 RJMP 0x0206
(0201) {
(0202) Write_one_char(p[i]);
FILE: <library>
001FF 2DEA MOV R30,R10
00200 27FF CLR R31
00201 0DEC ADD R30,R12
00202 1DFD ADC R31,R13
00203 8100 LD R16,Z
00204 DF30 RCALL _Write_one_char
00205 94A3 INC R10
00206 2DEA MOV R30,R10
00207 27FF CLR R31
00208 0DEC ADD R30,R12
00209 1DFD ADC R31,R13
0020A 8020 LD R2,Z
0020B 2022 TST R2
0020C F791 BNE 0x01FF
0020D 940C 020F JMP pop_xgsetF0FC
pop_xgsetF0FC:
0020F 90A9 LD R10,Y+
00210 90B9 LD R11,Y+
00211 90C9 LD R12,Y+
00212 90D9 LD R13,Y+
00213 90E9 LD R14,Y+
00214 90F9 LD R15,Y+
00215 9149 LD R20,Y+
00216 9159 LD R21,Y+
00217 9169 LD R22,Y+
00218 9179 LD R23,Y+
00219 9508 RET
push_xgsetF0FC:
0021A 937A ST -Y,R23
0021B 936A ST -Y,R22
push_xgset30FC:
0021C 935A ST -Y,R21
0021D 934A ST -Y,R20
push_xgset00FC:
0021E 92FA ST -Y,R15
0021F 92EA ST -Y,R14
push_xgset003C:
00220 92DA ST -Y,R13
00221 92CA ST -Y,R12
00222 92BA ST -Y,R11
00223 92AA ST -Y,R10
00224 9508 RET
push_xgsetF000:
00225 937A ST -Y,R23
00226 936A ST -Y,R22
00227 935A ST -Y,R21
00228 934A ST -Y,R20
00229 9508 RET
pop_xgsetF000:
0022A 9149 LD R20,Y+
0022B 9159 LD R21,Y+
0022C 9169 LD R22,Y+
0022D 9179 LD R23,Y+
0022E 9508 RET
push_xgsetF00C:
0022F 937A ST -Y,R23
00230 936A ST -Y,R22
00231 935A ST -Y,R21
00232 934A ST -Y,R20
00233 92BA ST -Y,R11
00234 92AA ST -Y,R10
00235 9508 RET
pop_xgsetF00C:
00236 90A9 LD R10,Y+
00237 90B9 LD R11,Y+
00238 9149 LD R20,Y+
00239 9159 LD R21,Y+
0023A 9169 LD R22,Y+
0023B 9179 LD R23,Y+
0023C 9508 RET
push_xgsetF03C:
0023D 937A ST -Y,R23
0023E 936A ST -Y,R22
0023F 935A ST -Y,R21
00240 934A ST -Y,R20
00241 92DA ST -Y,R13
00242 92CA ST -Y,R12
00243 92BA ST -Y,R11
00244 92AA ST -Y,R10
00245 9508 RET
pop_xgsetF03C:
00246 90A9 LD R10,Y+
00247 90B9 LD R11,Y+
00248 90C9 LD R12,Y+
00249 90D9 LD R13,Y+
0024A 9149 LD R20,Y+
0024B 9159 LD R21,Y+
0024C 9169 LD R22,Y+
0024D 9179 LD R23,Y+
0024E 9508 RET
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?