📄 project.lst
字号:
0675 BB0B OUT 0x1B,R16
(0164) }
0676 9508 RET
_LCD_Command_DispOnOff:
onoff --> R20
0677 940E0A7A CALL push_gset1
0679 2F40 MOV R20,R16
(0165)
(0166) //******************************************************************************
(0167) // Function : LCD_Command_DispOnOff
(0168) // Input : onoff = 1 -> LCD Display Enabled,else Disabled
(0169) // Output : none
(0170) // Description : Command Level Function,Display ONOFF Control
(0171) //******************************************************************************
(0172) void LCD_Command_DispOnOff(INT8U onoff)
(0173) {
(0174) Set_RW(0);
067A 2700 CLR R16
067B DFDB RCALL _Set_RW
(0175) Set_DI(0);
067C 2700 CLR R16
067D DFD3 RCALL _Set_DI
(0176) Set_EN(0);
067E 2700 CLR R16
067F DFDD RCALL _Set_EN
(0177) Set_Data(0x3E + onoff);
0680 2F04 MOV R16,R20
0681 5C02 SUBI R16,0xC2
0682 DFF2 RCALL _Set_Data
(0178) Set_EN(1);
0683 E001 LDI R16,1
0684 DFD8 RCALL _Set_EN
(0179) Set_EN(0);
0685 2700 CLR R16
0686 DFD6 RCALL _Set_EN
(0180) }
0687 940E0A7D CALL pop_gset1
0689 9508 RET
_LCD_Command_SetStartLine:
startline --> R20
068A 940E0A7A CALL push_gset1
068C 2F40 MOV R20,R16
(0181)
(0182) //******************************************************************************
(0183) // Function : LCD_Command_SetStartLine
(0184) // Input : startline - Display Start Line,See Specification
(0185) // Output : none
(0186) // Description : Command Level Function,Set Display Start Line
(0187) //******************************************************************************
(0188) void LCD_Command_SetStartLine(INT8U startline)
(0189) {
(0190) Set_RW(0);
068D 2700 CLR R16
068E DFC8 RCALL _Set_RW
(0191) Set_DI(0);
068F 2700 CLR R16
0690 DFC0 RCALL _Set_DI
(0192) Set_EN(0);
0691 2700 CLR R16
0692 DFCA RCALL _Set_EN
(0193) Set_Data(0xC0 + startline);
0693 2F04 MOV R16,R20
0694 5400 SUBI R16,0x40
0695 DFDF RCALL _Set_Data
(0194) Set_EN(1);
0696 E001 LDI R16,1
0697 DFC5 RCALL _Set_EN
(0195) Set_EN(0);
0698 2700 CLR R16
0699 DFC3 RCALL _Set_EN
(0196) }
069A 940E0A7D CALL pop_gset1
069C 9508 RET
_LCD_Command_Set_X:
x --> R20
069D 940E0A7A CALL push_gset1
069F 2F40 MOV R20,R16
(0197)
(0198) //******************************************************************************
(0199) // Function : LCD_Command_Set_X
(0200) // Input : x - Display Row,from 0 to 7 for 128*64 LCD
(0201) // Output : none
(0202) // Description : Command Level Function,Set Operation X Address
(0203) //******************************************************************************
(0204) void LCD_Command_Set_X(INT8U x)
(0205) {
(0206) Set_RW(0);
06A0 2700 CLR R16
06A1 DFB5 RCALL _Set_RW
(0207) Set_DI(0);
06A2 2700 CLR R16
06A3 DFAD RCALL _Set_DI
(0208) Set_EN(0);
06A4 2700 CLR R16
06A5 DFB7 RCALL _Set_EN
(0209) Set_Data(0xB8 + x);
06A6 2F04 MOV R16,R20
06A7 5408 SUBI R16,0x48
06A8 DFCC RCALL _Set_Data
(0210) Set_EN(1);
06A9 E001 LDI R16,1
06AA DFB2 RCALL _Set_EN
(0211) Set_EN(0);
06AB 2700 CLR R16
06AC DFB0 RCALL _Set_EN
(0212) }
06AD 940E0A7D CALL pop_gset1
06AF 9508 RET
_LCD_Command_Set_Y:
column --> R20
06B0 940E0A7A CALL push_gset1
06B2 2F40 MOV R20,R16
(0213)
(0214) //******************************************************************************
(0215) // Function : LCD_Command_Set_Y
(0216) // Input : y - Display Column,from 0 to 63 for 128*64 LCD
(0217) // Output : none
(0218) // Description : Command Level Function,Set Operation Y Address
(0219) //******************************************************************************
(0220) void LCD_Command_Set_Y(INT8U column)
(0221) {
(0222) Set_RW(0);
06B3 2700 CLR R16
06B4 DFA2 RCALL _Set_RW
(0223) Set_DI(0);
06B5 2700 CLR R16
06B6 DF9A RCALL _Set_DI
(0224) Set_EN(0);
06B7 2700 CLR R16
06B8 DFA4 RCALL _Set_EN
(0225) Set_Data(0x40 + column);
06B9 2F04 MOV R16,R20
06BA 5C00 SUBI R16,0xC0
06BB DFB9 RCALL _Set_Data
(0226) Set_EN(1);
06BC E001 LDI R16,1
06BD DF9F RCALL _Set_EN
(0227) Set_EN(0);
06BE 2700 CLR R16
06BF DF9D RCALL _Set_EN
(0228) }
06C0 940E0A7D CALL pop_gset1
06C2 9508 RET
_LCD_Command_WriteByte:
data --> R20
06C3 940E0A7A CALL push_gset1
06C5 2F40 MOV R20,R16
(0229)
(0230) //******************************************************************************
(0231) // Function : LCD_Command_WriteByte
(0232) // Input : data - Display Data
(0233) // Output : none
(0234) // Description : Command Level Function,Write Display Data to DDRAM
(0235) //******************************************************************************
(0236) void LCD_Command_WriteByte(INT8U data)
(0237) {
(0238) Set_RW(0);
06C6 2700 CLR R16
06C7 DF8F RCALL _Set_RW
(0239) Set_DI(1);
06C8 E001 LDI R16,1
06C9 DF87 RCALL _Set_DI
(0240) Set_EN(0);
06CA 2700 CLR R16
06CB DF91 RCALL _Set_EN
(0241) Set_Data(data);
06CC 2F04 MOV R16,R20
06CD DFA7 RCALL _Set_Data
(0242) Set_EN(1);
06CE E001 LDI R16,1
06CF DF8D RCALL _Set_EN
(0243) Set_EN(0);
06D0 2700 CLR R16
06D1 DF8B RCALL _Set_EN
(0244) }
06D2 940E0A7D CALL pop_gset1
06D4 9508 RET
(0245)
(0246) //******************************************************************************
(0247) // Function : LCD_Reset
(0248) // Input : none
(0249) // Output : none
(0250) // Description : Command Level Function,Soft RESET LCD Module
(0251) //******************************************************************************
(0252) void LCD_Reset(void)
(0253) {
(0254) Set_RST(0);
_LCD_Reset:
06D5 2700 CLR R16
06D6 DF98 RCALL _Set_RST
(0255) Set_RST(1);
06D7 E001 LDI R16,1
(0256) }
06D8 CF96 RJMP _Set_RST
(0257)
(0258) //******************************************************************************
(0259) // Function : LCD_Init
(0260) // Input : none
(0261) // Output : none
(0262) // Description : Application Level Function,Init LCD
(0263) //******************************************************************************
(0264) void LCD_Init(void)
(0265) {
(0266) LCD_Reset();
_LCD_Init:
06D9 DFFB RCALL _LCD_Reset
(0267) LCD_Clear_Line(0,7);
06DA E027 LDI R18,7
06DB 2700 CLR R16
06DC D004 RCALL _LCD_Clear_Line
(0268) LCD_Command_DispOnOff(1);
06DD E001 LDI R16,1
06DE DF98 RCALL _LCD_Command_DispOnOff
(0269) LCD_Command_SetStartLine(0);
06DF 2700 CLR R16
(0270) }
06E0 CFA9 RJMP _LCD_Command_SetStartLine
_LCD_Clear_Line:
i --> R20
j --> R10
endline --> R22
startline --> R10
06E1 940E0A95 CALL push_gset3
06E3 2F62 MOV R22,R18
06E4 2EA0 MOV R10,R16
(0271)
(0272) //******************************************************************************
(0273) // Function : LCD_Clear_Line
(0274) // Input : startline,endline - Line Range to be Cleare
(0275) // Output : none
(0276) // Description : Command Level Function,Clear Screen Display
(0277) //******************************************************************************
(0278) void LCD_Clear_Line(INT8U startline,INT8U endline)
(0279) {
(0280) INT8U i,j;
(0281) for(i = startline;i <= endline;i++)
06E5 2D4A MOV R20,R10
06E6 C011 RJMP 0x06F8
(0282) {
(0283) Set_CS1(1);
06E7 E001 LDI R16,1
06E8 DF80 RCALL _Set_CS1
(0284) Set_CS2(1);
06E9 E001 LDI R16,1
06EA DF78 RCALL _Set_CS2
(0285) LCD_Command_Set_X(i);
06EB 2F04 MOV R16,R20
06EC DFB0 RCALL _LCD_Command_Set_X
(0286) LCD_Command_Set_Y(0);
06ED 2700 CLR R16
06EE DFC1 RCALL _LCD_Command_Set_Y
(0287) for(j = 0;j < 64;j++)
06EF 24AA CLR R10
06F0 C003 RJMP 0x06F4
(0288) {
(0289) LCD_Command_WriteByte(0x00);
06F1 2700 CLR R16
06F2 DFD0 RCALL _LCD_Command_WriteByte
06F3 94A3 INC R10
06F4 2D8A MOV R24,R10
06F5 3480 CPI R24,0x40
06F6 F3D0 BCS 0x06F1
06F7 9543 INC R20
06F8 1764 CP R22,R20
06F9 F768 BCC 0x06E7
(0290) }
(0291) }
(0292) }
06FA 940E0A74 CALL pop_gset3
06FC 9508 RET
_LCD_Write_Data:
data --> Y+4
y --> R20
x --> R22
06FD 940E0A91 CALL push_gset2
06FF 2F42 MOV R20,R18
0700 2F60 MOV R22,R16
(0293)
(0294) //******************************************************************************
(0295) // Function : LCD_Write_Data
(0296) // Input : x in [0,7] and y in [0,127]
(0297) // Output : none
(0298) // Description : Command Level Function,在指定行列写一个数据
(0299) //******************************************************************************
(0300) void LCD_Write_Data(INT8U x,INT8U y,INT8U data)
(0301) {
(0302) if(y < 64)
0701 3440 CPI R20,0x40
0702 F448 BCC 0x070C
(0303) {
(0304) Set_CS1(1);
0703 E001 LDI R16,1
0704 DF64 RCALL _Set_CS1
(0305) Set_CS2(0);
0705 2700 CLR R16
0706 DF5C RCALL _Set_CS2
(0306) LCD_Command_Set_X(x);
0707 2F06 MOV R16,R22
0708 DF94 RCALL _LCD_Command_Set_X
(0307) LCD_Command_Set_Y(y);
0709 2F04 MOV R16,R20
070A DFA5 RCALL _LCD_Command_Set_Y
(0308) }
070B C009 RJMP 0x0715
(0309) else
(0310) {
(0311) Set_CS1(0);
070C 2700 CLR R16
070D DF5B RCALL _Set_CS1
(0312) Set_CS2(1);
070E E001 LDI R16,1
070F DF53 RCALL _Set_CS2
(0313) LCD_Command_Set_X(x);
0710 2F06 MOV R16,R22
0711 DF8B RCALL _LCD_Command_Set_X
(0314) LCD_Command_Set_Y(y - 64);
0712 2F04 MOV R16,R20
0713 5400 SUBI R16,0x40
0714 DF9B RCALL _LCD_Command_Set_Y
(0315) }
(0316) LCD_Command_WriteByte(data);
0715 810C LDD R16,Y+4
0716 DFAC RCALL _LCD_Command_WriteByte
(0317) }
0717 940E0A71 CALL pop_gset2
0719 9508 RET
_LCD_Write_Dot:
y_address --> R22
x_address --> R20
data --> R10
y --> R14
x --> R12
071A 940E0A9D CALL push_gset5
071C 2EE2 MOV R14,R18
071D 2EC0 MOV R12,R16
071E 9721 SBIW R28,1
(0318)
(0319) //******************************************************************************
(0320) // Function : LCD_Write_Dot
(0321) // Input : x in [0,63] and y in [0,127]
(0322) // Output : none
(0323) // Description : Application Level Function,在LCD的指定象素位置描点,注意此函数
(0324) // 是覆盖式描点,原位置的一个字节数据将被此点取代
(0325) //******************************************************************************
(0326) void LCD_Write_Dot(INT8U x,INT8U y)
(0327) {
(0328) INT8U x_address,y_address;
(0329) INT8U data = 0;
071F 24AA CLR R10
(0330) if((x < 64) && (y < 128))
0720 2D8C MOV R24,R12
0721 3480 CPI R24,0x40
0722 F4B0 BCC 0x0739
0723 2D8E MOV R24,R14
0724 3880 CPI R24,0x80
0725 F498 BCC 0x0739
(0331) {
(0332) x_address = x >> 3;
0726 2D4C MOV R20,R12
0727 9546 LSR R20
0728 9546 LSR R20
0729 9546 LSR R20
(0333) y_address = y;
072A 2F68 MOV R22,R24
(0334) LCD_Write_Data(x_address,y_address,data | (1 << (x % 8)));
072B E018 LDI R17,0x8
072C 2D0C MOV R16,R12
072D 940E0A59 CALL mod8u
072F 2F10 MOV R17,R16
0730 E001 LDI R16,1
0731 940E0ACF CALL lsl8
0733 2C2A MOV R2,R10
0734 2A20 OR R2,R16
0735 8228 STD Y+0,R2
0736 2F26 MOV R18,R22
0737 2F04 MOV R16,R20
0738 DFC4 RCALL _LCD_Write_Data
(0335) }
(0336) }
0739 9621 ADIW R28,1
073A 940E0A77 CALL pop_gset5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -