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

📄 3310lcd_prj.lst

📁 Nakia LCD3310 Driver
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    024F E5CF      LDI	R28,0x5F
    0250 E0D4      LDI	R29,4
    0251 BFCD      OUT	0x3D,R28
    0252 BFDE      OUT	0x3E,R29
    0253 51C0      SUBI	R28,0x10
    0254 40D0      SBCI	R29,0
    0255 EA0A      LDI	R16,0xAA
    0256 8308      STD	Y+0,R16
    0257 2400      CLR	R0
    0258 EFEF      LDI	R30,0xFF
    0259 E0F0      LDI	R31,0
    025A E010      LDI	R17,0
    025B 3FEF      CPI	R30,0xFF
    025C 07F1      CPC	R31,R17
    025D F011      BEQ	0x0260
    025E 9201      ST	R0,Z+
    025F CFFB      RJMP	0x025B
    0260 8300      STD	Z+0,R16
    0261 EFEE      LDI	R30,0xFE
    0262 E0F3      LDI	R31,3
    0263 E6A0      LDI	R26,0x60
    0264 E0B0      LDI	R27,0
    0265 E014      LDI	R17,4
    0266 39ED      CPI	R30,0x9D
    0267 07F1      CPC	R31,R17
    0268 F021      BEQ	0x026D
    0269 95C8      LPM
    026A 9631      ADIW	R30,1
    026B 920D      ST	R0,X+
    026C CFF9      RJMP	0x0266
    026D D001      RCALL	_main
_exit:
    026E CFFF      RJMP	_exit
_main:
    026F 9727      SBIW	R28,7
FILE: D:\AVR\527dz\0----test\实验三\3310\3310LCD_main.c
(0001) /***********************************************
(0002) **** 本原代码转自:www.527dz.com (作者527dz) ***
(0003) ****  由armok阿莫(www.OurAVR.com)整理及修改  ***
(0004) ****  2004.10.05                             ***
(0005) ***********************************************/   
(0006) 
(0007) 
(0008) #include <iom8v.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系统内部时钟校准    
    0270 E98D      LDI	R24,0x9D
    0271 BF81      OUT	0x31,R24
(0017)     //设置MCU的I/O口
(0018)     DDRB |= LCD_RST | LCD_DC | LCD_CE | SPI_MOSI | SPI_CLK;
    0272 B387      IN	R24,0x17
    0273 638D      ORI	R24,0x3D
    0274 BB87      OUT	0x17,R24
(0019)     SPSR |= BIT(SPI2X);                 // 设置SPI时钟倍速
    0275 9A70      SBI	0x0E,0
(0020)     SPCR |= BIT(SPE)|BIT(MSTR);		// 使能SPI接口,主机模式,4M时钟
    0276 B18D      IN	R24,0x0D
    0277 6580      ORI	R24,0x50
    0278 B98D      OUT	0x0D,R24
(0021)  
(0022)     LCD_init();    
    0279 D04B      RCALL	_LCD_init
    027A C021      RJMP	0x029C
(0023) 
(0024) 
(0025) 	
(0026) 
(0027)  		
(0028) 
(0029)    
(0030)   while(1)  
(0031)       {
(0032) 
(0033) 	    LCD_write_chinese_string(0,3,12,3,0,0); //显示“我们的”,在x=0,y=2位置,显示write_chinese_string的12点阵汉字,显示4个,从第0个开始显示,行距为0,
    027B 2422      CLR	R2
    027C 822E      STD	Y+6,R2
    027D 822C      STD	Y+4,R2
    027E E083      LDI	R24,3
    027F 838A      STD	Y+2,R24
    0280 E08C      LDI	R24,0xC
    0281 8388      STD	Y+0,R24
    0282 E023      LDI	R18,3
    0283 2700      CLR	R16
    0284 D0AA      RCALL	_LCD_write_chinese_string
(0034)         LCD_draw_bmp_pixel(36,2,AVR_bmp,48,32);  //显示AVR大图
    0285 E280      LDI	R24,0x20
    0286 838C      STD	Y+4,R24
    0287 E380      LDI	R24,0x30
    0288 838A      STD	Y+2,R24
    0289 E680      LDI	R24,0x60
    028A E090      LDI	R25,0
    028B 8399      STD	Y+1,R25
    028C 8388      STD	Y+0,R24
    028D E022      LDI	R18,2
    028E E204      LDI	R16,0x24
    028F D18A      RCALL	_LCD_draw_bmp_pixel
(0035) 	    LCD_write_english_string(0,5,"www.OurAVR.com");  
    0290 EF80      LDI	R24,0xF0
    0291 E090      LDI	R25,0
    0292 8399      STD	Y+1,R25
    0293 8388      STD	Y+0,R24
    0294 E025      LDI	R18,5
    0295 2700      CLR	R16
    0296 D084      RCALL	_LCD_write_english_string
(0036)         LCD_move_chinese_string(0, 0, 100);  //在屏幕最上面一行显示:欢迎光临本网站!显示速度为100,数值越大,速度越慢。
    0297 E684      LDI	R24,0x64
    0298 8388      STD	Y+0,R24
    0299 2722      CLR	R18
    029A 2700      CLR	R16
    029B D0D5      RCALL	_LCD_move_chinese_string
    029C CFDE      RJMP	0x027B
    029D 9627      ADIW	R28,7
    029E 9508      RET
FILE: D:\AVR\527dz\0----test\实验三\3310\delay_function.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void)                 //1us延时函数
(0006)   {
(0007)    asm("nop");
_delay_1us:
    029F 0000      NOP
    02A0 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    02A1 D1FF      RCALL	push_gset2
    02A2 01B8      MOVW	R22,R16
(0008)   }
(0009) 
(0010) void delay_nus(unsigned int n)       //N us延时函数
(0011)   {
(0012)    unsigned int i=0;
    02A3 2744      CLR	R20
    02A4 2755      CLR	R21
(0013)    for (i=0;i<n;i++)
    02A5 C003      RJMP	0x02A9
(0014)    delay_1us();
    02A6 DFF8      RCALL	_delay_1us
    02A7 5F4F      SUBI	R20,0xFF
    02A8 4F5F      SBCI	R21,0xFF
    02A9 1746      CP	R20,R22
    02AA 0757      CPC	R21,R23
    02AB F3D0      BCS	0x02A6
    02AC D1E8      RCALL	pop_gset2
    02AD 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
    02AE 2700      CLR	R16
    02AF 2711      CLR	R17
    02B0 C002      RJMP	0x02B3
    02B1 5F0F      SUBI	R16,0xFF
    02B2 4F1F      SBCI	R17,0xFF
    02B3 3704      CPI	R16,0x74
    02B4 E0E4      LDI	R30,4
    02B5 071E      CPC	R17,R30
    02B6 F3D0      BCS	0x02B1
    02B7 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    02B8 D1E8      RCALL	push_gset2
    02B9 01B8      MOVW	R22,R16
(0021)   }
(0022)   
(0023) void delay_nms(unsigned int n)       //N ms延时函数
(0024)   {
(0025)    unsigned int i=0;
    02BA 2744      CLR	R20
    02BB 2755      CLR	R21
(0026)    for (i=0;i<n;i++)
    02BC C003      RJMP	0x02C0
(0027)    delay_1ms();
    02BD DFF0      RCALL	_delay_1ms
    02BE 5F4F      SUBI	R20,0xFF
    02BF 4F5F      SBCI	R21,0xFF
    02C0 1746      CP	R20,R22
    02C1 0757      CPC	R21,R23
    02C2 F3D0      BCS	0x02BD
    02C3 D1D1      RCALL	pop_gset2
    02C4 9508      RET
FILE: D:\AVR\527dz\0----test\实验三\3310\3310LCD_function.c
(0001) #include <iom8v.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:
    02C5 98C4      CBI	0x18,4
(0017)     delay_1us();
    02C6 DFD8      RCALL	_delay_1us
(0018)     PORTB |= LCD_RST;
    02C7 9AC4      SBI	0x18,4
(0019)     
(0020)     PORTB &= ~LCD_CE ;		// 关闭LCD
    02C8 98C2      CBI	0x18,2
(0021)     delay_1us();
    02C9 DFD5      RCALL	_delay_1us
(0022)     PORTB |= LCD_CE;		// 使能LCD
    02CA 9AC2      SBI	0x18,2
(0023)     delay_1us();
    02CB DFD3      RCALL	_delay_1us
(0024) 
(0025)     LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
    02CC 2722      CLR	R18
    02CD E201      LDI	R16,0x21
    02CE D18E      RCALL	_LCD_write_byte
(0026)     LCD_write_byte(0xc8, 0);	// 设置偏置电压
    02CF 2722      CLR	R18
    02D0 EC08      LDI	R16,0xC8
    02D1 D18B      RCALL	_LCD_write_byte
(0027)     LCD_write_byte(0x06, 0);	// 温度校正
    02D2 2722      CLR	R18
    02D3 E006      LDI	R16,6
    02D4 D188      RCALL	_LCD_write_byte
(0028)     LCD_write_byte(0x13, 0);	// 1:48
    02D5 2722      CLR	R18
    02D6 E103      LDI	R16,0x13
    02D7 D185      RCALL	_LCD_write_byte
(0029)     LCD_write_byte(0x20, 0);	// 使用基本命令
    02D8 2722      CLR	R18
    02D9 E200      LDI	R16,0x20
    02DA D182      RCALL	_LCD_write_byte
(0030)     LCD_clear();	        // 清屏
    02DB D005      RCALL	_LCD_clear
(0031)     LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示
    02DC 2722      CLR	R18
    02DD E00C      LDI	R16,0xC
    02DE D17E      RCALL	_LCD_write_byte
(0032)         
(0033)     PORTB &= ~LCD_CE ;          // 关闭LCD
    02DF 98C2      CBI	0x18,2
    02E0 9508      RET
_LCD_clear:
  i                    --> R20
    02E1 D1C1      RCALL	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);			
    02E2 2722      CLR	R18
    02E3 E00C      LDI	R16,0xC
    02E4 D178      RCALL	_LCD_write_byte
(0047)     LCD_write_byte(0x80, 0);			
    02E5 2722      CLR	R18
    02E6 E800      LDI	R16,0x80
    02E7 D175      RCALL	_LCD_write_byte
(0048) 
(0049)     for (i=0; i<504; i++)
    02E8 2744      CLR	R20
    02E9 2755      CLR	R21
    02EA C005      RJMP	0x02F0
(0050)       LCD_write_byte(0, 1);			
    02EB E021      LDI	R18,1
    02EC 2700      CLR	R16
    02ED D16F      RCALL	_LCD_write_byte
    02EE 5F4F      SUBI	R20,0xFF
    02EF 4F5F      SBCI	R21,0xFF
    02F0 3F48      CPI	R20,0xF8
    02F1 E0E1      LDI	R30,1
    02F2 075E      CPC	R21,R30
    02F3 F3B8      BCS	0x02EB
    02F4 D1B1      RCALL	pop_gset1
    02F5 9508      RET
_LCD_set_XY:
  Y                    --> R22
  X                    --> R20
    02F6 D1AA      RCALL	push_gset2
    02F7 2F62      MOV	R22,R18
    02F8 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
    02F9 2722      CLR	R18
    02FA 2F06      MOV	R16,R22
    02FB 6400      ORI	R16,0x40
    02FC D160      RCALL	_LCD_write_byte
(0065)     LCD_write_byte(0x80 | X, 0);          	// row
    02FD 2722      CLR	R18
    02FE 2F04      MOV	R16,R20
    02FF 6800      ORI	R16,0x80
    0300 D15C      RCALL	_LCD_write_byte
    0301 D193      RCALL	pop_gset2
    0302 9508      RET
_LCD_write_char:
  line                 --> R20
  c                    --> R22
    0303 D19D      RCALL	push_gset2
    0304 2F60      MOV	R22,R16
(0066)   }
(0067) 
(0068) /*-----------------------------------------------------------------------
(0069) LCD_write_char    : 显示英文字符
(0070) 
(0071) 输入参数:c       :显示的字符;
(0072) 
(0073) 编写日期          :2004-8-10 

⌨️ 快捷键说明

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