⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ec1602.lst

📁 ATmega系列单片机驱动1602字符型液晶显示器
💻 LST
📖 第 1 页 / 共 2 页
字号:
(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 + -