📄 3310lcd_prj.lst
字号:
__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 + -