📄 18lcd.lst
字号:
__text_start:
__start:
03E3 EFCF LDI R28,0xFF
03E4 E0D4 LDI R29,4
03E5 BFCD OUT 0x3D,R28
03E6 BFDE OUT 0x3E,R29
03E7 51C0 SUBI R28,0x10
03E8 40D0 SBCI R29,0
03E9 EA0A LDI R16,0xAA
03EA 8308 STD Y+0,R16
03EB 2400 CLR R0
03EC E0E6 LDI R30,6
03ED E0F1 LDI R31,1
03EE E011 LDI R17,1
03EF 30E6 CPI R30,6
03F0 07F1 CPC R31,R17
03F1 F011 BEQ 0x03F4
03F2 9201 ST R0,Z+
03F3 CFFB RJMP 0x03EF
03F4 8300 STD Z+0,R16
03F5 ECE0 LDI R30,0xC0
03F6 E0F7 LDI R31,7
03F7 E0A0 LDI R26,0
03F8 E0B1 LDI R27,1
03F9 E017 LDI R17,7
03FA 3CE6 CPI R30,0xC6
03FB 07F1 CPC R31,R17
03FC F021 BEQ 0x0401
03FD 95C8 LPM
03FE 9631 ADIW R30,1
03FF 920D ST R0,X+
0400 CFF9 RJMP 0x03FA
0401 940E0425 CALL _main
_exit:
0403 CFFF RJMP _exit
FILE: C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\main.c
(0001) /*
(0002) 实验十八:
(0003) LCD12864液晶屏显示实验。
(0004) 1、LCD12864显示实验。显示AVR开发网及网址信息。
(0005) 2、内部1 M晶振,程序采用单任务方式,软件延时。
(0006) 3、进行此实验需要接上外置LCD12864液晶显示屏。
(0007) 4、RW1用于调节显示屏的对比度。
(0008)
(0009) AVR mega128学习板
(0010) www.iccavr.com 阿发
(0011) 16:22 2007-10-18
(0012) */
(0013)
(0014) #include <iom128v.h>
(0015) #include "font.h"
(0016) #include "lcd12864.h"
(0017)
(0018) /*IO口初始化函数*/
(0019) void io_init(void) {
(0020)
(0021) DDRA = 0xFF; /*方向输出*/
_io_init:
0404 EF8F LDI R24,0xFF
0405 BB8A OUT 0x1A,R24
(0022) PORTA = 0xFF; /*高电平*/
0406 BB8B OUT 0x1B,R24
(0023) DDRB = 0x00; /*方向输入*/
0407 2422 CLR R2
0408 BA27 OUT 0x17,R2
(0024) PORTB = 0xFF; /*打开上拉*/
0409 BB88 OUT 0x18,R24
(0025) DDRC = 0xFF; /*不用的IO口建议设置为输入带上拉*/
040A BB84 OUT 0x14,R24
(0026) PORTC = 0x00;
040B BA25 OUT 0x15,R2
(0027) DDRD = 0x00;
040C BA21 OUT 0x11,R2
(0028) PORTD = 0xFF;
040D BB82 OUT 0x12,R24
(0029) DDRE = 0x00;
040E B822 OUT 0x02,R2
(0030) PORTE = 0xFF;
040F B983 OUT 0x03,R24
(0031) DDRF = 0x00;
0410 E6E1 LDI R30,0x61
0411 E0F0 LDI R31,0
0412 8220 STD Z+0,R2
(0032) PORTF = 0xFF;
0413 E6E2 LDI R30,0x62
0414 8380 STD Z+0,R24
(0033) DDRG = 0x00;
0415 E6E4 LDI R30,0x64
0416 8220 STD Z+0,R2
(0034) PORTG = 0xFF;
0417 E6E5 LDI R30,0x65
0418 8380 STD Z+0,R24
0419 9508 RET
(0035) }
(0036) unsigned int get_ad(void) {
(0037)
(0038) unsigned int i;
(0039)
(0040)
(0041) ADMUX = (1 << REFS0); /*基准AVCC、通道0*/
_get_ad:
i --> R16
041A E480 LDI R24,0x40
041B B987 OUT 0x07,R24
(0042) ADCSRA = (1 << ADEN) | (1 << ADSC) /*使能、开启*/
041C EC83 LDI R24,0xC3
041D B986 OUT 0x06,R24
(0043) | (1 << ADPS1) | (1 << ADPS0); /*8分频*/
(0044) while(!(ADCSRA & (1 << ADIF))); /*等待采样结束*/
041E 9B34 SBIS 0x06,4
041F CFFE RJMP 0x041E
(0045)
(0046) i = ADC; /*读取AD结果*/
0420 B104 IN R16,0x04
0421 B115 IN R17,0x05
(0047) ADCSRA &= ~(1 << ADIF); /*清标志*/
0422 9834 CBI 0x06,4
(0048) ADCSRA &= ~(1 << ADEN); /*关闭转换*/
0423 9837 CBI 0x06,7
(0049)
(0050) return i; /*返回结果*/
0424 9508 RET
_main:
t --> R20
0425 9722 SBIW R28,2
(0051) }
(0052) void main(void) {
(0053) int t;
(0054) io_init(); /*IO口初始化*/
0426 DFDD RCALL _io_init
(0055) disp_init(); /*LCD初始化*/
0427 940E06AC CALL _disp_init
(0056) disp_clear(0, 128, 0); /*清除四行显示*/
0429 2422 CLR R2
042A 8228 STD Y+0,R2
042B E820 LDI R18,0x80
042C 2700 CLR R16
042D 940E0570 CALL _disp_clear
(0057) disp_clear(0, 128, 2);
042F E082 LDI R24,2
0430 8388 STD Y+0,R24
0431 E820 LDI R18,0x80
0432 2700 CLR R16
0433 940E0570 CALL _disp_clear
(0058) disp_clear(0, 128, 4);
0435 E084 LDI R24,4
0436 8388 STD Y+0,R24
0437 E820 LDI R18,0x80
0438 2700 CLR R16
0439 940E0570 CALL _disp_clear
(0059) disp_clear(0, 128, 6);
043B E086 LDI R24,6
043C 8388 STD Y+0,R24
043D E820 LDI R18,0x80
043E 2700 CLR R16
043F 940E0570 CALL _disp_clear
(0060)
(0061)
(0062) disp_myself(0,0,124);
0441 E78C LDI R24,0x7C
0442 8388 STD Y+0,R24
0443 2722 CLR R18
0444 2700 CLR R16
0445 940E06BC CALL _disp_myself
(0063) disp_myself(0,1,124);
0447 E78C LDI R24,0x7C
0448 8388 STD Y+0,R24
0449 E021 LDI R18,1
044A 2700 CLR R16
044B 940E06BC CALL _disp_myself
(0064) disp_myself(0,2,124);
044D E78C LDI R24,0x7C
044E 8388 STD Y+0,R24
044F E022 LDI R18,2
0450 2700 CLR R16
0451 940E06BC CALL _disp_myself
(0065) disp_myself(0,3,124);
0453 E78C LDI R24,0x7C
0454 8388 STD Y+0,R24
0455 E023 LDI R18,3
0456 2700 CLR R16
0457 940E06BC CALL _disp_myself
(0066) disp_myself(0,4,124);
0459 E78C LDI R24,0x7C
045A 8388 STD Y+0,R24
045B E024 LDI R18,4
045C 2700 CLR R16
045D 940E06BC CALL _disp_myself
(0067) disp_myself(0,5,124);
045F E78C LDI R24,0x7C
0460 8388 STD Y+0,R24
0461 E025 LDI R18,5
0462 2700 CLR R16
0463 940E06BC CALL _disp_myself
(0068) disp_myself(0,6,124);
0465 E78C LDI R24,0x7C
0466 8388 STD Y+0,R24
0467 E026 LDI R18,6
0468 2700 CLR R16
0469 940E06BC CALL _disp_myself
(0069) disp_myself(0,7,124);
046B E78C LDI R24,0x7C
046C 8388 STD Y+0,R24
046D E027 LDI R18,7
046E 2700 CLR R16
046F 940E06BC CALL _disp_myself
(0070) disp_myself(8,0,124);
0471 E78C LDI R24,0x7C
0472 8388 STD Y+0,R24
0473 2722 CLR R18
0474 E008 LDI R16,0x8
0475 940E06BC CALL _disp_myself
(0071) disp_myself(8,1,124);
0477 E78C LDI R24,0x7C
0478 8388 STD Y+0,R24
0479 E021 LDI R18,1
047A E008 LDI R16,0x8
047B 940E06BC CALL _disp_myself
(0072) disp_myself(8,2,124);
047D E78C LDI R24,0x7C
047E 8388 STD Y+0,R24
047F E022 LDI R18,2
0480 E008 LDI R16,0x8
0481 940E06BC CALL _disp_myself
(0073) disp_myself(8,3,124);
0483 E78C LDI R24,0x7C
0484 8388 STD Y+0,R24
0485 E023 LDI R18,3
0486 E008 LDI R16,0x8
0487 940E06BC CALL _disp_myself
(0074) disp_myself(8,4,124);
0489 E78C LDI R24,0x7C
048A 8388 STD Y+0,R24
048B E024 LDI R18,4
048C E008 LDI R16,0x8
048D 940E06BC CALL _disp_myself
(0075) disp_myself(8,5,124);
048F E78C LDI R24,0x7C
0490 8388 STD Y+0,R24
0491 E025 LDI R18,5
0492 E008 LDI R16,0x8
0493 940E06BC CALL _disp_myself
(0076) disp_myself(8,6,124);
0495 E78C LDI R24,0x7C
0496 8388 STD Y+0,R24
0497 E026 LDI R18,6
0498 E008 LDI R16,0x8
0499 940E06BC CALL _disp_myself
(0077) disp_myself(8,7,124);
049B E78C LDI R24,0x7C
049C 8388 STD Y+0,R24
049D E027 LDI R18,7
049E E008 LDI R16,0x8
049F 940E06BC CALL _disp_myself
(0078) disp_myself(112,0,124);
04A1 E78C LDI R24,0x7C
04A2 8388 STD Y+0,R24
04A3 2722 CLR R18
04A4 E700 LDI R16,0x70
04A5 940E06BC CALL _disp_myself
(0079) disp_myself(112,1,124);
04A7 E78C LDI R24,0x7C
04A8 8388 STD Y+0,R24
04A9 E021 LDI R18,1
04AA E700 LDI R16,0x70
04AB 940E06BC CALL _disp_myself
(0080) disp_myself(112,2,124);
04AD E78C LDI R24,0x7C
04AE 8388 STD Y+0,R24
04AF E022 LDI R18,2
04B0 E700 LDI R16,0x70
04B1 940E06BC CALL _disp_myself
(0081) disp_myself(112,3,124);
04B3 E78C LDI R24,0x7C
04B4 8388 STD Y+0,R24
04B5 E023 LDI R18,3
04B6 E700 LDI R16,0x70
04B7 940E06BC CALL _disp_myself
(0082) disp_myself(112,4,124);
04B9 E78C LDI R24,0x7C
04BA 8388 STD Y+0,R24
04BB E024 LDI R18,4
04BC E700 LDI R16,0x70
04BD 940E06BC CALL _disp_myself
(0083) disp_myself(112,5,124);
04BF E78C LDI R24,0x7C
04C0 8388 STD Y+0,R24
04C1 E025 LDI R18,5
04C2 E700 LDI R16,0x70
04C3 940E06BC CALL _disp_myself
(0084) disp_myself(112,6,124);
04C5 E78C LDI R24,0x7C
04C6 8388 STD Y+0,R24
04C7 E026 LDI R18,6
04C8 E700 LDI R16,0x70
04C9 940E06BC CALL _disp_myself
(0085) disp_myself(112,7,124);
04CB E78C LDI R24,0x7C
04CC 8388 STD Y+0,R24
04CD E027 LDI R18,7
04CE E700 LDI R16,0x70
04CF 940E06BC CALL _disp_myself
(0086) disp_myself(120,0,124);
04D1 E78C LDI R24,0x7C
04D2 8388 STD Y+0,R24
04D3 2722 CLR R18
04D4 E708 LDI R16,0x78
04D5 940E06BC CALL _disp_myself
(0087) disp_myself(120,1,124);
04D7 E78C LDI R24,0x7C
04D8 8388 STD Y+0,R24
04D9 E021 LDI R18,1
04DA E708 LDI R16,0x78
04DB 940E06BC CALL _disp_myself
(0088) disp_myself(120,2,124);
04DD E78C LDI R24,0x7C
04DE 8388 STD Y+0,R24
04DF E022 LDI R18,2
04E0 E708 LDI R16,0x78
04E1 940E06BC CALL _disp_myself
(0089) disp_myself(120,3,124);
04E3 E78C LDI R24,0x7C
04E4 8388 STD Y+0,R24
04E5 E023 LDI R18,3
04E6 E708 LDI R16,0x78
04E7 940E06BC CALL _disp_myself
(0090) disp_myself(120,4,124);
04E9 E78C LDI R24,0x7C
04EA 8388 STD Y+0,R24
04EB E024 LDI R18,4
04EC E708 LDI R16,0x78
04ED 940E06BC CALL _disp_myself
(0091) disp_myself(120,5,124);
04EF E78C LDI R24,0x7C
04F0 8388 STD Y+0,R24
04F1 E025 LDI R18,5
04F2 E708 LDI R16,0x78
04F3 940E06BC CALL _disp_myself
(0092) disp_myself(120,6,124);
04F5 E78C LDI R24,0x7C
04F6 8388 STD Y+0,R24
04F7 E026 LDI R18,6
04F8 E708 LDI R16,0x78
04F9 940E06BC CALL _disp_myself
(0093) disp_myself(120,7,124);
04FB E78C LDI R24,0x7C
04FC 8388 STD Y+0,R24
04FD E027 LDI R18,7
04FE E708 LDI R16,0x78
04FF 940E06BC CALL _disp_myself
(0094) disp_myself(0,5,123);
0501 E78B LDI R24,0x7B
0502 8388 STD Y+0,R24
0503 E025 LDI R18,5
0504 2700 CLR R16
0505 940E06BC CALL _disp_myself
(0095)
(0096) t=get_ad();
0507 DF12 RCALL _get_ad
0508 01A8 MOVW R20,R16
(0097) disp_to_bcd(t);
0509 940E06F8 CALL _disp_to_bcd
(0098)
(0099)
(0100)
(0101) disp_char_str(58, 0, "m"); /*显示网址信息*/
050B E080 LDI R24,0
050C E091 LDI R25,1
050D 8399 STD Y+1,R25
050E 8388 STD Y+0,R24
050F 2722 CLR R18
0510 E30A LDI R16,0x3A
0511 940E0691 CALL _disp_char_str
(0102) while (1);
0513 CFFF RJMP 0x0513
0514 9622 ADIW R28,2
0515 9508 RET
FILE: C:\DOCUME~1\yue01\桌面\LCD12864显示模块\LCD12864显示模块\lcd12864.c
(0001) /*
(0002) LCD12864液晶屏驱动模块
(0003) 1、可直接嵌入到项目中使用
(0004) 2、晶振频率:1M
(0005) 3、如晶振提高低层驱动延时要作相应修改
(0006)
(0007) AVR_AFA
(0008) www.iccavr.com
(0009) */
(0010)
(0011) #include <iom128v.h>
(0012) #include "font.h"
(0013)
(0014) #define RS_CLR PORTC &= ~(1 << PC2) /*命令或数据选择*/
(0015) #define RS_SET PORTC |= (1 << PC2) /*RS = 1命令,RS = 0数据*/
(0016)
(0017) #define RW_CLR PORTC &= ~(1 << PC3) /*读取或写入选择*/
(0018) #define RW_SET PORTC |= (1 << PC3) /*RW = 1读,RW = 0写*/
(0019)
(0020) #define EN_CLR PORTC &= ~(1 << PC4) /*读写使能信号*/
(0021) #define EN_SET PORTC |= (1 << PC4) /*下降沿有效*/
(0022)
(0023) #define RST_CLR PORTC &= ~(1 << PC5) /*芯片复位脚*/
(0024) #define RST_SET PORTC |= (1 << PC5) /*高电平复位*/
(0025)
(0026) #define CSA_CLR PORTC &= ~(1 << PC7) /*左半屏片选*/
(0027) #define CSA_SET PORTC |= (1 << PC7) /*高电平选中*/
(0028)
(0029) #define CSB_CLR PORTC &= ~(1 << PC6) /*右半屏片选*/
(0030) #define CSB_SET PORTC |= (1 << PC6) /*高电平选中*/
(0031)
(0032) /*延时函数*/
(0033) void delay_us(unsigned int n) {
(0034)
(0035) if (n == 0) {
_delay_us:
n --> R16
0516 3000 CPI R16,0
0517 0701 CPC R16,R17
0518 F409 BNE 0x051A
(0036) return ;
0519 C006 RJMP 0x0520
(0037) }
(0038) while (--n);
051A 01C8 MOVW R24,R16
051B 9701 SBIW R24,1
051C 018C MOVW R16,R24
051D 3000 CPI R16,0
051E 0701 CPC R16,R17
051F F7D1 BNE 0x051A
0520 9508 RET
_delay_ms:
a --> R20
b --> R22
i --> R16
0521 940E07CE CALL push_gset2
(0039) }
(0040)
(0041) /*延时函数*/
(0042) void delay_ms(unsigned char i) {
(0043)
(0044) unsigned char a, b;
(0045) for (a = 1; a < i; a++) {
0523 E041 LDI R20,1
0524 C006 RJMP 0x052B
(0046) for (b = 1; b; b++) {
0525 E061 LDI R22,1
0526 C001 RJMP 0x0528
0527 9563 INC R22
0528 2366 TST R22
0529 F7E9 BNE 0x0527
052A 9543 INC R20
052B 1740 CP R20,R16
052C F3C0 BCS 0x0525
052D 940E07BC CALL pop_gset2
052F 9508 RET
_LCD0_write_com:
com --> R20
0530 940E07D0 CALL push_gset1
0532 2F40 MOV R20,R16
(0047) ;
(0048) }
(0049) }
(0050) }
(0051)
(0052) /*显示屏命令写入函数前半屏*/
(0053) void LCD0_write_com(unsigned char com) {
(0054)
(0055) RS_CLR;
0533 98AA CBI 0x15,2
(0056) RW_CLR;
0534 98AB CBI 0x15,3
(0057) CSA_SET;
0535 9AAF SBI 0x15,7
(0058) CSB_CLR;
0536 98AE CBI 0x15,6
(0059) EN_SET;
0537 9AAC SBI 0x15,4
(0060) PORTA = com;
0538 BB4B OUT 0x1B,R20
(0061) delay_us(1);
0539 E001 LDI R16,1
053A E010 LDI R17,0
053B DFDA RCALL _delay_us
(0062) EN_CLR;
053C 98AC CBI 0x15,4
053D 940E07D3 CALL pop_gset1
053F 9508 RET
_LCD1_write_com:
com --> R20
0540 940E07D0 CALL push_gset1
0542 2F40 MOV R20,R16
(0063) }
(0064)
(0065) /*显示屏命令写入函数后半屏*/
(0066) void LCD1_write_com(unsigned char com) {
(0067)
(0068) RS_CLR;
0543 98AA CBI 0x15,2
(0069) RW_CLR;
0544 98AB CBI 0x15,3
(0070) CSA_CLR;
0545 98AF CBI 0x15,7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -