📄 12864.lst
字号:
__start:
__text_start:
0059 E5CF LDI R28,0x5F
005A E0D4 LDI R29,4
005B BFCD OUT 0x3D,R28
005C BFDE OUT 0x3E,R29
005D 51C0 SUBI R28,0x10
005E 40D0 SBCI R29,0
005F EA0A LDI R16,0xAA
0060 8308 STD Y+0,R16
0061 2400 CLR R0
0062 EBED LDI R30,0xBD
0063 E0F0 LDI R31,0
0064 E010 LDI R17,0
0065 3CED CPI R30,0xCD
0066 07F1 CPC R31,R17
0067 F011 BEQ 0x006A
0068 9201 ST R0,Z+
0069 CFFB RJMP 0x0065
006A 8300 STD Z+0,R16
006B E5E4 LDI R30,0x54
006C E0F0 LDI R31,0
006D E6A0 LDI R26,0x60
006E E0B0 LDI R27,0
006F E010 LDI R17,0
0070 3BE1 CPI R30,0xB1
0071 07F1 CPC R31,R17
0072 F021 BEQ 0x0077
0073 95C8 LPM
0074 9631 ADIW R30,1
0075 920D ST R0,X+
0076 CFF9 RJMP 0x0070
0077 940E007A CALL _main
_exit:
0079 CFFF RJMP _exit
_main:
007A 9722 SBIW R28,2
FILE: D:\M16开发板实验教程\icc-avr\12864\12864_LCD_TEST.c
(0001) #include "iom16v.h"
(0002) #include "macros.h"
(0003) #include "12864.h"
(0004)
(0005) // 配置熔丝参数 @8MHz
(0006)
(0007) extern void delay_nus(unsigned int n);
(0008) extern void delay_nms(unsigned int n);
(0009)
(0010) char *str1,*str2,*str3,*str4,*str5,*str6,*str7,*str8;
(0011)
(0012) void portinitial(void);
(0013) void main(void)
(0014) {
(0015)
(0016) str1="AVR Mega16 BOARD";
007B EA8C LDI R24,0xAC
007C E090 LDI R25,0
007D 939000CC STS str1+1,R25
007F 938000CB STS str1,R24
(0017) str2=" 学习开发板 ";
0081 E98E LDI R24,0x9E
0082 E090 LDI R25,0
0083 939000CA STS str2+1,R25
0085 938000C9 STS str2,R24
(0018) str3=" dushibiao ";
0087 E88F LDI R24,0x8F
0088 E090 LDI R25,0
0089 939000C8 STS str3+1,R25
008B 938000C7 STS str3,R24
(0019) str4="2007年11月制作";
008D E880 LDI R24,0x80
008E E090 LDI R25,0
008F 939000C6 STS str4+1,R25
0091 938000C5 STS str4,R24
(0020) str6="12864 液晶试验";
0093 E781 LDI R24,0x71
0094 E090 LDI R25,0
0095 939000C2 STS str6+1,R25
0097 938000C1 STS str6,R24
(0021) str7="并行总线接法练习";
0099 E680 LDI R24,0x60
009A E090 LDI R25,0
009B 939000C0 STS str7+1,R25
009D 938000BF STS str7,R24
(0022) portinitial();
009F D06E RCALL _portinitial
(0023) delay_nms(10);
00A0 E00A LDI R16,0xA
00A1 E010 LDI R17,0
00A2 940E01C1 CALL _delay_nms
(0024) LCD_init();
00A4 940E0117 CALL _LCD_init
00A6 C064 RJMP 0x010B
(0025) while(1){
(0026) LCD_write_char( 0x01, 0 ); //清屏
00A7 2722 CLR R18
00A8 2733 CLR R19
00A9 E001 LDI R16,1
00AA E010 LDI R17,0
00AB 940E013C CALL _LCD_write_char
(0027) LCD_write_string(2,0,str1);
00AD 902000CB LDS R2,str1
00AF 903000CC LDS R3,str1+1
00B1 8239 STD Y+1,R3
00B2 8228 STD Y+0,R2
00B3 2722 CLR R18
00B4 E002 LDI R16,2
00B5 940E018A CALL _LCD_write_string
(0028) LCD_write_string(0,1,str2);
00B7 902000C9 LDS R2,str2
00B9 903000CA LDS R3,str2+1
00BB 8239 STD Y+1,R3
00BC 8228 STD Y+0,R2
00BD E021 LDI R18,1
00BE 2700 CLR R16
00BF 940E018A CALL _LCD_write_string
(0029) LCD_write_string(0,2,str3);
00C1 902000C7 LDS R2,str3
00C3 903000C8 LDS R3,str3+1
00C5 8239 STD Y+1,R3
00C6 8228 STD Y+0,R2
00C7 E022 LDI R18,2
00C8 2700 CLR R16
00C9 940E018A CALL _LCD_write_string
(0030) LCD_write_string(0,3,str4);
00CB 902000C5 LDS R2,str4
00CD 903000C6 LDS R3,str4+1
00CF 8239 STD Y+1,R3
00D0 8228 STD Y+0,R2
00D1 E023 LDI R18,3
00D2 2700 CLR R16
00D3 940E018A CALL _LCD_write_string
(0031) delay_nms(4000);
00D5 EA00 LDI R16,0xA0
00D6 E01F LDI R17,0xF
00D7 940E01C1 CALL _delay_nms
(0032) LCD_write_char( 0x01, 0 ); //清屏
00D9 2722 CLR R18
00DA 2733 CLR R19
00DB E001 LDI R16,1
00DC E010 LDI R17,0
00DD 940E013C CALL _LCD_write_char
(0033) LCD_write_string(2,0,str5);
00DF 902000C3 LDS R2,str5
00E1 903000C4 LDS R3,str5+1
00E3 8239 STD Y+1,R3
00E4 8228 STD Y+0,R2
00E5 2722 CLR R18
00E6 E002 LDI R16,2
00E7 940E018A CALL _LCD_write_string
(0034) LCD_write_string(0,1,str6);
00E9 902000C1 LDS R2,str6
00EB 903000C2 LDS R3,str6+1
00ED 8239 STD Y+1,R3
00EE 8228 STD Y+0,R2
00EF E021 LDI R18,1
00F0 2700 CLR R16
00F1 940E018A CALL _LCD_write_string
(0035) LCD_write_string(0,2,str7);
00F3 902000BF LDS R2,str7
00F5 903000C0 LDS R3,str7+1
00F7 8239 STD Y+1,R3
00F8 8228 STD Y+0,R2
00F9 E022 LDI R18,2
00FA 2700 CLR R16
00FB 940E018A CALL _LCD_write_string
(0036) LCD_write_string(0,3,str8);
00FD 902000BD LDS R2,str8
00FF 903000BE LDS R3,str8+1
0101 8239 STD Y+1,R3
0102 8228 STD Y+0,R2
0103 E023 LDI R18,3
0104 2700 CLR R16
0105 940E018A CALL _LCD_write_string
(0037) delay_nms(4000);
0107 EA00 LDI R16,0xA0
0108 E01F LDI R17,0xF
0109 940E01C1 CALL _delay_nms
010B CF9B RJMP 0x00A7
010C 9622 ADIW R28,2
010D 9508 RET
(0038) }
(0039) }
(0040)
(0041) void portinitial(void)
(0042) {
(0043) DDRA=0XFF;
_portinitial:
010E EF8F LDI R24,0xFF
010F BB8A OUT 0x1A,R24
(0044) PORTA=0X00;
0110 2422 CLR R2
0111 BA2B OUT 0x1B,R2
(0045) DDRB=0XFF;
0112 BB87 OUT 0x17,R24
(0046) PORTB=0XFF;
0113 BB88 OUT 0x18,R24
(0047) LCD_RST_PORT |= LCD_RST;
0114 9AC3 SBI 0x18,3
(0048) LCD_PSB_PORT |= LCD_PSB;
0115 9AC2 SBI 0x18,2
0116 9508 RET
FILE: D:\M16开发板实验教程\icc-avr\12864\12864.c
(0001) #include "iom16v.h"
(0002) #include "macros.h"
(0003) #include "12864.h"
(0004)
(0005)
(0006)
(0007)
(0008) /**********************************************************
(0009) RT12864M LCD DISPLAY
(0010) 建立时间:2005年2月1号
(0011) 修改日期:2005年2月1号
(0012)
(0013) **********************************************************/
(0014) extern void delay_nus(unsigned int n);
(0015) extern void delay_nms(unsigned int n);
(0016)
(0017)
(0018) void LCD_init(void)
(0019) {
(0020) LCD_EN_PORT &= ~LCD_EN; //EN=0
_LCD_init:
0117 98C1 CBI 0x18,1
(0021) delay_nms(1);
0118 E001 LDI R16,1
0119 E010 LDI R17,0
011A D0A6 RCALL _delay_nms
(0022) LCD_write_char(0x34,0);
011B 2722 CLR R18
011C 2733 CLR R19
011D E304 LDI R16,0x34
011E E010 LDI R17,0
011F D01C RCALL _LCD_write_char
(0023) delay_nms(8);
0120 E008 LDI R16,0x8
0121 E010 LDI R17,0
0122 D09E RCALL _delay_nms
(0024) LCD_write_char(0x30,0);
0123 2722 CLR R18
0124 2733 CLR R19
0125 E300 LDI R16,0x30
0126 E010 LDI R17,0
0127 D014 RCALL _LCD_write_char
(0025) delay_nms(8);
0128 E008 LDI R16,0x8
0129 E010 LDI R17,0
012A D096 RCALL _delay_nms
(0026) LCD_write_char(0x0C,0); //显示清屏
012B 2722 CLR R18
012C 2733 CLR R19
012D E00C LDI R16,0xC
012E E010 LDI R17,0
012F D00C RCALL _LCD_write_char
(0027) delay_nms(8);
0130 E008 LDI R16,0x8
0131 E010 LDI R17,0
0132 D08E RCALL _delay_nms
(0028) LCD_write_char(0x01,0); //显示开
0133 2722 CLR R18
0134 2733 CLR R19
0135 E001 LDI R16,1
0136 E010 LDI R17,0
0137 D004 RCALL _LCD_write_char
(0029) delay_nms(8);
0138 E008 LDI R16,0x8
0139 E010 LDI R17,0
013A D086 RCALL _delay_nms
013B 9508 RET
_LCD_write_char:
data_temp --> R22
command_temp --> R20
data --> R12
command --> R10
013C 940E01DB CALL push_gset4
013E 0169 MOVW R12,R18
013F 0158 MOVW R10,R16
(0030)
(0031) }
(0032)
(0033)
(0034)
(0035) /*-----------------------------------------------------------------------
(0036) LCD_write_char : 中英文字符串显示函数
(0037) LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
(0038) 入命令
(0039) 输入参数:*s :中英文字符串指针;
(0040) X、Y : 显示字符串的位置,X:0-15,Y:0-1
(0041) LCD第一行显示寄存器地址:0X80-0X87
(0042) LCD第二行显示寄存器地址:0X90-0X9F
(0043) LCD第三行显示寄存器地址:0X88-0X8F
(0044) LCD第四行显示寄存器地址:0X98-0X9F
(0045) -----------------------------------------------------------------------*/
(0046) void LCD_write_char(unsigned command,unsigned data)
(0047) {
(0048) unsigned command_temp;
(0049) unsigned data_temp;
(0050) command_temp = command;
0140 01A5 MOVW R20,R10
(0051) data_temp = data;
0141 01B6 MOVW R22,R12
(0052) if (command == 0)
0142 3040 CPI R20,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -