📄 lcd.lst
字号:
_LcdClear:
i --> R20
014E 940E01B4 CALL push_gset1
(0164)
(0165) }
(0166)
(0167) /*--------------------------------------------------------------------------------------------------
(0168) Name : LcdClear
(0169) Description : Clears the display.
(0170) Argument(s) : None.
(0171) Return value : None.
(0172) --------------------------------------------------------------------------------------------------*/
(0173) void LcdClear(void)
(0174) {
(0175) unsigned int i;
(0176)
(0177) LcdSend(0x0c, 0);
0150 2722 CLR R18
0151 E00C LDI R16,0xC
0152 D021 RCALL _LcdSend
(0178) LcdSend(0x80, 0); //此时默认操作为清屏
0153 2722 CLR R18
0154 E800 LDI R16,0x80
0155 D01E RCALL _LcdSend
(0179)
(0180) for (i=0; i<504; i++)
0156 2744 CLR R20
0157 2755 CLR R21
0158 C005 RJMP 0x015E
(0181) LcdSend(0, 1);
0159 E021 LDI R18,1
015A 2700 CLR R16
015B D018 RCALL _LcdSend
015C 5F4F SUBI R20,0xFF
015D 4F5F SBCI R21,0xFF
015E 3F48 CPI R20,0xF8
015F E0E1 LDI R30,1
0160 075E CPC R21,R30
0161 F3B8 BCS 0x0159
0162 940E01B7 CALL pop_gset1
0164 9508 RET
_LcdGotoXY:
Y --> R22
X --> R20
0165 940E01B2 CALL push_gset2
0167 2F62 MOV R22,R18
0168 2F40 MOV R20,R16
(0182) }
(0183)
(0184) /*--------------------------------------------------------------------------------------------------
(0185) Name : LcdGotoXY 设置块坐标
(0186) Description : Sets cursor location to xy location corresponding to basic font size.
(0187) Argument(s) : x, y -> Coordinate for new cursor position. Range: 1,1 .. 14,6
(0188) Return value : None.
(0189) --------------------------------------------------------------------------------------------------*/
(0190) void LcdGotoXY(unsigned char X, unsigned char Y)
(0191) {
(0192) LcdSend(0x40 | Y, 0); // column
0169 2722 CLR R18
016A 2F06 MOV R16,R22
016B 6400 ORI R16,0x40
016C D007 RCALL _LcdSend
(0193) LcdSend(0x80 | X, 0); // row
016D 2722 CLR R18
016E 2F04 MOV R16,R20
016F 6800 ORI R16,0x80
0170 D003 RCALL _LcdSend
0171 940E01A9 CALL pop_gset2
0173 9508 RET
(0194) }
(0195)
(0196) /*--------------------------------------------------------------------------------------------------
(0197) Name : LcdSend
(0198) Description : Sends data to display controller.
(0199) Argument(s) : data -> Data to be sent
(0200) cd -> Command or data (see/use enum)
(0201) Return value : None.
(0202) --------------------------------------------------------------------------------------------------*/
(0203) static void LcdSend (unsigned char data, unsigned char command)
(0204) {
(0205) PORTB &= ~LCD_CE_PIN ; // 使能LCD
_LcdSend:
command --> R18
data --> R16
0174 98C1 CBI 0x18,1
(0206) if (command == 0)
0175 2322 TST R18
0176 F411 BNE 0x0179
(0207) PORTB &= ~LCD_DC_PIN ; // 传送命令
0177 98C2 CBI 0x18,2
0178 C001 RJMP 0x017A
(0208) else
(0209) PORTB |= LCD_DC_PIN ; // 传送数据
0179 9AC2 SBI 0x18,2
(0210)
(0211) SPDR = data; // 传送数据到SPI寄存器
017A B90F OUT 0x0F,R16
(0212)
(0213) while ((SPSR & 0x80) == 0); // 等待数据传送完毕
017B 9B77 SBIS 0x0E,7
017C CFFE RJMP 0x017B
(0214)
(0215) PORTB |= LCD_CE_PIN ; // 关闭LCD
017D 9AC1 SBI 0x18,1
017E 9508 RET
(0216) }
(0217)
(0218) /*--------------------------------------------------------------------------------------------------
(0219) Name : Delay
(0220) Description : Uncalibrated delay for LCD init routine.
(0221) Argument(s) : None.
(0222) Return value : None.
(0223) --------------------------------------------------------------------------------------------------*/
(0224) static void Delay ( void )
(0225) {
(0226) int i;
(0227) for ( i = -12000; i < 12000; i++ );
_Delay:
i --> R16
017F E200 LDI R16,0x20
0180 ED11 LDI R17,0xD1
0181 5F0F SUBI R16,0xFF
0182 4F1F SBCI R17,0xFF
0183 3E00 CPI R16,0xE0
0184 E2EE LDI R30,0x2E
0185 071E CPC R17,R30
0186 F3D4 BLT 0x0181
0187 9508 RET
(0228) }
(0229)
(0230) /*--------------------------------------------------------------------------------------------------
(0231) Name : main
(0232) Description :
(0233) Argument(s) :
(0234) Return value : None.
(0235) --------------------------------------------------------------------------------------------------*/
(0236)
(0237) void main(void)
(0238) {
(0239) unsigned char X=0,i=0; //v=0,按行显示,x对应某个bank(0~83)
_main:
i --> R20
X --> R22
0188 2766 CLR R22
0189 2744 CLR R20
(0240) LcdInit();
018A DFA4 RCALL _LcdInit
018B C01B RJMP 0x01A7
(0241)
(0242) while(1)
(0243) {
(0244) LcdGotoXY(X_Init,Y_Init);
018C 2722 CLR R18
018D 2700 CLR R16
018E DFD6 RCALL _LcdGotoXY
(0245) // for(X=0;X<X_Length;X++)LcdSend(X_TAB[X],1);
(0246) for(i=0;i<100;i++)
018F 2744 CLR R20
0190 C014 RJMP 0x01A5
(0247) {
(0248) for(X=0;X<5;X++)
0191 2766 CLR R22
0192 C00F RJMP 0x01A2
(0249) {
(0250) LcdSend(FontLookup[i][X],1);
FILE: <library>
0193 E021 LDI R18,1
0194 E085 LDI R24,5
0195 9F84 MUL R24,R20
0196 0110 MOVW R2,R0
0197 E584 LDI R24,0x54
0198 E090 LDI R25,0
0199 0E28 ADD R2,R24
019A 1E39 ADC R3,R25
019B 2FE6 MOV R30,R22
019C 27FF CLR R31
019D 0DE2 ADD R30,R2
019E 1DF3 ADC R31,R3
019F 9104 LPM R16,0(Z)
01A0 DFD3 RCALL _LcdSend
01A1 9563 INC R22
01A2 3065 CPI R22,5
01A3 F378 BCS 0x0193
01A4 9543 INC R20
01A5 3644 CPI R20,0x64
01A6 F350 BCS 0x0191
01A7 CFE4 RJMP 0x018C
01A8 9508 RET
pop_gset2:
01A9 E0E2 LDI R30,2
01AA 940C01B8 JMP pop
push_gset5:
01AC 92FA ST R15,-Y
01AD 92EA ST R14,-Y
push_gset4:
01AE 92DA ST R13,-Y
01AF 92CA ST R12,-Y
push_gset3:
01B0 92BA ST R11,-Y
01B1 92AA ST R10,-Y
push_gset2:
01B2 937A ST R23,-Y
01B3 936A ST R22,-Y
push_gset1:
01B4 935A ST R21,-Y
01B5 934A ST R20,-Y
01B6 9508 RET
pop_gset1:
01B7 E0E1 LDI R30,1
pop:
01B8 9149 LD R20,Y+
01B9 9159 LD R21,Y+
01BA FDE0 SBRC R30,0
01BB 9508 RET
01BC 9169 LD R22,Y+
01BD 9179 LD R23,Y+
01BE FDE1 SBRC R30,1
01BF 9508 RET
01C0 90A9 LD R10,Y+
01C1 90B9 LD R11,Y+
01C2 FDE2 SBRC R30,2
01C3 9508 RET
01C4 90C9 LD R12,Y+
01C5 90D9 LD R13,Y+
01C6 FDE3 SBRC R30,3
01C7 9508 RET
01C8 90E9 LD R14,Y+
01C9 90F9 LD R15,Y+
01CA 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -