📄 1602六线接法练习.lst
字号:
00F1 BB8B OUT 0x1B,R24
(0108) LCD_DATA_PORT|=command_temp&0xf0; //写高四位
00F2 01CA MOVW R24,R20
00F3 7F80 ANDI R24,0xF0
00F4 7090 ANDI R25,0
00F5 B22B IN R2,0x1B
00F6 2433 CLR R3
00F7 2A28 OR R2,R24
00F8 2A39 OR R3,R25
00F9 BA2B OUT 0x1B,R2
(0109) LCD_en_write();
00FA DFBD RCALL _LCD_en_write
(0110) command_temp=command_temp<<4;
00FB 0F44 LSL R20
00FC 1F55 ROL R21
00FD 0F44 LSL R20
00FE 1F55 ROL R21
00FF 0F44 LSL R20
0100 1F55 ROL R21
0101 0F44 LSL R20
0102 1F55 ROL R21
(0111) LCD_DATA_PORT&=0x0f;
0103 B38B IN R24,0x1B
0104 708F ANDI R24,0xF
0105 BB8B OUT 0x1B,R24
(0112) LCD_DATA_PORT|=command_temp&0xf0; //写低四位
0106 01CA MOVW R24,R20
0107 7F80 ANDI R24,0xF0
0108 7090 ANDI R25,0
0109 B22B IN R2,0x1B
010A 2433 CLR R3
010B 2A28 OR R2,R24
010C 2A39 OR R3,R25
010D BA2B OUT 0x1B,R2
(0113) LCD_en_write();
010E DFA9 RCALL _LCD_en_write
(0114) }
010F 940E0195 CALL pop_gset4
0111 9508 RET
_clear:
i --> R20
0112 940E01A0 CALL push_gset1
(0115) }
(0116) /*-------------------------------------------------------------
(0117) function: clear the lcd1602
(0118) ---------------------------------------------------------------*/
(0119) void clear(void)
(0120) {
(0121) unsigned char i;
(0122) LCD_set_xy(0,0);
0114 2722 CLR R18
0115 2700 CLR R16
0116 DF8E RCALL _LCD_set_xy
(0123) for(i=0;i<16;i++)
0117 2744 CLR R20
0118 C006 RJMP 0x011F
(0124) LCD_write_char(0,' ');
0119 E220 LDI R18,0x20
011A E030 LDI R19,0
011B 2700 CLR R16
011C 2711 CLR R17
011D DFA1 RCALL _LCD_write_char
011E 9543 INC R20
011F 3140 CPI R20,0x10
0120 F3C0 BCS 0x0119
(0125) LCD_set_xy(0,1);
0121 E021 LDI R18,1
0122 2700 CLR R16
0123 DF81 RCALL _LCD_set_xy
(0126) for(i=0;i<16;i++)
0124 2744 CLR R20
0125 C006 RJMP 0x012C
(0127) LCD_write_char(0,' ');
0126 E220 LDI R18,0x20
0127 E030 LDI R19,0
0128 2700 CLR R16
0129 2711 CLR R17
012A DF94 RCALL _LCD_write_char
012B 9543 INC R20
012C 3140 CPI R20,0x10
012D F3C0 BCS 0x0126
012E 940E01A3 CALL pop_gset1
0130 9508 RET
_main:
0131 9722 SBIW R28,2
FILE: D:\M16开发板实验教程\icc-avr\lcd1602test\1602六线接法练习.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "1602.h"
(0004)
(0005)
(0006) void main(void)
(0007) {
(0008) LCD_init(); //initialize lcd1602
0132 DF38 RCALL _LCD_init
0133 C02E RJMP 0x0162
(0009) while(1)
(0010) {
(0011) clear(); //clear lcd1602
0134 DFDD RCALL _clear
(0012) delay_nms(10);
0135 E00A LDI R16,0xA
0136 E010 LDI R17,0
0137 940E0180 CALL _delay_nms
(0013) LCD_write_string(0,0," ATmega 16 BOARD"); //write the string on the first
0139 E88E LDI R24,0x8E
013A E090 LDI R25,0
013B 8399 STD Y+1,R25
013C 8388 STD Y+0,R24
013D 2722 CLR R18
013E 2700 CLR R16
013F DF4C RCALL _LCD_write_string
(0014) //line at the first address
(0015) LCD_write_string(1,1," dushibiao ");
0140 E881 LDI R24,0x81
0141 E090 LDI R25,0
0142 8399 STD Y+1,R25
0143 8388 STD Y+0,R24
0144 E021 LDI R18,1
0145 E001 LDI R16,1
0146 DF45 RCALL _LCD_write_string
(0016) delay_nms(5000);
0147 E808 LDI R16,0x88
0148 E113 LDI R17,0x13
0149 940E0180 CALL _delay_nms
(0017) clear();
014B DFC6 RCALL _clear
(0018) delay_nms(10);
014C E00A LDI R16,0xA
014D E010 LDI R17,0
014E 940E0180 CALL _delay_nms
(0019) LCD_write_string(0,0,"Stduy follow me");
0150 E781 LDI R24,0x71
0151 E090 LDI R25,0
0152 8399 STD Y+1,R25
0153 8388 STD Y+0,R24
0154 2722 CLR R18
0155 2700 CLR R16
0156 DF35 RCALL _LCD_write_string
(0020) LCD_write_string(0,1,"You will secceed");
0157 E680 LDI R24,0x60
0158 E090 LDI R25,0
0159 8399 STD Y+1,R25
015A 8388 STD Y+0,R24
015B E021 LDI R18,1
015C 2700 CLR R16
015D DF2E RCALL _LCD_write_string
(0021) delay_nms(5000);
015E E808 LDI R16,0x88
015F E113 LDI R17,0x13
0160 940E0180 CALL _delay_nms
0162 CFD1 RJMP 0x0134
0163 9622 ADIW R28,2
0164 9508 RET
FILE: D:\M16开发板实验教程\icc-avr\lcd1602test\delay.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003)
(0004) /*-----------------------------------------------------------------------
(0005) 延时函数
(0006) 系统时钟:8M
(0007) -----------------------------------------------------------------------*/
(0008) void delay_1us(void) //1us延时函数
(0009) {
(0010) asm("nop");
_delay_1us:
0165 0000 NOP
0166 9508 RET
_delay_nus:
i --> R20
n --> R22
0167 940E019E CALL push_gset2
0169 01B8 MOVW R22,R16
(0011) }
(0012)
(0013) void delay_nus(unsigned int n) //N us延时函数
(0014) {
(0015) unsigned int i=0;
016A 2744 CLR R20
016B 2755 CLR R21
(0016) for (i=0;i<n;i++)
016C C003 RJMP 0x0170
(0017) delay_1us();
016D DFF7 RCALL _delay_1us
016E 5F4F SUBI R20,0xFF
016F 4F5F SBCI R21,0xFF
0170 1746 CP R20,R22
0171 0757 CPC R21,R23
0172 F3D0 BCS 0x016D
0173 940E018F CALL pop_gset2
0175 9508 RET
(0018) }
(0019)
(0020) void delay_1ms(void) //1ms延时函数
(0021) {
(0022) unsigned int i;
(0023) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0176 2700 CLR R16
0177 2711 CLR R17
0178 C002 RJMP 0x017B
0179 5F0F SUBI R16,0xFF
017A 4F1F SBCI R17,0xFF
017B 3704 CPI R16,0x74
017C E0E4 LDI R30,4
017D 071E CPC R17,R30
017E F3D0 BCS 0x0179
017F 9508 RET
_delay_nms:
i --> R20
n --> R22
0180 940E019E CALL push_gset2
0182 01B8 MOVW R22,R16
(0024) }
(0025)
(0026) void delay_nms(unsigned int n) //N ms延时函数
(0027) {
(0028) unsigned int i=0;
0183 2744 CLR R20
0184 2755 CLR R21
(0029) for (i=0;i<n;i++)
0185 C003 RJMP 0x0189
(0030) delay_1ms();
FILE: <library>
0186 DFEF RCALL _delay_1ms
0187 5F4F SUBI R20,0xFF
0188 4F5F SBCI R21,0xFF
0189 1746 CP R20,R22
018A 0757 CPC R21,R23
018B F3D0 BCS 0x0186
018C 940E018F CALL pop_gset2
018E 9508 RET
pop_gset2:
018F E0E2 LDI R30,2
0190 940C01A4 JMP pop
pop_gset3:
0192 E0E4 LDI R30,4
0193 940C01A4 JMP pop
pop_gset4:
0195 E0E8 LDI R30,0x8
0196 940C01A4 JMP pop
push_gset5:
0198 92FA ST R15,-Y
0199 92EA ST R14,-Y
push_gset4:
019A 92DA ST R13,-Y
019B 92CA ST R12,-Y
push_gset3:
019C 92BA ST R11,-Y
019D 92AA ST R10,-Y
push_gset2:
019E 937A ST R23,-Y
019F 936A ST R22,-Y
push_gset1:
01A0 935A ST R21,-Y
01A1 934A ST R20,-Y
01A2 9508 RET
pop_gset1:
01A3 E0E1 LDI R30,1
pop:
01A4 9149 LD R20,Y+
01A5 9159 LD R21,Y+
01A6 FDE0 SBRC R30,0
01A7 9508 RET
01A8 9169 LD R22,Y+
01A9 9179 LD R23,Y+
01AA FDE1 SBRC R30,1
01AB 9508 RET
01AC 90A9 LD R10,Y+
01AD 90B9 LD R11,Y+
01AE FDE2 SBRC R30,2
01AF 9508 RET
01B0 90C9 LD R12,Y+
01B1 90D9 LD R13,Y+
01B2 FDE3 SBRC R30,3
01B3 9508 RET
01B4 90E9 LD R14,Y+
01B5 90F9 LD R15,Y+
01B6 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -