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

📄 lcd.lst

📁 作为LCD显示的 AVR开发学习源码
💻 LST
字号:
__text_start:
__start:
    0039 E5CF      LDI	R28,0x5F
    003A E0D4      LDI	R29,4
    003B BFCD      OUT	0x3D,R28
    003C BFDE      OUT	0x3E,R29
    003D 51C0      SUBI	R28,0x10
    003E 40D0      SBCI	R29,0
    003F EA0A      LDI	R16,0xAA
    0040 8308      STD	Y+0,R16
    0041 2400      CLR	R0
    0042 E6E0      LDI	R30,0x60
    0043 E0F0      LDI	R31,0
    0044 E010      LDI	R17,0
    0045 36E0      CPI	R30,0x60
    0046 07F1      CPC	R31,R17
    0047 F011      BEQ	0x004A
    0048 9201      ST	R0,Z+
    0049 CFFB      RJMP	0x0045
    004A 8300      STD	Z+0,R16
    004B E7E2      LDI	R30,0x72
    004C E0F0      LDI	R31,0
    004D E6A0      LDI	R26,0x60
    004E E0B0      LDI	R27,0
    004F E010      LDI	R17,0
    0050 37E2      CPI	R30,0x72
    0051 07F1      CPC	R31,R17
    0052 F021      BEQ	0x0057
    0053 95C8      LPM
    0054 9631      ADIW	R30,1
    0055 920D      ST	R0,X+
    0056 CFF9      RJMP	0x0050
    0057 940E00AF  CALL	_main
_exit:
    0059 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  ms                   --> R16
    005A 940E00EB  CALL	push_gset1
FILE: C:\DOCUME~1\shen\桌面\lcd1602new.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) 
(0005) #define		Enableon			PORTB |=BIT(3);		   //EN
(0006) #define		Enableoff			PORTB &=~BIT(3);
(0007) 
(0008) #define		Dion			PORTB |=BIT(5);		   //DI
(0009) #define		Dioff			PORTB &=~BIT(5);
(0010) 
(0011) #define		RWon			PORTB |=BIT(4);		   //RW
(0012) #define		RWoff			PORTB &=~BIT(4);
(0013) 
(0014) 
(0015) 
(0016) 
(0017) extern const unsigned char dis1[] = {"AVR Demo Board"};
(0018) extern const unsigned char dis2[] = {"98dian@163.com"};
(0019) 
(0020) /****************************************************************************
(0021) 函数功能:延时子程序
(0022) 作    者:沈建良
(0023) 时    间:2006年4月25日
(0024) 入口参数:ms
(0025) 出口参数:
(0026) ****************************************************************************/
(0027) void delay(unsigned char ms)
(0028) {							// 延时子程序
    005C C00C      RJMP	0x0069
(0029) 	int i;
(0030) 	while(ms--)
(0031) 	{
(0032) 		for(i = 0; i< 250; i++)
    005D 2744      CLR	R20
    005E 2755      CLR	R21
(0033) 		{
(0034) 		 	NOP();
    005F 0000      NOP
(0035) 			NOP();
    0060 0000      NOP
(0036) 			NOP();
    0061 0000      NOP
(0037) 			NOP();
    0062 0000      NOP
    0063 5F4F      SUBI	R20,0xFF
    0064 4F5F      SBCI	R21,0xFF
    0065 3F4A      CPI	R20,0xFA
    0066 E0E0      LDI	R30,0
    0067 075E      CPC	R21,R30
    0068 F3B4      BLT	0x005F
    0069 2E20      MOV	R2,R16
    006A 2433      CLR	R3
    006B 5001      SUBI	R16,1
    006C 2022      TST	R2
    006D F779      BNE	0x005D
    006E 940E00EE  CALL	pop_gset1
    0070 9508      RET
(0038) 		}
(0039) 	}
(0040) }
(0041) 
(0042) 
(0043) /****************************************************************************
(0044) 函数功能:测试LCD忙碌状态
(0045) 作    者:沈建良
(0046) 时    间:2006年4月25日
(0047) 入口参数:
(0048) 出口参数:result
(0049) ****************************************************************************/
(0050) void LCD_wait(void)   	 	    //等待LCD空闲
(0051) {
(0052) DDRC=0x00;
_LCD_wait:
    0071 2422      CLR	R2
    0072 BA24      OUT	0x14,R2
(0053) Dioff;//RS
    0073 98C5      CBI	0x18,5
(0054) RWon;
    0074 9AC4      SBI	0x18,4
(0055) NOP();
    0075 0000      NOP
(0056) Enableon;
    0076 9AC3      SBI	0x18,3
(0057) //DDRC=0x00;						//input
(0058) //delay(10);
(0059) //while(PINC&0x80);
(0060) while(PINC&0x80);
    0077 999F      SBIC	0x13,7
    0078 CFFE      RJMP	0x0077
(0061) Enableoff;
    0079 98C3      CBI	0x18,3
(0062) DDRC=0xff;		 				//output
    007A EF8F      LDI	R24,0xFF
    007B BB84      OUT	0x14,R24
    007C 9508      RET
_write_command:
  cmd                  --> R20
    007D 940E00EB  CALL	push_gset1
    007F 2F40      MOV	R20,R16
(0063) }
(0064) 
(0065) 
(0066) /****************************************************************************
(0067) 函数功能:写指令数据到LCD
(0068) 作    者:沈建良
(0069) 时    间:2006年4月25日
(0070) 入口参数:cmd
(0071) 出口参数:
(0072) ****************************************************************************/
(0073) void write_command(unsigned char cmd)  		   	//写指令使能
(0074) { 
(0075) LCD_wait();
    0080 DFF0      RCALL	_LCD_wait
(0076) //delay(100);
(0077) Dioff;
    0081 98C5      CBI	0x18,5
(0078) RWoff;
    0082 98C4      CBI	0x18,4
(0079) Enableoff;
    0083 98C3      CBI	0x18,3
(0080) NOP();
    0084 0000      NOP
(0081) //delay(10);
(0082) Enableon;//???
    0085 9AC3      SBI	0x18,3
(0083) //DDRC=0xff; 						//output
(0084) //delay(10);
(0085) PORTC=cmd;
    0086 BB45      OUT	0x15,R20
(0086) //delay(10);
(0087) //Enableon;
(0088) //delay(10);
(0089) Enableoff;
    0087 98C3      CBI	0x18,3
    0088 940E00EE  CALL	pop_gset1
    008A 9508      RET
_lcd_pos:
  pos                  --> R20
    008B 940E00EB  CALL	push_gset1
    008D 2F40      MOV	R20,R16
(0090) }
(0091) 
(0092) /****************************************************************************
(0093) 函数功能:设定显示位置
(0094) 作    者:沈建良
(0095) 时    间:2006年4月25日
(0096) 入口参数:pos
(0097) 出口参数:
(0098) ****************************************************************************/
(0099) void lcd_pos(unsigned char pos)
(0100) {							//设定显示位置
(0101) 	write_command(pos | 0x80);
    008E 2F04      MOV	R16,R20
    008F 6800      ORI	R16,0x80
    0090 DFEC      RCALL	_write_command
    0091 940E00EE  CALL	pop_gset1
    0093 9508      RET
_write_data:
  dat                  --> R20
    0094 940E00EB  CALL	push_gset1
    0096 2F40      MOV	R20,R16
(0102) }
(0103) 
(0104) /****************************************************************************
(0105) 函数功能:写入显示数据到LCD
(0106) 作    者:沈建良
(0107) 时    间:2006年4月25日
(0108) 入口参数:dat
(0109) 出口参数:
(0110) ****************************************************************************/
(0111) void write_data(unsigned char dat)				
(0112) {
(0113) LCD_wait();
    0097 DFD9      RCALL	_LCD_wait
(0114) //delay(100);
(0115) //DDRC=0xff;
(0116) Dion;
    0098 9AC5      SBI	0x18,5
(0117) RWoff;
    0099 98C4      CBI	0x18,4
(0118) Enableoff;
    009A 98C3      CBI	0x18,3
(0119) //delay(10);
(0120) NOP();
    009B 0000      NOP
(0121) Enableon;
    009C 9AC3      SBI	0x18,3
(0122) //delay(10);
(0123) 
(0124) PORTC=dat;
    009D BB45      OUT	0x15,R20
(0125) //delay(10);
(0126) //Enableon;
(0127) //delay(10);
(0128) Enableoff;
    009E 98C3      CBI	0x18,3
    009F 940E00EE  CALL	pop_gset1
    00A1 9508      RET
(0129) }
(0130) 
(0131) /****************************************************************************
(0132) 函数功能:LCD初始化
(0133) 作    者:沈建良
(0134) 时    间:2006年4月25日
(0135) 入口参数:
(0136) 出口参数:
(0137) ****************************************************************************/
(0138) void lcd_init(void)
(0139) {		
(0140) 	delay(15);					//LCD初始化设定
_lcd_init:
    00A2 E00F      LDI	R16,0xF
    00A3 DFB6      RCALL	_delay
(0141) 	write_command(0x38);			//
    00A4 E308      LDI	R16,0x38
    00A5 DFD7      RCALL	_write_command
(0142) 	delay(100);
    00A6 E604      LDI	R16,0x64
    00A7 DFB2      RCALL	_delay
(0143) 	write_command(0x01);			//清除LCD的显示内容
    00A8 E001      LDI	R16,1
    00A9 DFD3      RCALL	_write_command
(0144) 	write_command(0x06);			//
    00AA E006      LDI	R16,6
    00AB DFD1      RCALL	_write_command
(0145) 	write_command(0x0c);			//
    00AC E00C      LDI	R16,0xC
    00AD DFCF      RCALL	_write_command
    00AE 9508      RET
(0146) }
(0147) 
(0148) /****************************************************************************
(0149) 函数功能:主程序
(0150) 作    者:沈建良
(0151) 时    间:2006年4月25日
(0152) 入口参数:
(0153) 出口参数:
(0154) ****************************************************************************/
(0155) void main(void)
(0156) {
(0157) 	char i;
(0158) 	DDRC=0xff;
_main:
  i                    --> R20
    00AF EF8F      LDI	R24,0xFF
    00B0 BB84      OUT	0x14,R24
(0159) 	DDRB=0xff;
    00B1 BB87      OUT	0x17,R24
(0160) 	lcd_init();				// 初始化LCD			
    00B2 DFEF      RCALL	_lcd_init
(0161) 	delay(100);
    00B3 E604      LDI	R16,0x64
    00B4 DFA5      RCALL	_delay
(0162) 	lcd_pos(1);				// 设置显示位置为第一行的第5个字符
    00B5 E001      LDI	R16,1
    00B6 DFD4      RCALL	_lcd_pos
(0163) 	i = 0;
    00B7 2744      CLR	R20
    00B8 C028      RJMP	0x00E1
(0164) 	while(1){
(0165) 	
(0166) 	while(dis1[i] != '\0')
(0167) 	{						// 显示字符hificat.com
(0168) 		write_data(dis1[i]);
    00B9 E584      LDI	R24,0x54
    00BA E090      LDI	R25,0
    00BB 2FE4      MOV	R30,R20
    00BC 27FF      CLR	R31
    00BD 0FE8      ADD	R30,R24
    00BE 1FF9      ADC	R31,R25
    00BF 9104      LPM	R16,0(Z)
    00C0 DFD3      RCALL	_write_data
(0169) 		i++;
    00C1 9543      INC	R20
    00C2 E584      LDI	R24,0x54
    00C3 E090      LDI	R25,0
    00C4 2FE4      MOV	R30,R20
    00C5 27FF      CLR	R31
    00C6 0FE8      ADD	R30,R24
    00C7 1FF9      ADC	R31,R25
    00C8 91E4      LPM	R30,0(Z)
    00C9 23EE      TST	R30
    00CA F771      BNE	0x00B9
(0170) 	}
(0171) 	lcd_pos(0x41);			// 设置显示位置为第二行第二个字符
    00CB E401      LDI	R16,0x41
    00CC DFBE      RCALL	_lcd_pos
(0172) 	i = 0;
    00CD 2744      CLR	R20
    00CE C009      RJMP	0x00D8
(0173) 	while(dis2[i] != '\0')
(0174) 	{
(0175) 		write_data(dis2[i]);	// 显示字符" 0571-85956028 
    00CF E683      LDI	R24,0x63
    00D0 E090      LDI	R25,0
    00D1 2FE4      MOV	R30,R20
    00D2 27FF      CLR	R31
    00D3 0FE8      ADD	R30,R24
    00D4 1FF9      ADC	R31,R25
    00D5 9104      LPM	R16,0(Z)
    00D6 DFBD      RCALL	_write_data
(0176) 		i++;
FILE: <library>
    00D7 9543      INC	R20
    00D8 E683      LDI	R24,0x63
    00D9 E090      LDI	R25,0
    00DA 2FE4      MOV	R30,R20
    00DB 27FF      CLR	R31
    00DC 0FE8      ADD	R30,R24
    00DD 1FF9      ADC	R31,R25
    00DE 91E4      LPM	R30,0(Z)
    00DF 23EE      TST	R30
    00E0 F771      BNE	0x00CF
    00E1 CFE0      RJMP	0x00C2
    00E2 9508      RET
push_gset5:
    00E3 92FA      ST	R15,-Y
    00E4 92EA      ST	R14,-Y
push_gset4:
    00E5 92DA      ST	R13,-Y
    00E6 92CA      ST	R12,-Y
push_gset3:
    00E7 92BA      ST	R11,-Y
    00E8 92AA      ST	R10,-Y
push_gset2:
    00E9 937A      ST	R23,-Y
    00EA 936A      ST	R22,-Y
push_gset1:
    00EB 935A      ST	R21,-Y
    00EC 934A      ST	R20,-Y
    00ED 9508      RET
pop_gset1:
    00EE E0E1      LDI	R30,1
pop:
    00EF 9149      LD	R20,Y+
    00F0 9159      LD	R21,Y+
    00F1 FDE0      SBRC	R30,0
    00F2 9508      RET
    00F3 9169      LD	R22,Y+
    00F4 9179      LD	R23,Y+
    00F5 FDE1      SBRC	R30,1
    00F6 9508      RET
    00F7 90A9      LD	R10,Y+
    00F8 90B9      LD	R11,Y+
    00F9 FDE2      SBRC	R30,2
    00FA 9508      RET
    00FB 90C9      LD	R12,Y+
    00FC 90D9      LD	R13,Y+
    00FD FDE3      SBRC	R30,3
    00FE 9508      RET
    00FF 90E9      LD	R14,Y+
    0100 90F9      LD	R15,Y+
    0101 9508      RET

⌨️ 快捷键说明

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