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

📄 project.lst

📁 AVR单片机C语言程序设计实例精粹
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0135) 	NOP();
    0230 0000      NOP
(0136) 	Set_EN(0);
    0231 2700      CLR	R16
    0232 DFCA      RCALL	_Set_EN
(0137) }
    0233 940E02DF  CALL	pop_gset2
    0235 9508      RET
_LCD_Write_Data:
  status               --> R22
  data                 --> R20
    0236 940E02FC  CALL	push_gset2
    0238 2F62      MOV	R22,R18
    0239 2F40      MOV	R20,R16
(0138) 
(0139) //******************************************************************************
(0140) // Function    : LCD_Write_Data
(0141) // Input       : data   - Data to be written to LCD
(0142) //               status - Detect LCD Status when 1 
(0143) // Output      : none
(0144) // Description : Write Data to LCD
(0145) //******************************************************************************
(0146) void LCD_Write_Data(INT8U data,INT8U status)
(0147) {
(0148) 	if(status == 1)
    023A 3061      CPI	R22,1
    023B F419      BNE	0x023F
(0149) 	{
(0150) 		while(LCD_Read_BF() != 0) {;}
    023C DFC8      RCALL	_LCD_Read_BF
    023D 2300      TST	R16
    023E F7E9      BNE	0x023C
(0151) 	}
(0152) 	Set_EN(0);
    023F 2700      CLR	R16
    0240 DFBC      RCALL	_Set_EN
(0153) 	Set_RS(1);
    0241 E001      LDI	R16,1
    0242 DFAE      RCALL	_Set_RS
(0154) 	Set_RW(0);
    0243 2700      CLR	R16
    0244 DFB2      RCALL	_Set_RW
(0155) 	Set_Data(data);
    0245 2F04      MOV	R16,R20
    0246 DFBC      RCALL	_Set_Data
(0156) 	Set_EN(1);
    0247 E001      LDI	R16,1
    0248 DFB4      RCALL	_Set_EN
(0157) 	NOP();
    0249 0000      NOP
(0158) 	NOP();
    024A 0000      NOP
(0159) 	Set_EN(0);
    024B 2700      CLR	R16
    024C DFB0      RCALL	_Set_EN
(0160) }
    024D 940E02DF  CALL	pop_gset2
    024F 9508      RET
_LCD_Read_Data:
  data                 --> R20
  status               --> R20
    0250 940E02E5  CALL	push_gset1
    0252 2F40      MOV	R20,R16
(0161) 
(0162) //******************************************************************************
(0163) // Function    : LCD_Read_Data
(0164) // Input       : status - Detect LCD Status when 1 
(0165) // Output      : Data read from LCD
(0166) // Description : Read Data from LCD
(0167) //******************************************************************************
(0168) INT8U LCD_Read_Data(INT8U status)
(0169) {
(0170) 	INT8U data;
(0171) 	if(status == 1)
    0253 3041      CPI	R20,1
    0254 F419      BNE	0x0258
(0172) 	{
(0173) 		while(LCD_Read_BF() != 0) {;}
    0255 DFAF      RCALL	_LCD_Read_BF
    0256 2300      TST	R16
    0257 F7E9      BNE	0x0255
(0174) 	}
(0175) 	DDRA = 0x00;
    0258 2422      CLR	R2
    0259 BA2A      OUT	0x1A,R2
(0176) 	Set_EN(0);
    025A 2700      CLR	R16
    025B DFA1      RCALL	_Set_EN
(0177) 	Set_RS(1);
    025C E001      LDI	R16,1
    025D DF93      RCALL	_Set_RS
(0178) 	Set_RW(1);
    025E E001      LDI	R16,1
    025F DF97      RCALL	_Set_RW
(0179) 	Set_EN(1);
    0260 E001      LDI	R16,1
    0261 DF9B      RCALL	_Set_EN
(0180) 	NOP();
    0262 0000      NOP
(0181) 	NOP();
    0263 0000      NOP
(0182) 	data = PINA;
    0264 B349      IN	R20,0x19
(0183) 	Set_EN(0);
    0265 2700      CLR	R16
    0266 DF96      RCALL	_Set_EN
(0184) 	DDRA = 0xFF;
    0267 EF8F      LDI	R24,0xFF
    0268 BB8A      OUT	0x1A,R24
(0185) 	return(data);
    0269 2F04      MOV	R16,R20
    026A 940E02E8  CALL	pop_gset1
    026C 9508      RET
(0186) }
(0187) 
(0188) //******************************************************************************
(0189) // Function    : LCD_Reset
(0190) // Input       : none 
(0191) // Output      : none
(0192) // Description : LCD software reset,must execute according to time sequence
(0193) //******************************************************************************
(0194) void LCD_Reset(void)
(0195) {
(0196) 	Delay_ms(15);
_LCD_Reset:
    026D E00F      LDI	R16,0xF
    026E D059      RCALL	_Delay_ms
(0197) 	LCD_Write_Command(0x38,0);
    026F 2722      CLR	R18
    0270 E308      LDI	R16,0x38
    0271 DFAA      RCALL	_LCD_Write_Command
(0198) 	Delay_ms(5);
    0272 E005      LDI	R16,5
    0273 D054      RCALL	_Delay_ms
(0199) 	LCD_Write_Command(0x38,0);
    0274 2722      CLR	R18
    0275 E308      LDI	R16,0x38
    0276 DFA5      RCALL	_LCD_Write_Command
(0200) 	Delay_ms(5);
    0277 E005      LDI	R16,5
    0278 D04F      RCALL	_Delay_ms
(0201) 	LCD_Write_Command(0x38,0);
    0279 2722      CLR	R18
    027A E308      LDI	R16,0x38
    027B DFA0      RCALL	_LCD_Write_Command
(0202) 	LCD_Write_Command(0x38,1);
    027C E021      LDI	R18,1
    027D E308      LDI	R16,0x38
    027E DF9D      RCALL	_LCD_Write_Command
(0203) 	LCD_Write_Command(0x08,1);
    027F E021      LDI	R18,1
    0280 E008      LDI	R16,0x8
    0281 DF9A      RCALL	_LCD_Write_Command
(0204) 	LCD_Write_Command(0x01,1);
    0282 E021      LDI	R18,1
    0283 E001      LDI	R16,1
    0284 DF97      RCALL	_LCD_Write_Command
(0205) 	LCD_Write_Command(0x06,1);
    0285 E021      LDI	R18,1
    0286 E006      LDI	R16,6
    0287 DF94      RCALL	_LCD_Write_Command
(0206) 	LCD_Write_Command(0x0C,1);
    0288 E021      LDI	R18,1
    0289 E00C      LDI	R16,0xC
(0207) }
    028A CF91      RJMP	_LCD_Write_Command
_LCD_Show_Char:
  address              --> R20
  code                 --> Y+4
  y                    --> R20
  x                    --> R22
    028B 940E02FC  CALL	push_gset2
    028D 2F42      MOV	R20,R18
    028E 2F60      MOV	R22,R16
(0208) 
(0209) //******************************************************************************
(0210) // Function    : LCD_Show_Char
(0211) // Input       : x - Row of LCD(0 to 1);
(0212) //               y - Column of LCD(0 to 15);
(0213) //               code - Code of Char  
(0214) // Output      : none
(0215) // Description : Display a Char at Setting Row and Column
(0216) //******************************************************************************
(0217) void LCD_Show_Char(INT8U x,INT8U y,INT8U code)
(0218) {
(0219) 	INT8U address;
(0220) 	if((x < 2) && (y < 16))
    028F 3062      CPI	R22,2
    0290 F470      BCC	0x029F
    0291 3140      CPI	R20,0x10
    0292 F460      BCC	0x029F
(0221) 	{
(0222) 		address = 0x40 * x + y;
    0293 E480      LDI	R24,0x40
    0294 9F86      MUL	R24,R22
    0295 2C20      MOV	R2,R0
    0296 0E24      ADD	R2,R20
    0297 2D42      MOV	R20,R2
(0223) 		LCD_Write_Command(0x80 | address,1);
    0298 E021      LDI	R18,1
    0299 2D02      MOV	R16,R2
    029A 6800      ORI	R16,0x80
    029B DF80      RCALL	_LCD_Write_Command
(0224) 		LCD_Write_Data(code,1);
    029C E021      LDI	R18,1
    029D 810C      LDD	R16,Y+4
    029E DF97      RCALL	_LCD_Write_Data
(0225) 	}
(0226) }
    029F 940E02DF  CALL	pop_gset2
    02A1 9508      RET
_LCD_Show_String:
  x_address            --> R20
  y_address            --> R22
  pdata                --> R10
  y                    --> R12
  x                    --> R22
    02A2 940E0304  CALL	push_gset4
    02A4 2EC2      MOV	R12,R18
    02A5 2F60      MOV	R22,R16
    02A6 9721      SBIW	R28,1
    02A7 84A9      LDD	R10,Y+9
    02A8 84BA      LDD	R11,Y+10
(0227) 
(0228) //******************************************************************************
(0229) // Function    : LCD_Show_String
(0230) // Input       : x - Row of LCD(0 to 1);
(0231) //               y - Column of LCD(0 to 15);
(0232) //               pdata - Pointer to a String  
(0233) // Output      : none
(0234) // Description : Display a String from at Setting Row and Column
(0235) //******************************************************************************
(0236) void LCD_Show_String(INT8U x,INT8U y,INT8U *pdata)
(0237) {
(0238) 	INT8U x_address = x;
    02A9 2F46      MOV	R20,R22
(0239) 	INT8U y_address = y;
    02AA 2D6C      MOV	R22,R12
    02AB C014      RJMP	0x02C0
(0240) 	while(*pdata != '\0')
(0241) 	{
(0242) 		LCD_Show_Char(x_address,y_address,*pdata++);
    02AC 01F5      MOVW	R30,R10
    02AD 9021      LD	R2,Z+
    02AE 015F      MOVW	R10,R30
    02AF 8228      STD	Y+0,R2
    02B0 2F26      MOV	R18,R22
    02B1 2F04      MOV	R16,R20
    02B2 DFD8      RCALL	_LCD_Show_Char
(0243) 		y_address++;
    02B3 9563      INC	R22
(0244) 		if((x_address == 0) && (y_address >= 16))
    02B4 2344      TST	R20
    02B5 F429      BNE	0x02BB
    02B6 3160      CPI	R22,0x10
    02B7 F018      BCS	0x02BB
(0245) 		{ 
(0246) 			x_address = 1;
    02B8 E041      LDI	R20,1
(0247) 			y_address = 0;
    02B9 2766      CLR	R22
(0248) 		}
    02BA C005      RJMP	0x02C0
(0249) 		else if((x_address == 1) && (y_address >= 16))
    02BB 3041      CPI	R20,1
    02BC F419      BNE	0x02C0
    02BD 3160      CPI	R22,0x10
    02BE F008      BCS	0x02C0
(0250) 		{
(0251) 			return;
    02BF C004      RJMP	0x02C4
    02C0 01F5      MOVW	R30,R10
    02C1 8020      LDD	R2,Z+0
    02C2 2022      TST	R2
    02C3 F741      BNE	0x02AC
(0252) 		}
(0253) 	}
(0254) }
    02C4 9621      ADIW	R28,1
    02C5 940E02E2  CALL	pop_gset4
    02C7 9508      RET
_Delay_ms:
  cnt                  --> R20
  time                 --> R16
    02C8 940E02E5  CALL	push_gset1
(0255) 
(0256) //******************************************************************************
(0257) // Function    : Delay_ms
(0258) // Input       : time - Delay Time  
(0259) // Output      : none
(0260) // Description : Inaccurate ms Level Delay for Software Reset of LCD
(0261) //******************************************************************************
(0262) void Delay_ms(INT8U time)
(0263) {
(0264) 	INT16U cnt = 0;
    02CA 2744      CLR	R20
    02CB 2755      CLR	R21
    02CC C00A      RJMP	0x02D7
(0265) 	while(time--)
(0266) 	{
(0267) 		for(cnt = 0;cnt < 5000;cnt++)
    02CD 2744      CLR	R20
    02CE 2755      CLR	R21
    02CF C003      RJMP	0x02D3
(0268) 		{
(0269) 			NOP();
    02D0 0000      NOP
    02D1 5F4F      SUBI	R20,0xFF
    02D2 4F5F      SBCI	R21,0xFF
    02D3 3848      CPI	R20,0x88
    02D4 E1E3      LDI	R30,0x13
    02D5 075E      CPC	R21,R30
    02D6 F3C8      BCS	0x02D0
    02D7 2E20      MOV	R2,R16
    02D8 2433      CLR	R3
    02D9 5001      SUBI	R16,1
    02DA 2022      TST	R2
    02DB F789      BNE	0x02CD
(0270) 		}
(0271) 	}
(0272) }
FILE: <library>
    02DC 940E02E8  CALL	pop_gset1
    02DE 9508      RET
pop_gset2:
    02DF E0E2      LDI	R30,2
    02E0 940C02E9  JMP	pop
pop_gset4:
    02E2 E0E8      LDI	R30,0x8
    02E3 940C02E9  JMP	pop
push_gset1:
    02E5 935A      ST	R21,-Y
    02E6 934A      ST	R20,-Y
    02E7 9508      RET
pop_gset1:
    02E8 E0E1      LDI	R30,1
pop:
    02E9 9149      LD	R20,Y+
    02EA 9159      LD	R21,Y+
    02EB FDE0      SBRC	R30,0
    02EC 9508      RET
    02ED 9169      LD	R22,Y+
    02EE 9179      LD	R23,Y+
    02EF FDE1      SBRC	R30,1
    02F0 9508      RET
    02F1 90A9      LD	R10,Y+
    02F2 90B9      LD	R11,Y+
    02F3 FDE2      SBRC	R30,2
    02F4 9508      RET
    02F5 90C9      LD	R12,Y+
    02F6 90D9      LD	R13,Y+
    02F7 FDE3      SBRC	R30,3
    02F8 9508      RET
    02F9 90E9      LD	R14,Y+
    02FA 90F9      LD	R15,Y+
    02FB 9508      RET
push_gset2:
    02FC 937A      ST	R23,-Y
    02FD 936A      ST	R22,-Y
    02FE 940C02E5  JMP	push_gset1
push_gset3:
    0300 92BA      ST	R11,-Y
    0301 92AA      ST	R10,-Y
    0302 940C02FC  JMP	push_gset2
push_gset4:
    0304 92DA      ST	R13,-Y
    0305 92CA      ST	R12,-Y
    0306 940C0300  JMP	push_gset3
push_lset:
    0308 93FA      ST	R31,-Y
    0309 93EA      ST	R30,-Y
    030A 93BA      ST	R27,-Y
    030B 93AA      ST	R26,-Y
    030C 939A      ST	R25,-Y
    030D 938A      ST	R24,-Y
    030E 933A      ST	R19,-Y
    030F 932A      ST	R18,-Y
    0310 931A      ST	R17,-Y
    0311 930A      ST	R16,-Y
    0312 929A      ST	R9,-Y
    0313 928A      ST	R8,-Y
    0314 927A      ST	R7,-Y
    0315 926A      ST	R6,-Y
    0316 925A      ST	R5,-Y
    0317 924A      ST	R4,-Y
    0318 923A      ST	R3,-Y
    0319 922A      ST	R2,-Y
    031A 921A      ST	R1,-Y
    031B 920A      ST	R0,-Y
    031C B60F      IN	R0,0x3F
    031D 920A      ST	R0,-Y
    031E 9508      RET
pop_lset:
    031F 9009      LD	R0,Y+
    0320 BE0F      OUT	0x3F,R0
    0321 9009      LD	R0,Y+
    0322 9019      LD	R1,Y+
    0323 9029      LD	R2,Y+
    0324 9039      LD	R3,Y+
    0325 9049      LD	R4,Y+
    0326 9059      LD	R5,Y+
    0327 9069      LD	R6,Y+
    0328 9079      LD	R7,Y+
    0329 9089      LD	R8,Y+
    032A 9099      LD	R9,Y+
    032B 9109      LD	R16,Y+
    032C 9119      LD	R17,Y+
    032D 9129      LD	R18,Y+
    032E 9139      LD	R19,Y+
    032F 9189      LD	R24,Y+
    0330 9199      LD	R25,Y+
    0331 91A9      LD	R26,Y+
    0332 91B9      LD	R27,Y+
    0333 91E9      LD	R30,Y+
    0334 91F9      LD	R31,Y+
    0335 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -