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

📄 3310lcd_prj.lst

📁 /*********************************************** **** 本原代码转自:www.527dz.com (作者527dz) *** **** 由arm
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    0266 E5CF      LDI	R28,0x5F
    0267 E0D4      LDI	R29,4
    0268 BFCD      OUT	0x3D,R28
    0269 BFDE      OUT	0x3E,R29
    026A 51C0      SUBI	R28,0x10
    026B 40D0      SBCI	R29,0
    026C EA0A      LDI	R16,0xAA
    026D 8308      STD	Y+0,R16
    026E 2400      CLR	R0
    026F EFEF      LDI	R30,0xFF
    0270 E0F0      LDI	R31,0
    0271 E010      LDI	R17,0
    0272 3FEF      CPI	R30,0xFF
    0273 07F1      CPC	R31,R17
    0274 F011      BEQ	0x0277
    0275 9201      ST	R0,Z+
    0276 CFFB      RJMP	0x0272
    0277 8300      STD	Z+0,R16
    0278 E2EC      LDI	R30,0x2C
    0279 E0F4      LDI	R31,4
    027A E6A0      LDI	R26,0x60
    027B E0B0      LDI	R27,0
    027C E014      LDI	R17,4
    027D 3CEB      CPI	R30,0xCB
    027E 07F1      CPC	R31,R17
    027F F021      BEQ	0x0284
    0280 95C8      LPM
    0281 9631      ADIW	R30,1
    0282 920D      ST	R0,X+
    0283 CFF9      RJMP	0x027D
    0284 940E0287  CALL	_main
_exit:
    0286 CFFF      RJMP	_exit
_main:
    0287 9727      SBIW	R28,7
FILE: D:\AVR\527dz\00--Mega16\3310\3310LCD_main.c
(0001) /***********************************************
(0002) **** 本原代码转自:www.527dz.com (作者527dz) ***
(0003) ****  由armok阿莫(www.OurAVR.com)整理及修改  ***
(0004) ****  2004.10.05                             ***
(0005) ***********************************************/   
(0006) 
(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系统内部时钟校准    
    0288 E98D      LDI	R24,0x9D
    0289 BF81      OUT	0x31,R24
(0017)     //设置MCU的I/O口
(0018)     DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI | SPI_CLK;
    028A B387      IN	R24,0x17
    028B 6F88      ORI	R24,0xF8
    028C BB87      OUT	0x17,R24
(0019)     SPSR |= BIT(SPI2X);                 // 设置SPI时钟倍速
    028D 9A70      SBI	0x0E,0
(0020)     SPCR |= BIT(SPE)|BIT(MSTR);		// 使能SPI接口,主机模式,4M时钟
    028E B18D      IN	R24,0x0D
    028F 6580      ORI	R24,0x50
    0290 B98D      OUT	0x0D,R24
(0021)  
(0022)     LCD_init(); //初始化液晶    
    0291 940E02E6  CALL	_LCD_init
    0293 C025      RJMP	0x02B9
(0023)  
(0024)   while(1)  
(0025)       {
(0026) 	    LCD_write_chinese_string(0,3,12,3,0,0); //显示“我们的”,在x=0,y=2位置,显示write_chinese_string的12点阵汉字,显示4个,从第0个开始显示,行距为0,
    0294 2422      CLR	R2
    0295 822E      STD	Y+6,R2
    0296 822C      STD	Y+4,R2
    0297 E083      LDI	R24,3
    0298 838A      STD	Y+2,R24
    0299 E08C      LDI	R24,0xC
    029A 8388      STD	Y+0,R24
    029B E023      LDI	R18,3
    029C 2700      CLR	R16
    029D 940E035B  CALL	_LCD_write_chinese_string
(0027)         LCD_draw_bmp_pixel(36,2,AVR_bmp,48,32);  //显示AVR大图
    029F E280      LDI	R24,0x20
    02A0 838C      STD	Y+4,R24
    02A1 E380      LDI	R24,0x30
    02A2 838A      STD	Y+2,R24
    02A3 E680      LDI	R24,0x60
    02A4 E090      LDI	R25,0
    02A5 8399      STD	Y+1,R25
    02A6 8388      STD	Y+0,R24
    02A7 E022      LDI	R18,2
    02A8 E204      LDI	R16,0x24
    02A9 940E0451  CALL	_LCD_draw_bmp_pixel
(0028) 	    LCD_write_english_string(0,5,"www.OurAVR.com");  
    02AB EF80      LDI	R24,0xF0
    02AC E090      LDI	R25,0
    02AD 8399      STD	Y+1,R25
    02AE 8388      STD	Y+0,R24
    02AF E025      LDI	R18,5
    02B0 2700      CLR	R16
    02B1 940E0345  CALL	_LCD_write_english_string
(0029)         LCD_move_chinese_string(0, 0, 100);  //在屏幕最上面一行显示:欢迎光临本网站!显示速度为100,数值越大,速度越慢。
    02B3 E684      LDI	R24,0x64
    02B4 8388      STD	Y+0,R24
    02B5 2722      CLR	R18
    02B6 2700      CLR	R16
    02B7 940E03A0  CALL	_LCD_move_chinese_string
    02B9 CFDA      RJMP	0x0294
    02BA 9627      ADIW	R28,7
    02BB 9508      RET
FILE: D:\AVR\527dz\00--Mega16\3310\delay_function.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void)                 //1us延时函数
(0006)   {
(0007)    asm("nop");
_delay_1us:
    02BC 0000      NOP
    02BD 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    02BE 940E04E0  CALL	push_gset2
    02C0 01B8      MOVW	R22,R16
(0008)   }
(0009) 
(0010) void delay_nus(unsigned int n)       //N us延时函数
(0011)   {
(0012)    unsigned int i=0;
    02C1 2744      CLR	R20
    02C2 2755      CLR	R21
(0013)    for (i=0;i<n;i++)
    02C3 C003      RJMP	0x02C7
(0014)    delay_1us();
    02C4 DFF7      RCALL	_delay_1us
    02C5 5F4F      SUBI	R20,0xFF
    02C6 4F5F      SBCI	R21,0xFF
    02C7 1746      CP	R20,R22
    02C8 0757      CPC	R21,R23
    02C9 F3D0      BCS	0x02C4
    02CA 940E04D1  CALL	pop_gset2
    02CC 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
    02CD 2700      CLR	R16
    02CE 2711      CLR	R17
    02CF C002      RJMP	0x02D2
    02D0 5F0F      SUBI	R16,0xFF
    02D1 4F1F      SBCI	R17,0xFF
    02D2 3704      CPI	R16,0x74
    02D3 E0E4      LDI	R30,4
    02D4 071E      CPC	R17,R30
    02D5 F3D0      BCS	0x02D0
    02D6 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    02D7 940E04E0  CALL	push_gset2
    02D9 01B8      MOVW	R22,R16
(0021)   }
(0022)   
(0023) void delay_nms(unsigned int n)       //N ms延时函数
(0024)   {
(0025)    unsigned int i=0;
    02DA 2744      CLR	R20
    02DB 2755      CLR	R21
(0026)    for (i=0;i<n;i++)
    02DC C003      RJMP	0x02E0
(0027)    delay_1ms();
    02DD DFEF      RCALL	_delay_1ms
    02DE 5F4F      SUBI	R20,0xFF
    02DF 4F5F      SBCI	R21,0xFF
    02E0 1746      CP	R20,R22
    02E1 0757      CPC	R21,R23
    02E2 F3D0      BCS	0x02DD
    02E3 940E04D1  CALL	pop_gset2
    02E5 9508      RET
FILE: D:\AVR\527dz\00--Mega16\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:
    02E6 98C6      CBI	0x18,6
(0017)     delay_1us();
    02E7 940E02BC  CALL	_delay_1us
(0018)     PORTB |= LCD_RST;
    02E9 9AC6      SBI	0x18,6
(0019)     
(0020)     PORTB &= ~LCD_CE ;		// 关闭LCD
    02EA 98C4      CBI	0x18,4
(0021)     delay_1us();
    02EB 940E02BC  CALL	_delay_1us
(0022)     PORTB |= LCD_CE;		// 使能LCD
    02ED 9AC4      SBI	0x18,4
(0023)     delay_1us();
    02EE 940E02BC  CALL	_delay_1us
(0024) 
(0025)     LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
    02F0 2722      CLR	R18
    02F1 E201      LDI	R16,0x21
    02F2 D1A6      RCALL	_LCD_write_byte
(0026)     LCD_write_byte(0xc8, 0);	// 设置偏置电压
    02F3 2722      CLR	R18
    02F4 EC08      LDI	R16,0xC8
    02F5 D1A3      RCALL	_LCD_write_byte
(0027)     LCD_write_byte(0x06, 0);	// 温度校正
    02F6 2722      CLR	R18
    02F7 E006      LDI	R16,6
    02F8 D1A0      RCALL	_LCD_write_byte
(0028)     LCD_write_byte(0x13, 0);	// 1:48
    02F9 2722      CLR	R18
    02FA E103      LDI	R16,0x13
    02FB D19D      RCALL	_LCD_write_byte
(0029)     LCD_write_byte(0x20, 0);	// 使用基本命令
    02FC 2722      CLR	R18
    02FD E200      LDI	R16,0x20
    02FE D19A      RCALL	_LCD_write_byte
(0030)     LCD_clear();	        // 清屏
    02FF D005      RCALL	_LCD_clear
(0031)     LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示
    0300 2722      CLR	R18
    0301 E00C      LDI	R16,0xC
    0302 D196      RCALL	_LCD_write_byte
(0032)         
(0033)     PORTB &= ~LCD_CE ;          // 关闭LCD
    0303 98C4      CBI	0x18,4
    0304 9508      RET
_LCD_clear:
  i                    --> R20
    0305 940E04E2  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);			
    0307 2722      CLR	R18
    0308 E00C      LDI	R16,0xC
    0309 D18F      RCALL	_LCD_write_byte
(0047)     LCD_write_byte(0x80, 0);			
    030A 2722      CLR	R18
    030B E800      LDI	R16,0x80
    030C D18C      RCALL	_LCD_write_byte
(0048) 
(0049)     for (i=0; i<504; i++)
    030D 2744      CLR	R20
    030E 2755      CLR	R21
    030F C005      RJMP	0x0315
(0050)       LCD_write_byte(0, 1);			
    0310 E021      LDI	R18,1
    0311 2700      CLR	R16
    0312 D186      RCALL	_LCD_write_byte
    0313 5F4F      SUBI	R20,0xFF
    0314 4F5F      SBCI	R21,0xFF
    0315 3F48      CPI	R20,0xF8
    0316 E0E1      LDI	R30,1
    0317 075E      CPC	R21,R30
    0318 F3B8      BCS	0x0310
    0319 940E04E5  CALL	pop_gset1
    031B 9508      RET
_LCD_set_XY:
  Y                    --> R22
  X                    --> R20
    031C 940E04E0  CALL	push_gset2
    031E 2F62      MOV	R22,R18
    031F 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
    0320 2722      CLR	R18
    0321 2F06      MOV	R16,R22
    0322 6400      ORI	R16,0x40
    0323 D175      RCALL	_LCD_write_byte
(0065)     LCD_write_byte(0x80 | X, 0);          	// row
    0324 2722      CLR	R18
    0325 2F04      MOV	R16,R20
    0326 6800      ORI	R16,0x80
    0327 D171      RCALL	_LCD_write_byte
    0328 940E04D1  CALL	pop_gset2
    032A 9508      RET
_LCD_write_char:
  line                 --> R20
  c                    --> R22
    032B 940E04E0  CALL	push_gset2
    032D 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)   {

⌨️ 快捷键说明

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