📄 ps2icc.lst
字号:
0818 3001 CPI R16,1
0819 F411 BNE 0x081C
081A 9AC4 SBI 0x18,4
081B C003 RJMP 0x081F
(0138) else PORTB=PORTB&0xbf;}
081C B388 IN R24,0x18
081D 7B8F ANDI R24,0xBF
081E BB88 OUT 0x18,R24
081F 9508 RET
(0139)
(0140) //sbit RST=PB^5;
(0141) void Set_RST(uchar i)
(0142) {if(i==1) PORTB=PORTB|0x40;
_Set_RST:
i --> R16
0820 3001 CPI R16,1
0821 F411 BNE 0x0824
0822 9AC6 SBI 0x18,6
0823 C003 RJMP 0x0827
(0143) else PORTB=PORTB&0x7f;}
0824 B388 IN R24,0x18
0825 778F ANDI R24,0x7F
0826 BB88 OUT 0x18,R24
0827 9508 RET
_DisplayOnOff:
j --> Y+1
i --> R20
0828 D524 RCALL push_gset1
0829 2F40 MOV R20,R16
(0144)
(0145) //***************************LCD显示开关控制命令***********//
(0146) //参数说明:i=0开显示,i=1关显示
(0147) void DisplayOnOff(uchar i)
(0148) {uchar j;
(0149) Set_RW(0); // RW=0;
082A 2700 CLR R16
082B DFD4 RCALL _Set_RW
(0150) Set_DI(0); //DI=0;
082C 2700 CLR R16
082D DFCA RCALL _Set_DI
(0151) Set_EN(0); //ENABLE=0;
082E 2700 CLR R16
082F DFD8 RCALL _Set_EN
(0152) PORTC=62+i; //P0=0x3e+i;
0830 2F84 MOV R24,R20
0831 5C82 SUBI R24,0xC2
0832 BB85 OUT 0x15,R24
(0153) DelayUs(10); //_DelayUs_();
0833 E00A LDI R16,0xA
0834 DF1F RCALL _DelayUs
(0154) Set_EN(1); //ENABLE=1;
0835 E001 LDI R16,1
0836 DFD1 RCALL _Set_EN
(0155) DelayUs(10); //_DelayUs_();
0837 E00A LDI R16,0xA
0838 DF1B RCALL _DelayUs
(0156) DelayUs(10); //_DelayUs_();
0839 E00A LDI R16,0xA
083A DF19 RCALL _DelayUs
(0157) Set_EN(0); //ENABLE=0;
083B 2700 CLR R16
083C DFCB RCALL _Set_EN
(0158) }
083D D512 RCALL pop_gset1
083E 9508 RET
_SetStartLine:
i --> R20
083F D50D RCALL push_gset1
0840 2F40 MOV R20,R16
(0159)
(0160) //***************************设置LCD显示起始行*************//
(0161) //参数说明:i=0~63
(0162) void SetStartLine(uchar i)
(0163) {Set_RW(0); //RW=0;
0841 2700 CLR R16
0842 DFBD RCALL _Set_RW
(0164) Set_DI(0); //DI=0;
0843 2700 CLR R16
0844 DFB3 RCALL _Set_DI
(0165) Set_EN(0); //ENABLE=0;
0845 2700 CLR R16
0846 DFC1 RCALL _Set_EN
(0166) PORTC=0xc0+i; //PORTC=0xc0+i;
0847 2F84 MOV R24,R20
0848 5480 SUBI R24,0x40
0849 BB85 OUT 0x15,R24
(0167) DelayUs(10); //_DelayUs_();
084A E00A LDI R16,0xA
084B DF08 RCALL _DelayUs
(0168) Set_EN(1); //ENABLE=1;
084C E001 LDI R16,1
084D DFBA RCALL _Set_EN
(0169) DelayUs(10); //_DelayUs_();
084E E00A LDI R16,0xA
084F DF04 RCALL _DelayUs
(0170) DelayUs(10); //_DelayUs_();
0850 E00A LDI R16,0xA
0851 DF02 RCALL _DelayUs
(0171) Set_EN(0); //ENABLE=0;
0852 2700 CLR R16
0853 DFB4 RCALL _Set_EN
(0172) }
0854 D4FB RCALL pop_gset1
0855 9508 RET
_SetX:
i --> R20
0856 D4F6 RCALL push_gset1
0857 2F40 MOV R20,R16
(0173)
(0174) //***************************设置页(行)地址**************//
(0175) //参数说明:i=0~7
(0176) void SetX(uchar i)
(0177) {Set_RW(0); //RW=0;
0858 2700 CLR R16
0859 DFA6 RCALL _Set_RW
(0178) Set_DI(0); //DI=0;
085A 2700 CLR R16
085B DF9C RCALL _Set_DI
(0179) Set_EN(0); //ENABLE=0;
085C 2700 CLR R16
085D DFAA RCALL _Set_EN
(0180) PORTC=0xb8+i; //P0=0xb8+i;
085E 2F84 MOV R24,R20
085F 5488 SUBI R24,0x48
0860 BB85 OUT 0x15,R24
(0181) DelayUs(10); //_DelayUs_();
0861 E00A LDI R16,0xA
0862 DEF1 RCALL _DelayUs
(0182) Set_EN(1); //ENABLE=1;
0863 E001 LDI R16,1
0864 DFA3 RCALL _Set_EN
(0183) DelayUs(100); // _DelayUs_();
0865 E604 LDI R16,0x64
0866 DEED RCALL _DelayUs
(0184) DelayUs(100); //_DelayUs_();
0867 E604 LDI R16,0x64
0868 DEEB RCALL _DelayUs
(0185) Set_EN(0); //ENABLE=0;
0869 2700 CLR R16
086A DF9D RCALL _Set_EN
(0186) }
086B D4E4 RCALL pop_gset1
086C 9508 RET
_SetY:
i --> R20
086D D4DF RCALL push_gset1
086E 2F40 MOV R20,R16
(0187)
(0188) //***************************设置Y(列)地址***************//
(0189) //参数说明:i=0~63
(0190) void SetY(uchar i)
(0191) {Set_RW(0); //RW=0;
086F 2700 CLR R16
0870 DF8F RCALL _Set_RW
(0192) Set_DI(0); //DI=0;
0871 2700 CLR R16
0872 DF85 RCALL _Set_DI
(0193) Set_EN(0); //ENABLE=0;
0873 2700 CLR R16
0874 DF93 RCALL _Set_EN
(0194) PORTC=0x40+i; // P0=0x40+i;
0875 2F84 MOV R24,R20
0876 5C80 SUBI R24,0xC0
0877 BB85 OUT 0x15,R24
(0195) DelayUs(10); //_DelayUs_();
0878 E00A LDI R16,0xA
0879 DEDA RCALL _DelayUs
(0196) Set_EN(1); //ENABLE=1;
087A E001 LDI R16,1
087B DF8C RCALL _Set_EN
(0197) DelayUs(10); //_DelayUs_();
087C E00A LDI R16,0xA
087D DED6 RCALL _DelayUs
(0198) DelayUs(10); //_DelayUs_();
087E E00A LDI R16,0xA
087F DED4 RCALL _DelayUs
(0199) Set_EN(0); //ENABLE=0;
0880 2700 CLR R16
0881 DF86 RCALL _Set_EN
(0200) }
0882 D4CD RCALL pop_gset1
0883 9508 RET
_WriteByte:
i --> R20
0884 D4C8 RCALL push_gset1
0885 2F40 MOV R20,R16
(0201)
(0202) //***************************写显示数据********************//
(0203) //参数说明:i为送DDRAM的数据
(0204) void WriteByte(uchar i)
(0205) {Set_RW(0); //RW=0;
0886 2700 CLR R16
0887 DF78 RCALL _Set_RW
(0206) Set_DI(1); //DI=1;
0888 E001 LDI R16,1
0889 DF6E RCALL _Set_DI
(0207) Set_EN(0); //ENABLE=0;
088A 2700 CLR R16
088B DF7C RCALL _Set_EN
(0208) PORTC=i; //P0=i;
088C BB45 OUT 0x15,R20
(0209) DelayUs(10); //_DelayUs_();
088D E00A LDI R16,0xA
088E DEC5 RCALL _DelayUs
(0210) Set_EN(1); //ENABLE=1;
088F E001 LDI R16,1
0890 DF77 RCALL _Set_EN
(0211) DelayUs(10); //_DelayUs_();
0891 E00A LDI R16,0xA
0892 DEC1 RCALL _DelayUs
(0212) DelayUs(10); //_DelayUs_();
0893 E00A LDI R16,0xA
0894 DEBF RCALL _DelayUs
(0213) Set_EN(0); //ENABLE=0;
0895 2700 CLR R16
0896 DF71 RCALL _Set_EN
(0214) }
0897 D4B8 RCALL pop_gset1
0898 9508 RET
(0215)
(0216) //***************************LCD复位***********************//
(0217) void Reset(void)
(0218) {Set_RST(0); //RST=0;
_Reset:
0899 2700 CLR R16
089A DF85 RCALL _Set_RST
(0219) DelayMs(1);
089B E001 LDI R16,1
089C E010 LDI R17,0
089D DEA5 RCALL _DelayMs
(0220) Set_RST(1); //RST=1;
089E E001 LDI R16,1
(0221) }
089F CF80 RJMP _Set_RST
_ClearScreen:
i --> R20
j --> R22
k --> R22
08A0 D4C3 RCALL push_gset2
08A1 2F60 MOV R22,R16
(0222)
(0223) //***************************LCD清屏幕*********************//
(0224) //参数说明:LCD从k(0~7)行开始清屏幕
(0225) void ClearScreen(uchar k)
(0226) {uchar i,j;
(0227) Set_CS1(1); //CS1=1;选中右屏幕
08A2 E001 LDI R16,1
08A3 DF6C RCALL _Set_CS1
(0228) Set_CS2(1); //CS2=1;选中左屏幕
08A4 E001 LDI R16,1
08A5 DF72 RCALL _Set_CS2
(0229) for(i=k;i<8;i+=1)
08A6 2F46 MOV R20,R22
08A7 C00A RJMP 0x08B2
(0230) {SetX(i); //设置起始行
08A8 2F04 MOV R16,R20
08A9 DFAC RCALL _SetX
(0231) for(j=0;j<64;j++)
08AA 2766 CLR R22
08AB C003 RJMP 0x08AF
(0232) WriteByte(0x00); //向DDRAM写0清屏幕
08AC 2700 CLR R16
08AD DFD6 RCALL _WriteByte
08AE 9563 INC R22
08AF 3460 CPI R22,0x40
08B0 F3D8 BCS 0x08AC
08B1 9543 INC R20
08B2 3048 CPI R20,0x8
08B3 F3A0 BCS 0x08A8
(0233) }
(0234) }
08B4 D490 RCALL pop_gset2
08B5 9508 RET
(0235)
(0236) //***************************LCD初始化*********************//
(0237) void Init_LCD(void)
(0238) {Reset(); //LCD复位
_Init_LCD:
08B6 DFE2 RCALL _Reset
(0239) DelayMs(1);
08B7 E001 LDI R16,1
08B8 E010 LDI R17,0
08B9 DE89 RCALL _DelayMs
(0240) ClearScreen(0); //LCD清屏
08BA 2700 CLR R16
08BB DFE4 RCALL _ClearScreen
(0241) DisplayOnOff(1); //开启显示
08BC E001 LDI R16,1
08BD DF6A RCALL _DisplayOnOff
(0242) SetStartLine(0); //设置起始行
08BE 2700 CLR R16
(0243) }
08BF CF7F RJMP _SetStartLine
_WritePIC:
jj --> R22
ii --> R20
kk --> R22
j --> R10
i --> R14
disp --> R12
08C0 D4AC RCALL push_gset5
08C1 2EE2 MOV R14,R18
08C2 2EC0 MOV R12,R16
08C3 2ED1 MOV R13,R17
08C4 84AA LDD R10,Y+10
(0244)
(0245) //***************************LCD图象显示函数***************//
(0246) //参数说明:disp[]:图象数组名;i:LCD的起始行;j:LCD的结束行
(0247) //函数功能:从LCD的i行到j行显示数组disp[]所存的图象
(0248) void WritePIC(const uchar *disp,uchar i,uchar j)
(0249) {uchar ii=0;
08C5 2744 CLR R20
(0250) uchar jj=0;
08C6 2766 CLR R22
(0251) uchar kk=0;
(0252) SetX(0);
08C7 2700 CLR R16
08C8 DF8D RCALL _SetX
(0253) SetY(0);
08C9 2700 CLR R16
08CA DFA2 RCALL _SetY
(0254) for(ii=i;ii<j;ii++)
08CB 2D4E MOV R20,R14
08CC C02F RJMP 0x08FC
(0255) {for(kk=0;kk<64;kk++)
08CD 2766 CLR R22
08CE C013 RJMP 0x08E2
(0256) {Set_CS1(0); //选择左屏幕
08CF 2700 CLR R16
08D0 DF3F RCALL _Set_CS1
(0257) Set_CS2(1);
08D1 E001 LDI R16,1
08D2 DF45 RCALL _Set_CS2
(0258) SetX(ii); //设置页地址
08D3 2F04 MOV R16,R20
08D4 DF81 RCALL _SetX
(0259) SetY(kk); //设置列地址
08D5 2F06 MOV R16,R22
08D6 DF96 RCALL _SetY
(0260) WriteByte(*disp); //写数据
08D7 2DEC MOV R30,R12
08D8 2DFD MOV R31,R13
08D9 95C8 LPM
08DA 2D00 MOV R16,R0
08DB DFA8 RCALL _WriteByte
(0261) disp++;}
08DC 2D8C MOV R24,R12
08DD 2D9D MOV R25,R13
08DE 9601 ADIW R24,1
08DF 2EC8 MOV R12,R24
08E0 2ED9 MOV R13,R25
08E1 9563 INC R22
08E2 3460 CPI R22,0x40
08E3 F358 BCS 0x08CF
(0262) for(kk=0;kk<64;kk++)
08E4 2766 CLR R22
08E5 C013 RJMP 0x08F9
(0263) {Set_CS1(1); //选择右屏幕
08E6 E001 LDI R16,1
08E7 DF28 RCALL _Set_CS1
(0264) Set_CS2(0);
08E8 2700 CLR R16
08E9 DF2E RCALL _Set_CS2
(0265) SetX(ii); //设置页地址
08EA 2F04 MOV R16,R20
08EB DF6A RCALL _SetX
(0266) SetY(kk); //设置列地址
08EC 2F06 MOV R16,R22
08ED DF7F RCALL _SetY
(0267) WriteByte(*disp); //写数据
08EE 2DEC MOV R30,R12
08EF 2DFD MOV R31,R13
08F0 95C8 LPM
08F1 2D00 MOV R16,R0
08F2 DF91 RCALL _WriteByte
(0268) disp++;}}
08F3 2D8C MOV R24,R12
08F4 2D9D MOV R25,R13
08F5 9601 ADIW R24,1
08F6 2EC8 MOV R12,R24
08F7 2ED9 MOV R13,R25
08F8 9563 INC R22
08F9 3460 CPI R22,0x40
08FA F358 BCS 0x08E6
08FB 9543 INC R20
08FC 154A CP R20,R10
08FD F408 BCC 0x08FF
08FE CFCE RJMP 0x08CD
(0269) }
08FF D44B RCALL pop_gset5
0900 9508 RET
_WriteWord:
i --> R20
cs --> Y+10
y --> R10
x --> R12
disp --> R22
0901 D468 RCALL push_gset4
0902 2EC2 MOV R12,R18
0903 2F60 MOV R22,R16
0904 2F71 MOV R23,R17
0905 84A8 LDD R10,Y+8
(0270)
(0271) //***************************LCD中文汉字显示函数***********//
(0272) //参数说明:disp[]:汉字字模数组名;
(0273) //参数说明:x:LCD的页地址;y:LCD的列地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -