?? 3310lcd_prj.lst
字號(hào):
__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) **** 本原代碼轉(zhuǎn)自: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系統(tǒng)內(nèi)部時(shí)鐘校準(zhǔn)
0288 E98D LDI R24,0x9D
0289 BF81 OUT 0x31,R24
(0017) //設(shè)置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); // 設(shè)置SPI時(shí)鐘倍速
028D 9A70 SBI 0x0E,0
(0020) SPCR |= BIT(SPE)|BIT(MSTR); // 使能SPI接口,主機(jī)模式,4M時(shí)鐘
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點(diǎn)陣漢字,顯示4個(gè),從第0個(gè)開始顯示,行距為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); //在屏幕最上面一行顯示:歡迎光臨本網(wǎng)站!顯示速度為100,數(shù)值越大,速度越慢。
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) 延時(shí)函數(shù)
(0003) 系統(tǒng)時(shí)鐘:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void) //1us延時(shí)函數(shù)
(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延時(shí)函數(shù)
(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延時(shí)函數(shù)
(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延時(shí)函數(shù)
(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; // 產(chǎn)生一個(gè)讓LCD復(fù)位的低電平脈沖
_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 ; // 關(guān)閉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); // 使用擴(kuò)展命令設(shè)置LCD模式
02F0 2722 CLR R18
02F1 E201 LDI R16,0x21
02F2 D1A6 RCALL _LCD_write_byte
(0026) LCD_write_byte(0xc8, 0); // 設(shè)置偏置電壓
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); // 設(shè)定顯示模式,正常顯示
0300 2722 CLR R18
0301 E00C LDI R16,0xC
0302 D196 RCALL _LCD_write_byte
(0032)
(0033) PORTB &= ~LCD_CE ; // 關(guān)閉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清屏函數(shù)
(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 : 設(shè)置LCD坐標(biāo)函數(shù)
(0055)
(0056) 輸入?yún)?shù):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) 輸入?yún)?shù):c :顯示的字符;
(0072)
(0073) 編寫日期 :2004-8-10
(0074) 最后修改日期 :2004-8-10
(0075) -----------------------------------------------------------------------*/
(0076) void LCD_write_char(unsigned char c)
(0077) {
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -