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

📄 3310lcd_prj.lst

📁 一个关于AVR单片机的例程
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_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 E0E2      LDI	R30,2
    0289 E0F1      LDI	R31,1
    028A E011      LDI	R17,1
    028B 30E2      CPI	R30,2
    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 E5EC      LDI	R30,0x5C
    0292 E0F4      LDI	R31,4
    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 9727      SBIW	R28,7
FILE: C:\DOCUME~1\administrator\桌面\3310\3310LCD_main.c
(0001) //硬件连接方式
(0002) //#define LCD_DC                 0x08  //  LCD第4脚, Mega16:PB3  第4脚
(0003) //#define LCD_CE                 0x10  //  LCD第5脚, Mega16:PB4  第5脚
(0004) //#define SPI_MOSI               0x20  //  LCD第3脚, Mega16:PB5(MOSI) 第6脚
(0005) //#define LCD_RST                0x40  //  LCD第8脚, Mega16:PB6(MISO) 第7脚
(0006) //#define SPI_CLK                0x80  //  LCD第2脚, Mega16:PB7(SCK) 第8脚
(0007) 
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) #include "3310LCD_function.h"
(0011) #include "bmp_pixel.h"
(0012) 
(0013) /******************************************************************************/
(0014) void main(void) 
(0015)   {
(0016)     OSCCAL=0x9d;                        // 8M系统内部时钟校准    
    02A1 E98D      LDI	R24,0x9D
    02A2 BF81      OUT	0x31,R24
(0017)     //设置MCU的I/O口
(0018)     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
(0019)     SPSR |= BIT(SPI2X);                 // 设置SPI时钟倍速
    02A6 9A70      SBI	0x0E,0
(0020)     SPCR |= BIT(SPE)|BIT(MSTR);		// 使能SPI接口,主机模式,4M时钟
    02A7 B18D      IN	R24,0x0D
    02A8 6580      ORI	R24,0x50
    02A9 B98D      OUT	0x0D,R24
(0021)  
(0022)     LCD_init(); //初始化液晶    
    02AA 940E02FB  CALL	_LCD_init
    02AC C021      RJMP	0x02CE
(0023)  
(0024)   while(1)  
(0025)       {
(0026) 	    LCD_write_chinese_string(24,3,12,5,0,0); //显示“与虚拟仪器”,在x=0,y=2位置,显示write_chinese_string的12点阵汉字,显示4个,从第0个开始显示,行距为0,
    02AD 2422      CLR	R2
    02AE 822E      STD	Y+6,R2
    02AF 822C      STD	Y+4,R2
    02B0 E085      LDI	R24,5
    02B1 838A      STD	Y+2,R24
    02B2 E08C      LDI	R24,0xC
    02B3 8388      STD	Y+0,R24
    02B4 E023      LDI	R18,3
    02B5 E108      LDI	R16,0x18
    02B6 940E0370  CALL	_LCD_write_chinese_string
(0027)         LCD_write_english_string(0,3,"AVR");
    02B8 EF8E      LDI	R24,0xFE
    02B9 E090      LDI	R25,0
    02BA 8399      STD	Y+1,R25
    02BB 8388      STD	Y+0,R24
    02BC E023      LDI	R18,3
    02BD 2700      CLR	R16
    02BE 940E035A  CALL	_LCD_write_english_string
(0028) 	//	LCD_draw_bmp_pixel(0,2,AVR_bmp,48,32);  //显示AVR大图
(0029) 	    LCD_write_english_string(0,5,"www.avrvi.com");  
    02C0 EF80      LDI	R24,0xF0
    02C1 E090      LDI	R25,0
    02C2 8399      STD	Y+1,R25
    02C3 8388      STD	Y+0,R24
    02C4 E025      LDI	R18,5
    02C5 2700      CLR	R16
    02C6 940E035A  CALL	_LCD_write_english_string
(0030)         LCD_move_chinese_string(0, 0, 100);  //在屏幕最上面一行显示:欢迎光临本网站!显示速度为100,数值越大,速度越慢。
    02C8 E684      LDI	R24,0x64
    02C9 8388      STD	Y+0,R24
    02CA 2722      CLR	R18
    02CB 2700      CLR	R16
    02CC 940E03B5  CALL	_LCD_move_chinese_string
    02CE CFDE      RJMP	0x02AD
    02CF 9627      ADIW	R28,7
    02D0 9508      RET
FILE: C:\DOCUME~1\administrator\桌面\3310\delay_function.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void)                 //1us延时函数
(0006)   {
(0007)    asm("nop");
_delay_1us:
    02D1 0000      NOP
    02D2 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    02D3 940E04F5  CALL	push_gset2
    02D5 01B8      MOVW	R22,R16
(0008)   }
(0009) 
(0010) void delay_nus(unsigned int n)       //N us延时函数
(0011)   {
(0012)    unsigned int i=0;
    02D6 2744      CLR	R20
    02D7 2755      CLR	R21
(0013)    for (i=0;i<n;i++)
    02D8 C003      RJMP	0x02DC
(0014)    delay_1us();
    02D9 DFF7      RCALL	_delay_1us
    02DA 5F4F      SUBI	R20,0xFF
    02DB 4F5F      SBCI	R21,0xFF
    02DC 1746      CP	R20,R22
    02DD 0757      CPC	R21,R23
    02DE F3D0      BCS	0x02D9
    02DF 940E04E6  CALL	pop_gset2
    02E1 9508      RET
(0015)   }
(0016)   
(0017) void delay_1ms(void)                 //1ms延时函数
(0018)   {
(0019)    unsigned int i;
(0020)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    02E2 2700      CLR	R16
    02E3 2711      CLR	R17
    02E4 C002      RJMP	0x02E7
    02E5 5F0F      SUBI	R16,0xFF
    02E6 4F1F      SBCI	R17,0xFF
    02E7 3704      CPI	R16,0x74
    02E8 E0E4      LDI	R30,4
    02E9 071E      CPC	R17,R30
    02EA F3D0      BCS	0x02E5
    02EB 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    02EC 940E04F5  CALL	push_gset2
    02EE 01B8      MOVW	R22,R16
(0021)   }
(0022)   
(0023) void delay_nms(unsigned int n)       //N ms延时函数
(0024)   {
(0025)    unsigned int i=0;
    02EF 2744      CLR	R20
    02F0 2755      CLR	R21
(0026)    for (i=0;i<n;i++)
    02F1 C003      RJMP	0x02F5
(0027)    delay_1ms();
    02F2 DFEF      RCALL	_delay_1ms
    02F3 5F4F      SUBI	R20,0xFF
    02F4 4F5F      SBCI	R21,0xFF
    02F5 1746      CP	R20,R22
    02F6 0757      CPC	R21,R23
    02F7 F3D0      BCS	0x02F2
    02F8 940E04E6  CALL	pop_gset2
    02FA 9508      RET
FILE: C:\DOCUME~1\administrator\桌面\3310\3310LCD_function.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "3310LCD_function.h"
(0004) #include "english_6x8_pixel.h"
(0005) #include "write_chinese_string_pixel.h"
(0006) #include "move_chinese_string_pixel.h"
(0007) 
(0008) /*-----------------------------------------------------------------------
(0009) LCD_init          : 3310LCD初始化
(0010) 
(0011) 编写日期          :2004-8-10 
(0012) 最后修改日期      :2004-8-10 
(0013) -----------------------------------------------------------------------*/
(0014) void LCD_init(void)
(0015)   {
(0016)     PORTB &= ~LCD_RST;          // 产生一个让LCD复位的低电平脉冲
_LCD_init:
    02FB 98C6      CBI	0x18,6
(0017)     delay_1us();
    02FC 940E02D1  CALL	_delay_1us
(0018)     PORTB |= LCD_RST;
    02FE 9AC6      SBI	0x18,6
(0019)     
(0020)     PORTB &= ~LCD_CE ;		// 关闭LCD
    02FF 98C4      CBI	0x18,4
(0021)     delay_1us();
    0300 940E02D1  CALL	_delay_1us
(0022)     PORTB |= LCD_CE;		// 使能LCD
    0302 9AC4      SBI	0x18,4
(0023)     delay_1us();
    0303 940E02D1  CALL	_delay_1us
(0024) 
(0025)     LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
    0305 2722      CLR	R18
    0306 E201      LDI	R16,0x21
    0307 D1A6      RCALL	_LCD_write_byte
(0026)     LCD_write_byte(0xc8, 0);	// 设置偏置电压
    0308 2722      CLR	R18
    0309 EC08      LDI	R16,0xC8
    030A D1A3      RCALL	_LCD_write_byte
(0027)     LCD_write_byte(0x06, 0);	// 温度校正
    030B 2722      CLR	R18
    030C E006      LDI	R16,6
    030D D1A0      RCALL	_LCD_write_byte
(0028)     LCD_write_byte(0x13, 0);	// 1:48
    030E 2722      CLR	R18
    030F E103      LDI	R16,0x13
    0310 D19D      RCALL	_LCD_write_byte
(0029)     LCD_write_byte(0x20, 0);	// 使用基本命令
    0311 2722      CLR	R18
    0312 E200      LDI	R16,0x20
    0313 D19A      RCALL	_LCD_write_byte
(0030)     LCD_clear();	        // 清屏
    0314 D005      RCALL	_LCD_clear
(0031)     LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示
    0315 2722      CLR	R18
    0316 E00C      LDI	R16,0xC
    0317 D196      RCALL	_LCD_write_byte
(0032)         
(0033)     PORTB &= ~LCD_CE ;          // 关闭LCD
    0318 98C4      CBI	0x18,4
    0319 9508      RET
_LCD_clear:
  i                    --> R20
    031A 940E04F7  CALL	push_gset1
(0034)   }
(0035) 
(0036) /*-----------------------------------------------------------------------
(0037) LCD_clear         : LCD清屏函数
(0038) 
(0039) 编写日期          :2004-8-10 
(0040) 最后修改日期      :2004-8-10 
(0041) -----------------------------------------------------------------------*/
(0042) void LCD_clear(void)
(0043)   {
(0044)     unsigned int i;
(0045) 
(0046)     LCD_write_byte(0x0c, 0);			
    031C 2722      CLR	R18
    031D E00C      LDI	R16,0xC
    031E D18F      RCALL	_LCD_write_byte
(0047)     LCD_write_byte(0x80, 0);			
    031F 2722      CLR	R18
    0320 E800      LDI	R16,0x80
    0321 D18C      RCALL	_LCD_write_byte
(0048) 
(0049)     for (i=0; i<504; i++)
    0322 2744      CLR	R20
    0323 2755      CLR	R21
    0324 C005      RJMP	0x032A
(0050)       LCD_write_byte(0, 1);			
    0325 E021      LDI	R18,1
    0326 2700      CLR	R16
    0327 D186      RCALL	_LCD_write_byte
    0328 5F4F      SUBI	R20,0xFF
    0329 4F5F      SBCI	R21,0xFF
    032A 3F48      CPI	R20,0xF8
    032B E0E1      LDI	R30,1
    032C 075E      CPC	R21,R30
    032D F3B8      BCS	0x0325
    032E 940E04FA  CALL	pop_gset1
    0330 9508      RET
_LCD_set_XY:
  Y                    --> R22
  X                    --> R20
    0331 940E04F5  CALL	push_gset2
    0333 2F62      MOV	R22,R18
    0334 2F40      MOV	R20,R16
(0051)   }
(0052) 
(0053) /*-----------------------------------------------------------------------
(0054) LCD_set_XY        : 设置LCD坐标函数
(0055) 
(0056) 输入参数:X       :0-83
(0057)           Y       :0-5
(0058) 
(0059) 编写日期          :2004-8-10 
(0060) 最后修改日期      :2004-8-10 
(0061) -----------------------------------------------------------------------*/
(0062) void LCD_set_XY(unsigned char X, unsigned char Y)
(0063)   {
(0064)     LCD_write_byte(0x40 | Y, 0);		// column
    0335 2722      CLR	R18
    0336 2F06      MOV	R16,R22
    0337 6400      ORI	R16,0x40
    0338 D175      RCALL	_LCD_write_byte
(0065)     LCD_write_byte(0x80 | X, 0);          	// row
    0339 2722      CLR	R18
    033A 2F04      MOV	R16,R20
    033B 6800      ORI	R16,0x80
    033C D171      RCALL	_LCD_write_byte
    033D 940E04E6  CALL	pop_gset2
    033F 9508      RET
_LCD_write_char:
  line                 --> R20
  c                    --> R22
    0340 940E04F5  CALL	push_gset2
    0342 2F60      MOV	R22,R16
(0066)   }
(0067) 
(0068) /*-----------------------------------------------------------------------
(0069) LCD_write_char    : 显示英文字符
(0070) 
(0071) 输入参数:c       :显示的字符;
(0072) 
(0073) 编写日期          :2004-8-10 
(0074) 最后修改日期      :2004-8-10 
(0075) -----------------------------------------------------------------------*/
(0076) void LCD_write_char(unsigned char c)
(0077)   {
(0078)     unsigned char line;
(0079) 

⌨️ 快捷键说明

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