📄 project.lst
字号:
0824 940E0E43 CALL pop_gset3
0826 9508 RET
_LCD_Write_Data:
data --> Y+4
y --> R20
x --> R22
0827 940E0E60 CALL push_gset2
0829 2F42 MOV R20,R18
082A 2F60 MOV R22,R16
(0279)
(0280) //******************************************************************************
(0281) // Function : LCD_Write_Data
(0282) // Input : x in [0,7] and y in [0,127]
(0283) // Output : none
(0284) // Description : Command Level Function,在指定行列写一个数据
(0285) //******************************************************************************
(0286) void LCD_Write_Data(INT8U x,INT8U y,INT8U data)
(0287) {
(0288) if(y < 64)
082B 3440 CPI R20,0x40
082C F448 BCC 0x0836
(0289) {
(0290) Set_CS1(1);
082D E001 LDI R16,1
082E DF64 RCALL _Set_CS1
(0291) Set_CS2(0);
082F 2700 CLR R16
0830 DF5C RCALL _Set_CS2
(0292) LCD_Command_Set_X(x);
0831 2F06 MOV R16,R22
0832 DF94 RCALL _LCD_Command_Set_X
(0293) LCD_Command_Set_Y(y);
0833 2F04 MOV R16,R20
0834 DFA5 RCALL _LCD_Command_Set_Y
(0294) }
0835 C009 RJMP 0x083F
(0295) else
(0296) {
(0297) Set_CS1(0);
0836 2700 CLR R16
0837 DF5B RCALL _Set_CS1
(0298) Set_CS2(1);
0838 E001 LDI R16,1
0839 DF53 RCALL _Set_CS2
(0299) LCD_Command_Set_X(x);
083A 2F06 MOV R16,R22
083B DF8B RCALL _LCD_Command_Set_X
(0300) LCD_Command_Set_Y(y - 64);
083C 2F04 MOV R16,R20
083D 5400 SUBI R16,0x40
083E DF9B RCALL _LCD_Command_Set_Y
(0301) }
(0302) LCD_Command_WriteByte(data);
083F 810C LDD R16,Y+4
0840 DFAC RCALL _LCD_Command_WriteByte
(0303) }
0841 940E0E40 CALL pop_gset2
0843 9508 RET
_LCD_Write_Dot:
y_address --> R22
x_address --> R20
data --> R10
y --> R14
x --> R12
0844 940E0E6C CALL push_gset5
0846 2EE2 MOV R14,R18
0847 2EC0 MOV R12,R16
0848 9721 SBIW R28,1
(0304)
(0305) //******************************************************************************
(0306) // Function : LCD_Write_Dot
(0307) // Input : x in [0,63] and y in [0,127]
(0308) // Output : none
(0309) // Description : Application Level Function,在LCD的指定象素位置描点,注意此函数
(0310) // 是覆盖式描点,原位置的一个字节数据将被此点取代
(0311) //******************************************************************************
(0312) void LCD_Write_Dot(INT8U x,INT8U y)
(0313) {
(0314) INT8U x_address,y_address;
(0315) INT8U data = 0;
0849 24AA CLR R10
(0316) if((x < 64) && (y < 128))
084A 2D8C MOV R24,R12
084B 3480 CPI R24,0x40
084C F4B0 BCC 0x0863
084D 2D8E MOV R24,R14
084E 3880 CPI R24,0x80
084F F498 BCC 0x0863
(0317) {
(0318) x_address = x >> 3;
0850 2D4C MOV R20,R12
0851 9546 LSR R20
0852 9546 LSR R20
0853 9546 LSR R20
(0319) y_address = y;
0854 2F68 MOV R22,R24
(0320) LCD_Write_Data(x_address,y_address,data | (1 << (x % 8)));
0855 E018 LDI R17,0x8
0856 2D0C MOV R16,R12
0857 940E0E18 CALL mod8u
0859 2F10 MOV R17,R16
085A E001 LDI R16,1
085B 940E0EAE CALL lsl8
085D 2C2A MOV R2,R10
085E 2A20 OR R2,R16
085F 8228 STD Y+0,R2
0860 2F26 MOV R18,R22
0861 2F04 MOV R16,R20
0862 DFC4 RCALL _LCD_Write_Data
(0321) }
(0322) }
0863 9621 ADIW R28,1
0864 940E0E46 CALL pop_gset5
0866 9508 RET
_LCD_Write_Char:
y_address --> R20
x_address --> R22
i --> R10
disp --> R12
y --> R14
x --> Y+11
0867 940E0DF7 CALL push_arg4
0869 940E0E6C CALL push_gset5
086B 2EE2 MOV R14,R18
086C 9721 SBIW R28,1
086D 84CF LDD R12,Y+15
086E 88D8 LDD R13,Y+16
(0323)
(0324) //******************************************************************************
(0325) // Function : LCD_Write_Char
(0326) // Input : x in [0,3] and y in [0,15],disp - start address of display buffer
(0327) // Output : none
(0328) // Description : Application Level Function,在LCD的指定显示单元显示一个字符。
(0329) // 每个显示单元默认为8*16点阵字体,对128*64点阵LCD,x最多显示4行
(0330) // 字符,y最多显示16个字符
(0331) //******************************************************************************
(0332) void LCD_Write_Char(INT8U x,INT8U y,const INT8U *disp)
(0333) {
(0334) INT8U i;
(0335) INT8U x_address;
(0336) INT8U y_address;
(0337) if((x < 4) && (y < 16))
086F 858B LDD R24,Y+11
0870 3084 CPI R24,4
0871 F008 BCS 0x0873
0872 C033 RJMP 0x08A6
0873 2D8E MOV R24,R14
0874 3180 CPI R24,0x10
0875 F008 BCS 0x0877
0876 C02F RJMP 0x08A6
(0338) {
(0339) for(i = 0;i < 8;i++)
0877 24AA CLR R10
0878 C012 RJMP 0x088B
(0340) {
(0341) x_address = x << 1;
0879 856B LDD R22,Y+11
087A 0F66 LSL R22
(0342) y_address = (y << 3) + i;
087B 2D4E MOV R20,R14
087C 0F44 LSL R20
087D 0F44 LSL R20
087E 0F44 LSL R20
087F 0D4A ADD R20,R10
(0343) LCD_Write_Data(x_address,y_address,*disp++);
0880 0116 MOVW R2,R12
0881 01C1 MOVW R24,R2
0882 9601 ADIW R24,1
0883 016C MOVW R12,R24
0884 01F1 MOVW R30,R2
0885 91E4 LPM R30,0(Z)
0886 83E8 STD Y+0,R30
0887 2F24 MOV R18,R20
0888 2F06 MOV R16,R22
0889 DF9D RCALL _LCD_Write_Data
088A 94A3 INC R10
088B 2D8A MOV R24,R10
088C 3088 CPI R24,0x8
088D F358 BCS 0x0879
(0344) }
(0345) for(i = 0;i < 8;i++)
088E 24AA CLR R10
088F C013 RJMP 0x08A3
(0346) {
(0347) x_address = (x << 1) + 1;
0890 856B LDD R22,Y+11
0891 0F66 LSL R22
0892 5F6F SUBI R22,0xFF
(0348) y_address = (y << 3) + i;
0893 2D4E MOV R20,R14
0894 0F44 LSL R20
0895 0F44 LSL R20
0896 0F44 LSL R20
0897 0D4A ADD R20,R10
(0349) LCD_Write_Data(x_address,y_address,*disp++);
0898 0116 MOVW R2,R12
0899 01C1 MOVW R24,R2
089A 9601 ADIW R24,1
089B 016C MOVW R12,R24
089C 01F1 MOVW R30,R2
089D 91E4 LPM R30,0(Z)
089E 83E8 STD Y+0,R30
089F 2F24 MOV R18,R20
08A0 2F06 MOV R16,R22
08A1 DF85 RCALL _LCD_Write_Data
08A2 94A3 INC R10
08A3 2D8A MOV R24,R10
08A4 3088 CPI R24,0x8
08A5 F350 BCS 0x0890
(0350) }
(0351) }
(0352) }
08A6 9621 ADIW R28,1
08A7 940E0E46 CALL pop_gset5
08A9 9624 ADIW R28,4
08AA 9508 RET
_LCD_Write_Word:
y_address --> R20
x_address --> R22
i --> R10
disp --> R12
y --> R14
x --> Y+11
08AB 940E0DF7 CALL push_arg4
08AD 940E0E6C CALL push_gset5
08AF 2EE2 MOV R14,R18
08B0 9721 SBIW R28,1
08B1 84CF LDD R12,Y+15
08B2 88D8 LDD R13,Y+16
(0353)
(0354) //******************************************************************************
(0355) // Function : LCD_Write_Word
(0356) // Input : x in [0,3] and y in [0,14],disp - start address of display buffer
(0357) // Output : none
(0358) // Description : Application Level Function,在LCD的指定显示单元显示一个中文。
(0359) // 每个显示单元默认为16*16点阵字体,对128*64点阵LCD,x最多显示4行
(0360) // 字符,y最多显示16个字符,但不允许显示半个汉字
(0361) //******************************************************************************
(0362) void LCD_Write_Word(INT8U x,INT8U y,const INT8U *disp)
(0363) {
(0364) INT8U i;
(0365) INT8U x_address;
(0366) INT8U y_address;
(0367) if((x < 4) && (y < 15))
08B3 858B LDD R24,Y+11
08B4 3084 CPI R24,4
08B5 F008 BCS 0x08B7
08B6 C033 RJMP 0x08EA
08B7 2D8E MOV R24,R14
08B8 308F CPI R24,0xF
08B9 F008 BCS 0x08BB
08BA C02F RJMP 0x08EA
(0368) {
(0369) for(i = 0;i < 16;i++)
08BB 24AA CLR R10
08BC C012 RJMP 0x08CF
(0370) {
(0371) x_address = x << 1;
08BD 856B LDD R22,Y+11
08BE 0F66 LSL R22
(0372) y_address = (y << 3) + i;
08BF 2D4E MOV R20,R14
08C0 0F44 LSL R20
08C1 0F44 LSL R20
08C2 0F44 LSL R20
08C3 0D4A ADD R20,R10
(0373) LCD_Write_Data(x_address,y_address,*disp++);
08C4 0116 MOVW R2,R12
08C5 01C1 MOVW R24,R2
08C6 9601 ADIW R24,1
08C7 016C MOVW R12,R24
08C8 01F1 MOVW R30,R2
08C9 91E4 LPM R30,0(Z)
08CA 83E8 STD Y+0,R30
08CB 2F24 MOV R18,R20
08CC 2F06 MOV R16,R22
08CD DF59 RCALL _LCD_Write_Data
08CE 94A3 INC R10
08CF 2D8A MOV R24,R10
08D0 3180 CPI R24,0x10
08D1 F358 BCS 0x08BD
(0374) }
(0375) for(i = 0;i < 16;i++)
08D2 24AA CLR R10
08D3 C013 RJMP 0x08E7
(0376) {
(0377) x_address = (x << 1) + 1;
08D4 856B LDD R22,Y+11
08D5 0F66 LSL R22
08D6 5F6F SUBI R22,0xFF
(0378) y_address = (y << 3) + i;
08D7 2D4E MOV R20,R14
08D8 0F44 LSL R20
08D9 0F44 LSL R20
08DA 0F44 LSL R20
08DB 0D4A ADD R20,R10
(0379) LCD_Write_Data(x_address,y_address,*disp++);
08DC 0116 MOVW R2,R12
08DD 01C1 MOVW R24,R2
08DE 9601 ADIW R24,1
08DF 016C MOVW R12,R24
08E0 01F1 MOVW R30,R2
08E1 91E4 LPM R30,0(Z)
08E2 83E8 STD Y+0,R30
08E3 2F24 MOV R18,R20
08E4 2F06 MOV R16,R22
08E5 DF41 RCALL _LCD_Write_Data
08E6 94A3 INC R10
08E7 2D8A MOV R24,R10
08E8 3180 CPI R24,0x10
08E9 F350 BCS 0x08D4
(0380) }
(0381) }
(0382) }
08EA 9621 ADIW R28,1
08EB 940E0E46 CALL pop_gset5
08ED 9624 ADIW R28,4
08EE 9508 RET
_LCD_Write_Picture:
x_address --> R20
y_address --> R14
pdata --> R22
y_length --> R10
x_length --> R12
y1 --> Y+13
x1 --> Y+11
08EF 940E0DF7 CALL push_arg4
08F1 940E0E6C CALL push_gset5
08F3 9721 SBIW R28,1
08F4 84CF LDD R12,Y+15
08F5 88A9 LDD R10,Y+17
08F6 896B LDD R22,Y+19
08F7 897C LDD R23,Y+20
(0383)
(0384) //******************************************************************************
(0385) // Function : LCD_Write_Picture
(0386) // Input : x in [0,7] and y in [0,127],
(0387) // x1_length - 纵向象素 y1_length - 横向象素,x1_length必须为8的
(0388) // 整数倍,y1_length可以不必为8的整数倍。
(0389) // Output : none
(0390) // Description : Application Level Function,在LCD的指定区域显示图片
(0391) //******************************************************************************
(0392) void LCD_Write_Picture(INT8U x1,INT8U y1,INT8U x_length,INT8U y_length,const INT8U *pdata)
(0393) {
(0394) INT8U x_address;
(0395) INT8U y_address;
(0396) for(x_address = x1;x_address <= x1 + (x_length >> 3) - 1;x_address++)
08F8 854B LDD R20,Y+11
08F9 C011 RJMP 0x090B
(0397) {
(0398) for(y_address = y1;y_address < y1 + y_length;y_address++)
08FA 84ED LDD R14,Y+13
08FB C00A RJMP 0x0906
(0399) {
(0400) LCD_Write_Data(x_address,y_address,*pdata++);
08FC 011B MOVW R2,R22
08FD 5F6F SUBI R22,0xFF
08FE 4F7F SBCI R23,0xFF
08FF 01F1 MOVW R30,R2
0900 91E4 LPM R30,0(Z)
0901 83E8 STD Y+0,R30
0902 2D2E MOV R18,R14
0903 2F04 MOV R16,R20
0904 DF22 RCALL _LCD_Write_Data
0905 94E3 INC R14
0906 842D LDD R2,Y+13
0907 0C2A ADD R2,R10
0908 14E2 CP R14,R2
0909 F390 BCS 0x08FC
090A 9543 INC R20
090B 2C2C MOV R2,R12
090C 9426 LSR R2
090D 9426 LSR R2
090E 9426 LSR R2
090F 858B LDD R24,Y+11
0910 0D82 ADD R24,R2
0911 5081 SUBI R24,1
0912 1784 CP R24,R20
0913 F730 BCC 0x08FA
(0401) }
(0402) }
(0403) }
0914 9621 ADIW R28,1
0915 940E0E46 CALL pop_gset5
0917 9624 ADIW R28,4
0918 9508 RET
_LCD_Window0_Process:
0919 9722 SBIW R28,2
(0404)
(0405) //data type definition
(0406) struct DataBaseIndex
(0407) {
(0408) INT16U Code;
(0409) const INT8U *Ptr;
(0410) };
(0411)
(0412) //mask list
(0413) const struct DataBaseIndex DataBaseIndexList[] =
(0414) {
(0415) 0x10,eChar_10,
(0416) ' ',eChar_20,
(0417) '!',eChar_21,
(0418) '"',eChar_22,
(0419) '#',eChar_23,
(0420) '$',eChar_24,
(0421) '%',eChar_25,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -