?? 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 + -