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

📄 lcd5110.lst

📁 meg16 的所有功能实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    01EB E5CF      LDI	R28,0x5F
    01EC E0D4      LDI	R29,4
    01ED BFCD      OUT	0x3D,R28
    01EE BFDE      OUT	0x3E,R29
    01EF 51C0      SUBI	R28,0x10
    01F0 40D0      SBCI	R29,0
    01F1 EA0A      LDI	R16,0xAA
    01F2 8308      STD	Y+0,R16
    01F3 2400      CLR	R0
    01F4 E1E1      LDI	R30,0x11
    01F5 E0F1      LDI	R31,1
    01F6 E011      LDI	R17,1
    01F7 31E1      CPI	R30,0x11
    01F8 07F1      CPC	R31,R17
    01F9 F011      BEQ	0x01FC
    01FA 9201      ST	R0,Z+
    01FB CFFB      RJMP	0x01F7
    01FC 8300      STD	Z+0,R16
    01FD E2E4      LDI	R30,0x24
    01FE E0F3      LDI	R31,3
    01FF E6A0      LDI	R26,0x60
    0200 E0B0      LDI	R27,0
    0201 E013      LDI	R17,3
    0202 3DE5      CPI	R30,0xD5
    0203 07F1      CPC	R31,R17
    0204 F021      BEQ	0x0209
    0205 95C8      LPM
    0206 9631      ADIW	R30,1
    0207 920D      ST	R0,X+
    0208 CFF9      RJMP	0x0202
    0209 940E0225  CALL	_main
_exit:
    020B CFFF      RJMP	_exit
FILE: D:\(H-drive)\程序范例\Mega16例程\19.LCD5110\main.c
(0001) #include <iom16v.h>
(0002) #include <MACROS.h>
(0003) #include "Define.h"
(0004) #include "5110.h"
(0005) 
(0006) /******************************************************************************/
(0007) void Delay_us(unsigned int time)
(0008) {
(0009) while(time--);
_Delay_us:
  time                 --> R16
    020C 0118      MOVW	R2,R16
    020D 5001      SUBI	R16,1
    020E 4010      SBCI	R17,0
    020F 2022      TST	R2
    0210 F7D9      BNE	0x020C
    0211 2033      TST	R3
    0212 F7C9      BNE	0x020C
    0213 9508      RET
_Delay_ms:
  time                 --> R20
    0214 940E03C8  CALL	push_gset1
    0216 01A8      MOVW	R20,R16
(0010) }
(0011) 
(0012) void Delay_ms(unsigned int time)
(0013) {
    0217 C003      RJMP	0x021B
(0014) while(time--)
(0015) 	{
(0016) 	Delay_us(1000);
    0218 EE08      LDI	R16,0xE8
    0219 E013      LDI	R17,3
    021A DFF1      RCALL	_Delay_us
    021B 011A      MOVW	R2,R20
    021C 5041      SUBI	R20,1
    021D 4050      SBCI	R21,0
    021E 2022      TST	R2
    021F F7C1      BNE	0x0218
    0220 2033      TST	R3
    0221 F7B1      BNE	0x0218
    0222 940E03CB  CALL	pop_gset1
    0224 9508      RET
_main:
    0225 9727      SBIW	R28,7
(0017) 	}
(0018) }
(0019) 
(0020) void main(void) 
(0021) {
(0022) 	LCD_init();//初始化液晶    
    0226 D040      RCALL	_LCD_init
(0023) 	LCD_clear();
    0227 D05C      RCALL	_LCD_clear
(0024) 	
(0025) 	SETBIT(DDRC,BACKLED_EN);   			//配置背光控制端口										
    0228 9AA7      SBI	0x14,7
(0026) 	CLEARBIT(PORTC,BACKLED_EN);			//使能背光
    0229 98AF      CBI	0x15,7
    022A C039      RJMP	0x0264
(0027) 	
(0028) 	while(1)  
(0029) 	{	
(0030) 		LCD_clear();
    022B D058      RCALL	_LCD_clear
(0031) 		LCD_write_english_string(0,0,"---ADEmbed----");
    022C E082      LDI	R24,2
    022D E091      LDI	R25,1
    022E 8399      STD	Y+1,R25
    022F 8388      STD	Y+0,R24
    0230 2722      CLR	R18
    0231 2700      CLR	R16
    0232 D09B      RCALL	_LCD_write_english_string
(0032) 		LCD_write_english_string(0,5,"www.");
    0233 EF8D      LDI	R24,0xFD
    0234 E090      LDI	R25,0
    0235 8399      STD	Y+1,R25
    0236 8388      STD	Y+0,R24
    0237 E025      LDI	R18,5
    0238 2700      CLR	R16
    0239 D094      RCALL	_LCD_write_english_string
(0033) 		LCD_write_english_string(21,5,"adembed.");
    023A EF84      LDI	R24,0xF4
    023B E090      LDI	R25,0
    023C 8399      STD	Y+1,R25
    023D 8388      STD	Y+0,R24
    023E E025      LDI	R18,5
    023F E105      LDI	R16,0x15
    0240 D08D      RCALL	_LCD_write_english_string
(0034) 		LCD_write_english_string(66,5,"com");
    0241 EF80      LDI	R24,0xF0
    0242 E090      LDI	R25,0
    0243 8399      STD	Y+1,R25
    0244 8388      STD	Y+0,R24
    0245 E025      LDI	R18,5
    0246 E402      LDI	R16,0x42
    0247 D086      RCALL	_LCD_write_english_string
(0035) 		LCD_write_chinese_string(0,3,12,7,0,0);
    0248 2422      CLR	R2
    0249 822E      STD	Y+6,R2
    024A 822C      STD	Y+4,R2
    024B E087      LDI	R24,7
    024C 838A      STD	Y+2,R24
    024D E08C      LDI	R24,0xC
    024E 8388      STD	Y+0,R24
    024F E023      LDI	R18,3
    0250 2700      CLR	R16
    0251 D092      RCALL	_LCD_write_chinese_string
(0036) 		
(0037) 		Delay_ms(5000);
    0252 E808      LDI	R16,0x88
    0253 E113      LDI	R17,0x13
    0254 DFBF      RCALL	_Delay_ms
(0038) 		LCD_clear();
    0255 D02E      RCALL	_LCD_clear
(0039) 		LCD_draw_bmp_pixel(0,0,AVR_bmp,48,24);
    0256 E188      LDI	R24,0x18
    0257 838C      STD	Y+4,R24
    0258 E380      LDI	R24,0x30
    0259 838A      STD	Y+2,R24
    025A E680      LDI	R24,0x60
    025B E090      LDI	R25,0
    025C 8399      STD	Y+1,R25
    025D 8388      STD	Y+0,R24
    025E 2722      CLR	R18
    025F 2700      CLR	R16
    0260 D0C8      RCALL	_LCD_draw_bmp_pixel
(0040) 		Delay_ms(2000);
    0261 ED00      LDI	R16,0xD0
    0262 E017      LDI	R17,7
    0263 DFB0      RCALL	_Delay_ms
    0264 CFC6      RJMP	0x022B
    0265 9627      ADIW	R28,7
    0266 9508      RET
(0041) 	}	
(0042) 	  
(0043) }
(0044) 
(0045) 
(0046) /********************************************************************************************************************/ 
(0047) void LCD_init(void)
(0048) {
(0049) 	//先设置为输出
(0050)     SETBIT(LCD_DIR,SCLK);
_LCD_init:
    0267 9ABF      SBI	0x17,7
(0051)     SETBIT(LCD_DIR,SDIN);
    0268 9ABD      SBI	0x17,5
(0052)     SETBIT(LCD_DIR,LCD_DC);
    0269 9ABE      SBI	0x17,6
(0053)     SETBIT(LCD_DIR,LCD_CE);
    026A 9ABC      SBI	0x17,4
(0054)     //SETBIT(LCD_DIR,LCD_RST);
(0055) 	  
(0056)     // 产生一个让LCD复位的低电平脉冲
(0057)     
(0058) 	//CLEARBIT(LCD_PORT,LCD_RST);//LCD_RST = 0;
(0059)     //delay_1us();
(0060) 	//SETBIT(LCD_PORT,LCD_RST);//LCD_RST = 1;
(0061)     
(0062) 	// 关闭LCD
(0063) 	CLEARBIT(LCD_PORT,LCD_CE);//LCD_CE = 0;
    026B 98C4      CBI	0x18,4
(0064)     delay_1us();
    026C D02E      RCALL	_delay_1us
(0065) 	
(0066) 	// 使能LCD
(0067) 	SETBIT(LCD_PORT,LCD_CE);//LCD_CE = 1;
    026D 9AC4      SBI	0x18,4
(0068)     delay_1us();
    026E D02C      RCALL	_delay_1us
(0069) 
(0070)     LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
    026F 2722      CLR	R18
    0270 E201      LDI	R16,0x21
    0271 D0FF      RCALL	_LCD_write_byte
(0071)     LCD_write_byte(0xc8, 0);	// 设置偏置电压
    0272 2722      CLR	R18
    0273 EC08      LDI	R16,0xC8
    0274 D0FC      RCALL	_LCD_write_byte
(0072)     LCD_write_byte(0x06, 0);	// 温度校正
    0275 2722      CLR	R18
    0276 E006      LDI	R16,6
    0277 D0F9      RCALL	_LCD_write_byte
(0073)     LCD_write_byte(0x13, 0);	// 1:48
    0278 2722      CLR	R18
    0279 E103      LDI	R16,0x13
    027A D0F6      RCALL	_LCD_write_byte
(0074)     LCD_write_byte(0x20, 0);	// 使用基本命令
    027B 2722      CLR	R18
    027C E200      LDI	R16,0x20
    027D D0F3      RCALL	_LCD_write_byte
(0075)     LCD_clear();	            // 清屏
    027E D005      RCALL	_LCD_clear
(0076)     LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示
    027F 2722      CLR	R18
    0280 E00C      LDI	R16,0xC
    0281 D0EF      RCALL	_LCD_write_byte
(0077)         
(0078)     // 关闭LCD
(0079)     CLEARBIT(LCD_PORT,LCD_CE);//LCD_CE = 0;
    0282 98C4      CBI	0x18,4
    0283 9508      RET
_LCD_clear:
  i                    --> R20
    0284 940E03C8  CALL	push_gset1
(0080) }
(0081) /********************************************************************************************************************/
(0082) void LCD_clear(void)
(0083) {
(0084)     unsigned int i;
(0085) 
(0086)     LCD_write_byte(0x0c, 0);			
    0286 2722      CLR	R18
    0287 E00C      LDI	R16,0xC
    0288 D0E8      RCALL	_LCD_write_byte
(0087)     LCD_write_byte(0x80, 0);			
    0289 2722      CLR	R18
    028A E800      LDI	R16,0x80
    028B D0E5      RCALL	_LCD_write_byte
(0088) 
(0089)     for (i=0; i<504; i++)
    028C 2744      CLR	R20
    028D 2755      CLR	R21
    028E C005      RJMP	0x0294
(0090) 	{
(0091)         LCD_write_byte(0, 1);
    028F E021      LDI	R18,1
    0290 2700      CLR	R16
    0291 D0DF      RCALL	_LCD_write_byte
    0292 5F4F      SUBI	R20,0xFF
    0293 4F5F      SBCI	R21,0xFF
    0294 3F48      CPI	R20,0xF8
    0295 E0E1      LDI	R30,1
    0296 075E      CPC	R21,R30
    0297 F3B8      BCS	0x028F
    0298 940E03CB  CALL	pop_gset1
    029A 9508      RET
(0092) 	}			
(0093) }
(0094) /********************************************************************************************************************/
(0095) void delay_1us(void)                 //1us延时函数
(0096) {
(0097)    unsigned int i;
(0098)    for(i=0;i<12000;i++);
_delay_1us:
  i                    --> R16
    029B 2700      CLR	R16
    029C 2711      CLR	R17
    029D C002      RJMP	0x02A0
    029E 5F0F      SUBI	R16,0xFF
    029F 4F1F      SBCI	R17,0xFF
    02A0 3E00      CPI	R16,0xE0
    02A1 E2EE      LDI	R30,0x2E
    02A2 071E      CPC	R17,R30
    02A3 F3D0      BCS	0x029E
    02A4 9508      RET
_LCD_set_XY:
  Y                    --> R22
  X                    --> R20
    02A5 940E03C6  CALL	push_gset2
    02A7 2F62      MOV	R22,R18
    02A8 2F40      MOV	R20,R16
(0099) }
(0100) /********************************************************************************************************************/
(0101) void LCD_set_XY(unsigned char X, unsigned char Y)
(0102) {
(0103)     LCD_write_byte(0x40 | Y, 0);// column
    02A9 2722      CLR	R18
    02AA 2F06      MOV	R16,R22
    02AB 6400      ORI	R16,0x40
    02AC D0C4      RCALL	_LCD_write_byte
(0104)     LCD_write_byte(0x80 | X, 0);// row
    02AD 2722      CLR	R18
    02AE 2F04      MOV	R16,R20
    02AF 6800      ORI	R16,0x80
    02B0 D0C0      RCALL	_LCD_write_byte
    02B1 940E03B7  CALL	pop_gset2
    02B3 9508      RET
_LCD_write_char:
  line                 --> R20
  c                    --> R22
    02B4 940E03C6  CALL	push_gset2
    02B6 2F60      MOV	R22,R16
(0105) }
(0106) /********************************************************************************************************************/
(0107) void LCD_write_char(unsigned char c)
(0108) {
(0109)     unsigned char line;
(0110) 	
(0111)     c -= 32;
    02B7 5260      SUBI	R22,0x20
(0112)     for (line=0; line<6; line++)
    02B8 2744      CLR	R20
    02B9 C00F      RJMP	0x02C9
(0113) 	{
(0114)         LCD_write_byte(font6x8[c][line], 1);
    02BA E021      LDI	R18,1
    02BB E086      LDI	R24,6
    02BC 9F86      MUL	R24,R22
    02BD 0110      MOVW	R2,R0
    02BE E584      LDI	R24,0x54
    02BF E090      LDI	R25,0
    02C0 0E28      ADD	R2,R24
    02C1 1E39      ADC	R3,R25
    02C2 2FE4      MOV	R30,R20
    02C3 27FF      CLR	R31
    02C4 0DE2      ADD	R30,R2
    02C5 1DF3      ADC	R31,R3
    02C6 9104      LPM	R16,0(Z)
    02C7 D0A9      RCALL	_LCD_write_byte
    02C8 9543      INC	R20
    02C9 3046      CPI	R20,6
    02CA F378      BCS	0x02BA
    02CB 940E03B7  CALL	pop_gset2
    02CD 9508      RET
_LCD_write_english_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    02CE 940E03C4  CALL	push_gset3
    02D0 2EA2      MOV	R10,R18
    02D1 2F60      MOV	R22,R16
    02D2 814E      LDD	R20,Y+6
    02D3 815F      LDD	R21,Y+7
(0115) 	}
(0116) }
(0117) /********************************************************************************************************************/
(0118) /*-----------------------------------------------------------------------
(0119) LCD_write_english_String  : 英文字符串显示函数
(0120) 
(0121) 输入参数:*s      :英文字符串指针;
(0122)           X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
(0123) -----------------------------------------------------------------------*/
(0124) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0125) {
(0126)     LCD_set_XY(X,Y);
    02D4 2D2A      MOV	R18,R10
    02D5 2F06      MOV	R16,R22
    02D6 DFCE      RCALL	_LCD_set_XY
    02D7 C005      RJMP	0x02DD
(0127)     while (*s) 
(0128)     {
(0129) 	    LCD_write_char(*s);
    02D8 01FA      MOVW	R30,R20
    02D9 8100      LDD	R16,Z+0
    02DA DFD9      RCALL	_LCD_write_char
(0130) 	    s++;
    02DB 5F4F      SUBI	R20,0xFF
    02DC 4F5F      SBCI	R21,0xFF
    02DD 01FA      MOVW	R30,R20
    02DE 8020      LDD	R2,Z+0

⌨️ 快捷键说明

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