📄 st7920.lst
字号:
(0227) /*********************************************************************************************************
(0228) ** 函数名称: Lcd_lineclr()
(0229) ** 功能描述: 清除一行的显示
(0230) ** 输 入: unsigned char row 要清除显示的行
(0231) ** 输 出:
(0232) ** 全局变量: 无
(0233) ** 调用模块: 无
(0234) ** 说明:
(0235) ** 注意:
(0236) *******************************************************************************************************/
(0237) void Lcd_lineclr(unsigned char row)
(0238) {
(0239) unsigned char i;
(0240) switch(row)
020E 2755 CLR R21
020F 3041 CPI R20,1
0210 E0E0 LDI R30,0
0211 075E CPC R21,R30
0212 F069 BEQ 0x0220
0213 3042 CPI R20,2
0214 E0E0 LDI R30,0
0215 075E CPC R21,R30
0216 F0A9 BEQ 0x022C
0217 3043 CPI R20,3
0218 E0E0 LDI R30,0
0219 075E CPC R21,R30
021A F0E9 BEQ 0x0238
021B 3044 CPI R20,4
021C E0E0 LDI R30,0
021D 075E CPC R21,R30
021E F129 BEQ 0x0244
021F C02F RJMP 0x024F
(0241) {
(0242) case 1:
(0243) {
(0244) wr_lcd(Lcd_Set_Ddram,1);
0220 E021 LDI R18,1
0221 E800 LDI R16,0x80
0222 DEF7 RCALL _wr_lcd
(0245) for(i=0;i<16;i++) wr_lcd(' ',0);
0223 2744 CLR R20
0224 C004 RJMP 0x0229
0225 2722 CLR R18
0226 E200 LDI R16,0x20
0227 DEF2 RCALL _wr_lcd
0228 9543 INC R20
0229 3140 CPI R20,0x10
022A F3D0 BCS 0x0225
(0246) break;
022B C023 RJMP 0x024F
(0247) }
(0248) case 2:
(0249) {
(0250) wr_lcd(Lcd_Set_Ddram+0x10,1);
022C E021 LDI R18,1
022D E900 LDI R16,0x90
022E DEEB RCALL _wr_lcd
(0251) for(i=0;i<16;i++) wr_lcd(' ',0);
022F 2744 CLR R20
0230 C004 RJMP 0x0235
0231 2722 CLR R18
0232 E200 LDI R16,0x20
0233 DEE6 RCALL _wr_lcd
0234 9543 INC R20
0235 3140 CPI R20,0x10
0236 F3D0 BCS 0x0231
(0252) break;
0237 C017 RJMP 0x024F
(0253) }
(0254) case 3:
(0255) {
(0256) wr_lcd(Lcd_Set_Ddram+0x08,1);
0238 E021 LDI R18,1
0239 E808 LDI R16,0x88
023A DEDF RCALL _wr_lcd
(0257) for(i=0;i<16;i++) wr_lcd(' ',0);
023B 2744 CLR R20
023C C004 RJMP 0x0241
023D 2722 CLR R18
023E E200 LDI R16,0x20
023F DEDA RCALL _wr_lcd
0240 9543 INC R20
0241 3140 CPI R20,0x10
0242 F3D0 BCS 0x023D
(0258) break;
0243 C00B RJMP 0x024F
(0259) }
(0260) case 4:
(0261) {
(0262) wr_lcd(Lcd_Set_Ddram+0x18,1);
0244 E021 LDI R18,1
0245 E908 LDI R16,0x98
0246 DED3 RCALL _wr_lcd
(0263) for(i=0;i<16;i++) wr_lcd(' ',0);
0247 2744 CLR R20
0248 C004 RJMP 0x024D
0249 2722 CLR R18
024A E200 LDI R16,0x20
024B DECE RCALL _wr_lcd
024C 9543 INC R20
024D 3140 CPI R20,0x10
024E F3D0 BCS 0x0249
(0264) break;
(0265) }
(0266)
(0267) default: break;
024F 940E02D4 CALL pop_gset1
0251 9508 RET
_Lcd_linedisp:
i --> R22
row --> R22
p --> R20
0252 940E02CF CALL push_gset2
0254 2F62 MOV R22,R18
0255 01A8 MOVW R20,R16
(0268) }
(0269) }
(0270)
(0271)
(0272) /*********************************************************************************************************
(0273) ** 函数名称: void Lcd_linedisp(unsigned char *p,unsigned char row)
(0274) ** 功能描述: 在一行中显示
(0275) ** 输 入: unsigned char row 要清除显示的行
(0276) ** 输 出:
(0277) ** 全局变量: 无
(0278) ** 调用模块: 无
(0279) ** 说明:
(0280) ** 注意:
(0281) *******************************************************************************************************/
(0282)
(0283) void Lcd_linedisp(unsigned char *p,unsigned char row)
(0284) {
(0285) unsigned char i;
(0286) switch(row)
0256 2777 CLR R23
0257 3061 CPI R22,1
0258 E0E0 LDI R30,0
0259 077E CPC R23,R30
025A F071 BEQ 0x0269
025B 3062 CPI R22,2
025C E0E0 LDI R30,0
025D 077E CPC R23,R30
025E F0E1 BEQ 0x027B
025F 3063 CPI R22,3
0260 E0E0 LDI R30,0
0261 077E CPC R23,R30
0262 F151 BEQ 0x028D
0263 3064 CPI R22,4
0264 E0E0 LDI R30,0
0265 077E CPC R23,R30
0266 F409 BNE 0x0268
0267 C037 RJMP 0x029F
0268 C047 RJMP 0x02B0
(0287) {
(0288) case 1:
(0289) {
(0290) Lcd_lineclr(1);
0269 E001 LDI R16,1
026A DFA0 RCALL _Lcd_lineclr
(0291) wr_lcd(Lcd_Set_Ddram,1);
026B E021 LDI R18,1
026C E800 LDI R16,0x80
026D DEAC RCALL _wr_lcd
(0292) for(i=0;i<16;i++) wr_lcd(p[i],0);
026E 2766 CLR R22
026F C008 RJMP 0x0278
0270 2722 CLR R18
0271 2FE6 MOV R30,R22
0272 27FF CLR R31
0273 0FE4 ADD R30,R20
0274 1FF5 ADC R31,R21
0275 8100 LDD R16,Z+0
0276 DEA3 RCALL _wr_lcd
0277 9563 INC R22
0278 3160 CPI R22,0x10
0279 F3B0 BCS 0x0270
(0293) break;
027A C035 RJMP 0x02B0
(0294) }
(0295) case 2:
(0296) {
(0297) Lcd_lineclr(2);
027B E002 LDI R16,2
027C DF8E RCALL _Lcd_lineclr
(0298) wr_lcd(Lcd_Set_Ddram+0x10,1);
027D E021 LDI R18,1
027E E900 LDI R16,0x90
027F DE9A RCALL _wr_lcd
(0299) for(i=0;i<16;i++) wr_lcd(p[i],0);
0280 2766 CLR R22
0281 C008 RJMP 0x028A
0282 2722 CLR R18
0283 2FE6 MOV R30,R22
0284 27FF CLR R31
0285 0FE4 ADD R30,R20
0286 1FF5 ADC R31,R21
0287 8100 LDD R16,Z+0
0288 DE91 RCALL _wr_lcd
0289 9563 INC R22
028A 3160 CPI R22,0x10
028B F3B0 BCS 0x0282
(0300) break;
028C C023 RJMP 0x02B0
(0301) }
(0302) case 3:
(0303) {
(0304) Lcd_lineclr(3);
028D E003 LDI R16,3
028E DF7C RCALL _Lcd_lineclr
(0305) wr_lcd(Lcd_Set_Ddram+0x08,1);
028F E021 LDI R18,1
0290 E808 LDI R16,0x88
0291 DE88 RCALL _wr_lcd
(0306) for(i=0;i<16;i++) wr_lcd(p[i],0);
0292 2766 CLR R22
0293 C008 RJMP 0x029C
0294 2722 CLR R18
0295 2FE6 MOV R30,R22
0296 27FF CLR R31
0297 0FE4 ADD R30,R20
0298 1FF5 ADC R31,R21
0299 8100 LDD R16,Z+0
029A DE7F RCALL _wr_lcd
029B 9563 INC R22
029C 3160 CPI R22,0x10
029D F3B0 BCS 0x0294
(0307) break;
029E C011 RJMP 0x02B0
(0308) }
(0309) case 4:
(0310) {
(0311) Lcd_lineclr(4);
029F E004 LDI R16,4
02A0 DF6A RCALL _Lcd_lineclr
(0312) wr_lcd(Lcd_Set_Ddram+0x18,1);
02A1 E021 LDI R18,1
02A2 E908 LDI R16,0x98
02A3 DE76 RCALL _wr_lcd
(0313) for(i=0;i<16;i++) wr_lcd(p[i],0);
02A4 2766 CLR R22
02A5 C008 RJMP 0x02AE
02A6 2722 CLR R18
02A7 2FE6 MOV R30,R22
02A8 27FF CLR R31
02A9 0FE4 ADD R30,R20
02AA 1FF5 ADC R31,R21
02AB 8100 LDD R16,Z+0
02AC DE6D RCALL _wr_lcd
02AD 9563 INC R22
02AE 3160 CPI R22,0x10
02AF F3B0 BCS 0x02A6
(0314) break;
02B0 940E02C3 CALL pop_gset2
02B2 9508 RET
_Lcd_backwhite:
line --> R20
02B3 940E02D1 CALL push_gset1
02B5 2F40 MOV R20,R16
(0315) }
(0316) }
(0317) }
(0318)
(0319)
(0320) /*********************************************************************************************************
(0321) ** 函数名称: void Lcd_backwhite(unsigned char line)
(0322) ** 功能描述: 反白显示
(0323) ** 输 入: unsigned char row 要反白显示的行 row=0,1行3行反白显示 row=1,二行四行反白显示
(0324) ** 输 出:
(0325) ** 全局变量: 无
(0326) ** 调用模块: 无
(0327) ** 说明:
(0328) ** 注意:
(0329) *******************************************************************************************************/
(0330) void Lcd_backwhite(unsigned char line)
(0331) {
(0332) wr_lcd(Lcd_Set_Function_Extend,1);
02B6 E021 LDI R18,1
02B7 E304 LDI R16,0x34
02B8 DE61 RCALL _wr_lcd
(0333) wr_lcd(Lcd_Back_White+line,1);
02B9 E021 LDI R18,1
02BA 2F04 MOV R16,R20
02BB 5F0C SUBI R16,0xFC
02BC DE5D RCALL _wr_lcd
(0334) wr_lcd(Lcd_Set_Function_Basic,1);
FILE: <library>
02BD E021 LDI R18,1
02BE E300 LDI R16,0x30
02BF DE5A RCALL _wr_lcd
02C0 940E02D4 CALL pop_gset1
02C2 9508 RET
pop_gset2:
02C3 E0E2 LDI R30,2
02C4 940C02D5 JMP pop
pop_gset3:
02C6 E0E4 LDI R30,4
02C7 940C02D5 JMP pop
push_gset5:
02C9 92FA ST R15,-Y
02CA 92EA ST R14,-Y
push_gset4:
02CB 92DA ST R13,-Y
02CC 92CA ST R12,-Y
push_gset3:
02CD 92BA ST R11,-Y
02CE 92AA ST R10,-Y
push_gset2:
02CF 937A ST R23,-Y
02D0 936A ST R22,-Y
push_gset1:
02D1 935A ST R21,-Y
02D2 934A ST R20,-Y
02D3 9508 RET
pop_gset1:
02D4 E0E1 LDI R30,1
pop:
02D5 9149 LD R20,Y+
02D6 9159 LD R21,Y+
02D7 FDE0 SBRC R30,0
02D8 9508 RET
02D9 9169 LD R22,Y+
02DA 9179 LD R23,Y+
02DB FDE1 SBRC R30,1
02DC 9508 RET
02DD 90A9 LD R10,Y+
02DE 90B9 LD R11,Y+
02DF FDE2 SBRC R30,2
02E0 9508 RET
02E1 90C9 LD R12,Y+
02E2 90D9 LD R13,Y+
02E3 FDE3 SBRC R30,3
02E4 9508 RET
02E5 90E9 LD R14,Y+
02E6 90F9 LD R15,Y+
02E7 9508 RET
asgncblk:
02E8 93AA ST R26,-Y
02E9 93BA ST R27,-Y
02EA 93EA ST R30,-Y
02EB 93FA ST R31,-Y
02EC 920A ST R0,-Y
02ED 81AF LDD R26,Y+7
02EE 85B8 LDD R27,Y+8
02EF 81ED LDD R30,Y+5
02F0 81FE LDD R31,Y+6
02F1 3000 CPI R16,0
02F2 0701 CPC R16,R17
02F3 F031 BEQ 0x02FA
02F4 95C8 LPM
02F5 920D ST R0,X+
02F6 9631 ADIW R30,1
02F7 5001 SUBI R16,1
02F8 4010 SBCI R17,0
02F9 CFF7 RJMP 0x02F1
02FA 9009 LD R0,Y+
02FB 91F9 LD R31,Y+
02FC 91E9 LD R30,Y+
02FD 91B9 LD R27,Y+
02FE 91A9 LD R26,Y+
02FF 9624 ADIW R28,4
0300 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -