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

📄 5110.lst

📁 5110综合演示 变成结构 流程 头文件
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    027F E5CF      LDI	R28,0x5F
    0280 E0D4      LDI	R29,4
    0281 BFCD      OUT	0x3D,R28
    0282 BFDE      OUT	0x3E,R29
    0283 51C0      SUBI	R28,0x10
    0284 40D0      SBCI	R29,0
    0285 EA0A      LDI	R16,0xAA
    0286 8308      STD	Y+0,R16
    0287 2400      CLR	R0
    0288 E3EA      LDI	R30,0x3A
    0289 E0F2      LDI	R31,2
    028A E012      LDI	R17,2
    028B 33EA      CPI	R30,0x3A
    028C 07F1      CPC	R31,R17
    028D F011      BEQ	0x0290
    028E 9201      ST	R0,Z+
    028F CFFB      RJMP	0x028B
    0290 8300      STD	Z+0,R16
    0291 E2E4      LDI	R30,0x24
    0292 E0F3      LDI	R31,3
    0293 E6A0      LDI	R26,0x60
    0294 E0B0      LDI	R27,0
    0295 E014      LDI	R17,4
    0296 3FEE      CPI	R30,0xFE
    0297 07F1      CPC	R31,R17
    0298 F021      BEQ	0x029D
    0299 95C8      LPM
    029A 9631      ADIW	R30,1
    029B 920D      ST	R0,X+
    029C CFF9      RJMP	0x0296
    029D 940E02A0  CALL	_main
_exit:
    029F CFFF      RJMP	_exit
_main:
    02A0 972A      SBIW	R28,0xA
FILE: D:\avrvi\democode\5110_综合演示\source\main.c
(0001) /************************************************
(0002) 文件:main.c
(0003) 用途:3310_5510LCD驱动演示文件
(0004) 注意:
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) #include "config.h"
(0011) #include "lib\bmp_pixel.h"
(0012) #include "lib\write_chinese_string_pixel.h"
(0013) #include "lib\move_chinese_string_pixel.h"
(0014) /******************************************************************************/
(0015) void main(void) 
(0016)   {
(0017)     OSCCAL=0x9d;                        // 8M系统内部时钟校准
    02A1 E98D      LDI	R24,0x9D
    02A2 BF81      OUT	0x31,R24
(0018)     //设置MCU的I/O口(SPI)
(0019)     DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI | SPI_CLK;
    02A3 B387      IN	R24,0x17
    02A4 6F88      ORI	R24,0xF8
    02A5 BB87      OUT	0x17,R24
(0020)     SPSR |= BIT(SPI2X);                 // 设置SPI时钟倍速
    02A6 9A70      SBI	0x0E,0
(0021)     SPCR |= BIT(SPE)|BIT(MSTR);		// 使能SPI接口,主机模式,4M时钟
    02A7 B18D      IN	R24,0x0D
    02A8 6580      ORI	R24,0x50
    02A9 B98D      OUT	0x0D,R24
(0022)  
(0023)     LCD_init(); //初始化液晶   
    02AA 940E02EB  CALL	_LCD_init
(0024) 	LCD_draw_bmp_pixel(18,1,AVR_bmp,48,24);  //显示AVR大图
    02AC E188      LDI	R24,0x18
    02AD 838C      STD	Y+4,R24
    02AE E380      LDI	R24,0x30
    02AF 838A      STD	Y+2,R24
    02B0 E680      LDI	R24,0x60
    02B1 E090      LDI	R25,0
    02B2 8399      STD	Y+1,R25
    02B3 8388      STD	Y+0,R24
    02B4 E021      LDI	R18,1
    02B5 E102      LDI	R16,0x12
    02B6 940E045C  CALL	_LCD_draw_bmp_pixel
(0025) 	delay_nms(1500);
    02B8 ED0C      LDI	R16,0xDC
    02B9 E015      LDI	R17,5
    02BA 940E04CA  CALL	_delay_nms
(0026) 	LCD_clear();
    02BC 940E030A  CALL	_LCD_clear
    02BE C029      RJMP	0x02E8
(0027) 	
(0028) 	while(1)  
(0029)       {		
(0030) 		LCD_write_english_string(0,3,"AVR");
    02BF E386      LDI	R24,0x36
    02C0 E092      LDI	R25,2
    02C1 8399      STD	Y+1,R25
    02C2 8388      STD	Y+0,R24
    02C3 E023      LDI	R18,3
    02C4 2700      CLR	R16
    02C5 940E034A  CALL	_LCD_write_english_string
(0031) 		LCD_write_chinese_string(24,3,12,5,0,0,write_chinese_string); //显示“与虚拟仪器”,在x=24,y=3位置,显示write_chinese_string的12点阵汉字,显示5个,从第0个开始显示,行距为0,
    02C7 EF80      LDI	R24,0xF0
    02C8 E090      LDI	R25,0
    02C9 8799      STD	Y+9,R25
    02CA 8788      STD	Y+8,R24
    02CB 2422      CLR	R2
    02CC 822E      STD	Y+6,R2
    02CD 822C      STD	Y+4,R2
    02CE E085      LDI	R24,5
    02CF 838A      STD	Y+2,R24
    02D0 E08C      LDI	R24,0xC
    02D1 8388      STD	Y+0,R24
    02D2 E023      LDI	R18,3
    02D3 E108      LDI	R16,0x18
    02D4 940E0360  CALL	_LCD_write_chinese_string
(0032)         LCD_write_english_string(0,5,"www.avrvi.com");
    02D6 E288      LDI	R24,0x28
    02D7 E092      LDI	R25,2
    02D8 8399      STD	Y+1,R25
    02D9 8388      STD	Y+0,R24
    02DA E025      LDI	R18,5
    02DB 2700      CLR	R16
    02DC 940E034A  CALL	_LCD_write_english_string
(0033) 		LCD_move_chinese_string(0,0,200,move_chinese_string);  //在屏幕最上面一行显示:欢迎光临本网站!显示速度为200,数值越大,速度越慢。
    02DE E688      LDI	R24,0x68
    02DF E091      LDI	R25,1
    02E0 839B      STD	Y+3,R25
    02E1 838A      STD	Y+2,R24
    02E2 EC88      LDI	R24,0xC8
    02E3 8388      STD	Y+0,R24
    02E4 2722      CLR	R18
    02E5 2700      CLR	R16
    02E6 940E03A4  CALL	_LCD_move_chinese_string
    02E8 CFD6      RJMP	0x02BF
    02E9 962A      ADIW	R28,0xA
    02EA 9508      RET
FILE: D:\avrvi\democode\5110_综合演示\source\lib\3310_5110LCD.c
(0001) /************************************************
(0002) 文件:3310_5510LCD.c
(0003) 用途:3310_5510LCD驱动
(0004) 注意:
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) #include "..\config.h"
(0011) #include "lib\english_6x8_pixel.h"
(0012) /*************************************************************************
(0013) ** 函数名称: LCD_init(void)
(0014) ** 功能描述: 3310_5110LCD初始化
(0015) ** 输 入: 
(0016) ** 输出	 : 
(0017) ** 全局变量: 无
(0018) ** 调用模块: 
(0019) ** 说明:
(0020) ** 注意:
(0021) **************************************************************************/
(0022) void LCD_init(void)
(0023)   {
(0024)     PORTB &= ~LCD_RST;          // 产生一个让LCD复位的低电平脉冲
_LCD_init:
    02EB 98C6      CBI	0x18,6
(0025)     delay_1us();
    02EC 940E04AF  CALL	_delay_1us
(0026)     PORTB |= LCD_RST;
    02EE 9AC6      SBI	0x18,6
(0027)     
(0028)     PORTB &= ~LCD_CE ;		    // 关闭LCD
    02EF 98C4      CBI	0x18,4
(0029)     delay_1us();
    02F0 940E04AF  CALL	_delay_1us
(0030)     PORTB |= LCD_CE;		    // 使能LCD
    02F2 9AC4      SBI	0x18,4
(0031)     delay_1us();
    02F3 940E04AF  CALL	_delay_1us
(0032) 
(0033)     LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
    02F5 2722      CLR	R18
    02F6 E201      LDI	R16,0x21
    02F7 D1AC      RCALL	_LCD_write_byte
(0034)     LCD_write_byte(0xc8, 0);	// 设置偏置电压
    02F8 2722      CLR	R18
    02F9 EC08      LDI	R16,0xC8
    02FA D1A9      RCALL	_LCD_write_byte
(0035)     LCD_write_byte(0x06, 0);	// 温度校正
    02FB 2722      CLR	R18
    02FC E006      LDI	R16,6
    02FD D1A6      RCALL	_LCD_write_byte
(0036)     LCD_write_byte(0x13, 0);	// 1:48
    02FE 2722      CLR	R18
    02FF E103      LDI	R16,0x13
    0300 D1A3      RCALL	_LCD_write_byte
(0037)     LCD_write_byte(0x20, 0);	// 使用基本命令
    0301 2722      CLR	R18
    0302 E200      LDI	R16,0x20
    0303 D1A0      RCALL	_LCD_write_byte
(0038)     LCD_clear();	            // 清屏
    0304 D005      RCALL	_LCD_clear
(0039)     LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示
    0305 2722      CLR	R18
    0306 E00C      LDI	R16,0xC
    0307 D19C      RCALL	_LCD_write_byte
(0040)         
(0041)     PORTB &= ~LCD_CE ;          // 关闭LCD
    0308 98C4      CBI	0x18,4
    0309 9508      RET
_LCD_clear:
  i                    --> R20
    030A 940E0517  CALL	push_gset1
(0042)   }
(0043) /*************************************************************************
(0044) ** 函数名称: LCD_clear(void)
(0045) ** 功能描述: LCD清屏函数
(0046) ** 输 入: 
(0047) ** 输出	 : 
(0048) ** 全局变量: 无
(0049) ** 调用模块: 
(0050) ** 说明:
(0051) ** 注意:
(0052) **************************************************************************/
(0053) void LCD_clear(void)
(0054)   {
(0055)     unsigned int i;
(0056) 
(0057)     LCD_write_byte(0x0c, 0);			
    030C 2722      CLR	R18
    030D E00C      LDI	R16,0xC
    030E D195      RCALL	_LCD_write_byte
(0058)     LCD_write_byte(0x80, 0);			
    030F 2722      CLR	R18
    0310 E800      LDI	R16,0x80
    0311 D192      RCALL	_LCD_write_byte
(0059) 
(0060)     for (i=0; i<504; i++)
    0312 2744      CLR	R20
    0313 2755      CLR	R21
    0314 C005      RJMP	0x031A
(0061)       LCD_write_byte(0, 1);			
    0315 E021      LDI	R18,1
    0316 2700      CLR	R16
    0317 D18C      RCALL	_LCD_write_byte
    0318 5F4F      SUBI	R20,0xFF
    0319 4F5F      SBCI	R21,0xFF
    031A 3F48      CPI	R20,0xF8
    031B E0E1      LDI	R30,1
    031C 075E      CPC	R21,R30
    031D F3B8      BCS	0x0315
    031E 940E051A  CALL	pop_gset1
    0320 9508      RET
_LCD_set_XY:
  Y                    --> R22
  X                    --> R20
    0321 940E0515  CALL	push_gset2
    0323 2F62      MOV	R22,R18
    0324 2F40      MOV	R20,R16
(0062)   }
(0063) /*************************************************************************
(0064) ** 函数名称: LCD_set_XY(unsigned char X, unsigned char Y)
(0065) ** 功能描述: 设置LCD坐标函数
(0066) ** 输 入: X :0-83 X 坐标
(0067)            Y :0-5  Y 坐标
(0068) ** 输出	 : 
(0069) ** 全局变量: 无
(0070) ** 调用模块: 
(0071) ** 说明:
(0072) ** 注意:
(0073) **************************************************************************/
(0074) void LCD_set_XY(unsigned char X, unsigned char Y)
(0075)   {
(0076)     LCD_write_byte(0x40 | Y, 0);		// column
    0325 2722      CLR	R18
    0326 2F06      MOV	R16,R22
    0327 6400      ORI	R16,0x40
    0328 D17B      RCALL	_LCD_write_byte
(0077)     LCD_write_byte(0x80 | X, 0);          	// row
    0329 2722      CLR	R18
    032A 2F04      MOV	R16,R20
    032B 6800      ORI	R16,0x80
    032C D177      RCALL	_LCD_write_byte
    032D 940E0506  CALL	pop_gset2
    032F 9508      RET
_LCD_write_char:
  line                 --> R20
  c                    --> R22
    0330 940E0515  CALL	push_gset2
    0332 2F60      MOV	R22,R16
(0078)   }
(0079) /*************************************************************************
(0080) ** 函数名称: LCD_write_char(unsigned char c)
(0081) ** 功能描述: 显示英文字符
(0082) ** 输 入: c :显示的字符
(0083) ** 输出	 : 
(0084) ** 全局变量: 无
(0085) ** 调用模块: 
(0086) ** 说明:
(0087) ** 注意:
(0088) **************************************************************************/
(0089) void LCD_write_char(unsigned char c)
(0090)   {
(0091)     unsigned char line;
(0092) 
(0093)     c -= 32;
    0333 5260      SUBI	R22,0x20
(0094) 
(0095)     for (line=0; line<6; line++)
    0334 2744      CLR	R20
    0335 C00F      RJMP	0x0345
(0096)       LCD_write_byte(font6x8[c][line], 1);
    0336 E021      LDI	R18,1
    0337 E086      LDI	R24,6
    0338 9F86      MUL	R24,R22
    0339 0110      MOVW	R2,R0
    033A E584      LDI	R24,0x54
    033B E090      LDI	R25,0
    033C 0E28      ADD	R2,R24
    033D 1E39      ADC	R3,R25
    033E 2FE4      MOV	R30,R20
    033F 27FF      CLR	R31
    0340 0DE2      ADD	R30,R2
    0341 1DF3      ADC	R31,R3
    0342 9104      LPM	R16,0(Z)
    0343 D160      RCALL	_LCD_write_byte
    0344 9543      INC	R20
    0345 3046      CPI	R20,6
    0346 F378      BCS	0x0336
    0347 940E0506  CALL	pop_gset2
    0349 9508      RET
_LCD_write_english_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    034A 940E0513  CALL	push_gset3
    034C 2EA2      MOV	R10,R18
    034D 2F60      MOV	R22,R16
    034E 814E      LDD	R20,Y+6
    034F 815F      LDD	R21,Y+7
(0097)   }
(0098) /*************************************************************************
(0099) ** 函数名称: LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0100) ** 功能描述: 英文字符串显示函数
(0101) ** 输 入: *s    :英文字符串指针;
(0102)            X、Y  : 显示字符串的位置,x 0-83 ,y 0-5
(0103) ** 输出	 : 
(0104) ** 全局变量: 无
(0105) ** 调用模块: 
(0106) ** 说明:
(0107) ** 注意:
(0108) **************************************************************************/
(0109) void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
(0110)   {
(0111)     LCD_set_XY(X,Y);
    0350 2D2A      MOV	R18,R10
    0351 2F06      MOV	R16,R22
    0352 DFCE      RCALL	_LCD_set_XY
    0353 C005      RJMP	0x0359

⌨️ 快捷键说明

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