📄 ec1602.lst
字号:
(0098) }
(0099) }
(0100)
(0101) // Clear LCD Screen
(0102) void Clear(void)
(0103) {
(0104) SendByte(iCmd, LCD_CLS);
_Clear:
016D E021 LDI R18,1
016E 2700 CLR R16
016F DFA6 RCALL _SendByte
0170 9508 RET
(0105) //DelayMs(3);
(0106) // 2ms delay is Necessary after sending LCD_CLS command !!!
(0107) }
(0108)
(0109) // Wait some time and clear screen
(0110) void wait_and_clear(void)
(0111) {
(0112) DelayMs(3000);
_wait_and_clear:
0171 EB08 LDI R16,0xB8
0172 E01B LDI R17,0xB
0173 DF22 RCALL _DelayMs
(0113) Clear();
0174 DFF8 RCALL _Clear
0175 9508 RET
_FillCGRAM:
i --> R20
0176 940E023C CALL push_gset1
(0114) }
(0115)
(0116) // Fill CGRAM with array CGRAM[]
(0117) void FillCGRAM(void)
(0118) {
(0119) uint8 i;
(0120) SendByte(iCmd, LCD_CGRAM_ADDR);
0178 E420 LDI R18,0x40
0179 2700 CLR R16
017A DF9B RCALL _SendByte
(0121) for (i = 0; i < LCD_CGMAX; i++)
017B 2744 CLR R20
017C C00A RJMP 0x0187
(0122) {
(0123) SendByte(iDat, CGRAM[i]);
017D E584 LDI R24,0x54
017E E090 LDI R25,0
017F 2FE4 MOV R30,R20
0180 27FF CLR R31
0181 0FE8 ADD R30,R24
0182 1FF9 ADC R31,R25
0183 9124 LPM R18,0(Z)
0184 E001 LDI R16,1
0185 DF90 RCALL _SendByte
0186 9543 INC R20
0187 3440 CPI R20,0x40
0188 F3A0 BCS 0x017D
0189 940E023F CALL pop_gset1
018B 9508 RET
_ShowCGRAM:
i --> R20
k --> R22
018C 940E0238 CALL push_gset3
(0124) }
(0125) }
(0126)
(0127) // Show All patterns in CGRAM
(0128) void ShowCGRAM(void)
(0129) {
(0130) uint8 i,k;
(0131) for (i = 0; i < 8; i++)
018E 2744 CLR R20
018F C018 RJMP 0x01A8
(0132) {
(0133) SendByte(iCmd, LCD_L1);
0190 E820 LDI R18,0x80
0191 2700 CLR R16
0192 DF83 RCALL _SendByte
(0134) for (k = 0; k < LCD_CHAR; k++)
0193 2766 CLR R22
0194 C00F RJMP 0x01A4
(0135) {
(0136) #if defined(LCD_L2)
(0137) switch (k)
0195 2EA6 MOV R10,R22
0196 24BB CLR R11
0197 01C5 MOVW R24,R10
0198 3184 CPI R24,0x14
0199 E0E0 LDI R30,0
019A 079E CPC R25,R30
019B F009 BEQ 0x019D
019C C003 RJMP 0x01A0
(0138) {
(0139) case LCD_COL:
(0140) SendByte(iCmd, LCD_L2); break;
019D EC20 LDI R18,0xC0
019E 2700 CLR R16
019F DF76 RCALL _SendByte
(0141) #if defined(LCD_L3)
(0142) case LCD_COL*2:
(0143) SendByte(iCmd, LCD_L3); break;
(0144) #endif
(0145) #if defined(LCD_L4)
(0146) case LCD_COL*3:
(0147) SendByte(iCmd, LCD_L4); break;
(0148) #endif
(0149) default:
(0150) break;
(0151) }
(0152) #endif
(0153) SendByte(iDat, i);
01A0 2F24 MOV R18,R20
01A1 E001 LDI R16,1
01A2 DF73 RCALL _SendByte
01A3 9563 INC R22
01A4 3268 CPI R22,0x28
01A5 F378 BCS 0x0195
(0154) }
(0155) wait_and_clear();
01A6 DFCA RCALL _wait_and_clear
01A7 9543 INC R20
01A8 3048 CPI R20,0x8
01A9 F330 BCS 0x0190
01AA 940E0231 CALL pop_gset3
01AC 9508 RET
_CallBultinChar:
i --> R20
k --> R22
01AD 940E0238 CALL push_gset3
(0156) }
(0157) }
(0158)
(0159) // Call built-in Charactors
(0160) void CallBultinChar(void)
(0161) {
(0162) uint8 i, k;
(0163) for (i = 0; i < LCD_COL; i += LCD_ROW)
01AF 2744 CLR R20
01B0 C01B RJMP 0x01CC
(0164) {
(0165) SendByte(iCmd, LCD_L1);
01B1 E820 LDI R18,0x80
01B2 2700 CLR R16
01B3 DF62 RCALL _SendByte
(0166) for (k = 0; k < LCD_CHAR; k++)
01B4 2766 CLR R22
01B5 C012 RJMP 0x01C8
(0167) {
(0168) #if defined(LCD_L2)
(0169) switch (k)
01B6 2EA6 MOV R10,R22
01B7 24BB CLR R11
01B8 01C5 MOVW R24,R10
01B9 3184 CPI R24,0x14
01BA E0E0 LDI R30,0
01BB 079E CPC R25,R30
01BC F009 BEQ 0x01BE
01BD C003 RJMP 0x01C1
(0170) {
(0171) case LCD_COL:
(0172) SendByte(iCmd, LCD_L2); break;
01BE EC20 LDI R18,0xC0
01BF 2700 CLR R16
01C0 DF55 RCALL _SendByte
(0173) #if defined(LCD_L3)
(0174) case LCD_COL*2:
(0175) SendByte(iCmd, LCD_L3); break;
(0176) #endif
(0177) #if defined(LCD_L4)
(0178) case LCD_COL*3:
(0179) SendByte(iCmd, LCD_L4); break;
(0180) #endif
(0181) default:
(0182) break;
(0183) }
(0184) #endif
(0185) SendByte(iDat, k + LCD_COL*i);
01C1 E184 LDI R24,0x14
01C2 9F84 MUL R24,R20
01C3 2F26 MOV R18,R22
01C4 0D20 ADD R18,R0
01C5 E001 LDI R16,1
01C6 DF4F RCALL _SendByte
01C7 9563 INC R22
01C8 3268 CPI R22,0x28
01C9 F360 BCS 0x01B6
(0186) }
(0187) wait_and_clear();
01CA DFA6 RCALL _wait_and_clear
01CB 5F4E SUBI R20,0xFE
01CC 3144 CPI R20,0x14
01CD F318 BCS 0x01B1
01CE 940E0231 CALL pop_gset3
01D0 9508 RET
(0188) }
(0189) }
(0190) // LCD initialize procedure
(0191) void LCD_Initial(void)
(0192) {
(0193) delay100ms(); // Wait for internal initialization
_LCD_Initial:
01D1 DED9 RCALL _delay100ms
(0194) //DelayMs(15);
(0195) //port_ini();
(0196) LCD_CTRL_DDR = 0x0f;
01D2 E08F LDI R24,0xF
01D3 BB87 OUT 0x17,R24
(0197) /*CLR_RS;
(0198) CLR_RW;
(0199) SET_E;
(0200) LCD_DO = 0x38; // Set Interface to 8-bit
(0201) CLR_E;
(0202) DelayMs(5);
(0203)
(0204) CLR_RS;
(0205) CLR_RW;
(0206) SET_E;
(0207) LCD_DO = 0x38; // Set Interface to 8-bit
(0208) CLR_E;
(0209) DelayUs(100);
(0210)
(0211) CLR_RS;
(0212) CLR_RW;
(0213) SET_E;
(0214) LCD_DO = 0x38; // Set Interface to 8-bit
(0215) CLR_E;
(0216)
(0217) CLR_RS;
(0218) CLR_RW;
(0219) SET_E;
(0220) LCD_DO = 0x38; // Set Interface to 4-bit
(0221) CLR_E;*/
(0222)
(0223) SendByte(iCmd, LCD_FUNCTION); // Function Set
01D4 E328 LDI R18,0x38
01D5 2700 CLR R16
01D6 DF3F RCALL _SendByte
(0224) //DelayUs(50);
(0225) SendByte(iCmd, LCD_ON);
01D7 E02C LDI R18,0xC
01D8 2700 CLR R16
01D9 DF3C RCALL _SendByte
(0226) //DelayUs(50);
(0227) Clear();
01DA DF92 RCALL _Clear
(0228) SendByte(iCmd, LCD_ENTRY); // Entry Mode Set
01DB E026 LDI R18,6
01DC 2700 CLR R16
01DD DF38 RCALL _SendByte
(0229)
(0230) // Display system Info
(0231) #ifdef LCD_4BIT
(0232) Gotoxy(1, 4);
(0233) SendStr("LCD_4BIT");
(0234) #else
(0235) Gotoxy(1, 4);
01DE E024 LDI R18,4
01DF E001 LDI R16,1
01E0 DF76 RCALL _Gotoxy
(0236) SendStr("LCD_8BIT");
01E1 E80D LDI R16,0x8D
01E2 E010 LDI R17,0
01E3 DF43 RCALL _SendStr
(0237) #endif
(0238)
(0239) Gotoxy(2,1);
01E4 E021 LDI R18,1
01E5 E002 LDI R16,2
01E6 DF70 RCALL _Gotoxy
(0240) SendStr("LCD_COLS: ");
01E7 E802 LDI R16,0x82
01E8 E010 LDI R17,0
01E9 DF3D RCALL _SendStr
(0241) SendNbr(LCD_COL);
01EA E104 LDI R16,0x14
01EB DF4B RCALL _SendNbr
(0242) wait_and_clear();
01EC DF84 RCALL _wait_and_clear
(0243) Gotoxy(1,1);
01ED E021 LDI R18,1
01EE E001 LDI R16,1
01EF DF67 RCALL _Gotoxy
(0244) SendStr("LCD_ROWS: ");
01F0 E707 LDI R16,0x77
01F1 E010 LDI R17,0
01F2 DF34 RCALL _SendStr
(0245) SendNbr(LCD_ROW);
01F3 E002 LDI R16,2
01F4 DF42 RCALL _SendNbr
(0246) Gotoxy(2,1);
01F5 E021 LDI R18,1
01F6 E002 LDI R16,2
01F7 DF5F RCALL _Gotoxy
(0247) SendStr("LCD_CHAR: ");
01F8 E60C LDI R16,0x6C
01F9 E010 LDI R17,0
01FA DF2C RCALL _SendStr
(0248) SendNbr(LCD_CHAR);
01FB E208 LDI R16,0x28
01FC DF3A RCALL _SendNbr
(0249) wait_and_clear();
01FD DF73 RCALL _wait_and_clear
01FE 9508 RET
FILE: H:\ICC_Test\EC1602\main.c
(0001) // Use SPLC780D for EG1602
(0002) #include <iom16v.h>
(0003) #include "inc/macros.h"
(0004) #include "inc/datatype.h"
(0005) #include "inc/idelay.h"
(0006) #include "inc/convert.h"
(0007) #include "inc/780.h"
(0008) void main(void)
(0009) {
(0010) SET_buzzer;
_main:
01FF 9AC3 SBI 0x18,3
(0011) LCD_Initial();
0200 DFD0 RCALL _LCD_Initial
(0012) CLR_buzzer;
0201 98C3 CBI 0x18,3
(0013) FillCGRAM();
0202 DF73 RCALL _FillCGRAM
0203 C010 RJMP 0x0214
(0014) while(1)
(0015) {
(0016) Gotoxy(2,5);
0204 E025 LDI R18,5
0205 E002 LDI R16,2
0206 DF50 RCALL _Gotoxy
(0017) SendStr("Welcome!");
0207 E603 LDI R16,0x63
0208 E010 LDI R17,0
0209 DF1D RCALL _SendStr
(0018) wait_and_clear();
020A DF66 RCALL _wait_and_clear
(0019)
(0020)
(0021) ShowCGRAM();
020B DF80 RCALL _ShowCGRAM
(0022) CallBultinChar();
020C DFA0 RCALL _CallBultinChar
(0023) Gotoxy(2,7);
020D E027 LDI R18,7
020E E002 LDI R16,2
020F DF47 RCALL _Gotoxy
(0024) SendStr("OK");
0210 E600 LDI R16,0x60
0211 E010 LDI R17,0
0212 DF14 RCALL _SendStr
(0025) wait_and_clear();
FILE: <library>
0213 DF5D RCALL _wait_and_clear
0214 CFEF RJMP 0x0204
0215 9508 RET
mod8u:
0216 9468 BSET 6
0217 C001 RJMP xdiv8u
div8u:
0218 94E8 BCLR 6
xdiv8u:
0219 932A ST R18,-Y
021A 92FA ST R15,-Y
021B 92EA ST R14,-Y
021C 24FF CLR R15
021D 24EE CLR R14
021E E120 LDI R18,0x10
021F 0F00 LSL R16
0220 1CFF ROL R15
0221 1CEE ROL R14
0222 16E1 CP R14,R17
0223 F010 BCS 0x0226
0224 1AE1 SUB R14,R17
0225 9503 INC R16
0226 952A DEC R18
0227 F7B9 BNE 0x021F
0228 F40E BRTC 0x022A
0229 2D0E MOV R16,R14
022A 90E9 LD R14,Y+
022B 90F9 LD R15,Y+
022C 9129 LD R18,Y+
022D 9508 RET
pop_gset2:
022E E0E2 LDI R30,2
022F 940C0240 JMP pop
pop_gset3:
0231 E0E4 LDI R30,4
0232 940C0240 JMP pop
push_gset5:
0234 92FA ST R15,-Y
0235 92EA ST R14,-Y
push_gset4:
0236 92DA ST R13,-Y
0237 92CA ST R12,-Y
push_gset3:
0238 92BA ST R11,-Y
0239 92AA ST R10,-Y
push_gset2:
023A 937A ST R23,-Y
023B 936A ST R22,-Y
push_gset1:
023C 935A ST R21,-Y
023D 934A ST R20,-Y
023E 9508 RET
pop_gset1:
023F E0E1 LDI R30,1
pop:
0240 9149 LD R20,Y+
0241 9159 LD R21,Y+
0242 FDE0 SBRC R30,0
0243 9508 RET
0244 9169 LD R22,Y+
0245 9179 LD R23,Y+
0246 FDE1 SBRC R30,1
0247 9508 RET
0248 90A9 LD R10,Y+
0249 90B9 LD R11,Y+
024A FDE2 SBRC R30,2
024B 9508 RET
024C 90C9 LD R12,Y+
024D 90D9 LD R13,Y+
024E FDE3 SBRC R30,3
024F 9508 RET
0250 90E9 LD R14,Y+
0251 90F9 LD R15,Y+
0252 9508 RET
lsr8:
0253 2311 TST R17
0254 F019 BEQ 0x0258
0255 9506 LSR R16
0256 951A DEC R17
0257 CFFB RJMP lsr8
0258 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -