📄 lcd1602.lst
字号:
011C 2433 CLR R3
011D 0195 MOVW R18,R10
011E 0D22 ADD R18,R2
011F 1D33 ADC R19,R3
0120 5120 SUBI R18,0x10
0121 4030 SBCI R19,0
0122 E081 LDI R24,1
0123 E090 LDI R25,0
0124 0186 MOVW R16,R12
0125 2708 EOR R16,R24
0126 2719 EOR R17,R25
0127 DFC1 RCALL _lcd_disp_char
(0142) s++;
0128 5F6F SUBI R22,0xFF
0129 4F7F SBCI R23,0xFF
(0143) i++;
012A 9543 INC R20
012B 01FB MOVW R30,R22
012C 8020 LDD R2,Z+0
012D 2022 TST R2
012E F009 BEQ 0x0130
012F CFCE RJMP 0x00FE
0130 9621 ADIW R28,1
0131 940E01F7 CALL pop_gset4
0133 9508 RET
(0144) }
(0145) }
(0146) }
(0147)
(0148) void lcd_init(void) //初始化液晶
(0149) {
(0150) Open_Ctrl();
_lcd_init:
0134 EB88 LDI R24,0xB8
0135 BB84 OUT 0x14,R24
(0151) Data_out();
0136 EF8F LDI R24,0xFF
0137 BB8A OUT 0x1A,R24
(0152) lcd_write_cmd(0x38,0); //显示模式设置(不测试忙信号)共三次
0138 2722 CLR R18
0139 E308 LDI R16,0x38
013A DF71 RCALL _lcd_write_cmd
(0153) delay_nms(5);
013B E005 LDI R16,5
013C E010 LDI R17,0
013D DF44 RCALL _delay_nms
(0154) lcd_write_cmd(0x38,0);
013E 2722 CLR R18
013F E308 LDI R16,0x38
0140 DF6B RCALL _lcd_write_cmd
(0155) delay_nms(5);
0141 E005 LDI R16,5
0142 E010 LDI R17,0
0143 DF3E RCALL _delay_nms
(0156) lcd_write_cmd(0x38,0);
0144 2722 CLR R18
0145 E308 LDI R16,0x38
0146 DF65 RCALL _lcd_write_cmd
(0157) delay_nms(5);
0147 E005 LDI R16,5
0148 E010 LDI R17,0
0149 DF38 RCALL _delay_nms
(0158)
(0159) lcd_write_cmd(0x38,1); //8位数据口,2行显示,5*7点阵
014A E021 LDI R18,1
014B E308 LDI R16,0x38
014C DF5F RCALL _lcd_write_cmd
(0160) lcd_write_cmd(0x08,1); //显示关
014D E021 LDI R18,1
014E E008 LDI R16,0x8
014F DF5C RCALL _lcd_write_cmd
(0161) lcd_write_cmd(0x01,1); //清屏
0150 E021 LDI R18,1
0151 E001 LDI R16,1
0152 DF59 RCALL _lcd_write_cmd
(0162) lcd_write_cmd(0x06,1); //数据读,写后AC自增1,画面不动
0153 E021 LDI R18,1
0154 E006 LDI R16,6
0155 DF56 RCALL _lcd_write_cmd
(0163) lcd_write_cmd(0x0C,1); //显示开
0156 E021 LDI R18,1
0157 E00C LDI R16,0xC
0158 DF53 RCALL _lcd_write_cmd
0159 9508 RET
_main:
i --> R20
test --> Y+60
ver --> Y+48
str1 --> Y+32
str --> Y+19
clr --> Y+2
015A 97EF SBIW R28,0x3F
015B 972E SBIW R28,0xE
FILE: E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD1602\main.c
(0001) /****************************************Copyright (c)**************************************************
(0002) ** ADEmbed Development Co.,LTD.
(0003) ** http://www.adembed.com
(0004) **--------------File Info-------------------------------------------------------------------------------
(0005) ** File name: mian.c
(0006) ** Last modified Date: 2008-10-13
(0007) ** Last Version: 1.0
(0008) ** Descriptions: lcd1602 test.
(0009) **
(0010) **------------------------------------------------------------------------------------------------------
(0011) ** Created by: zhoufeng
(0012) ** Created date: 2008-10-13
(0013) ** Version: 1.0
(0014) ** Descriptions:
(0015) **
(0016) **------------------------------------------------------------------------------------------------------
(0017) ** Modified by: junbolu
(0018) ** Modified date: 2008-12-13
(0019) ** Version:
(0020) ** Descriptions:
(0021) **
(0022) **------------------------------------------------------------------------------------------------------
(0023) **ICC-AVR application builder : 2008-12-13
(0024) **Target : M16
(0025) **Crystal: 7.3728Mhz
(0026) **
(0027) **
(0028) **描述:这是一个Lcd1602的测试程序。LCD1602型号为JHD162A 使用8位并口数据传输.
(0029) **
(0030) **
(0031) **涉及知识点:
(0032) **
(0033) **
(0034) **
(0035) *******************************************************************************************************/
(0036) #include <iom16v.h>
(0037) #include <macros.h>
(0038) #include"lcd1602.h"
(0039) #include<ctype.h>
(0040)
(0041) void main(void)
(0042) {
(0043) char str[]=" Welcome ";
015C E584 LDI R24,0x54
015D E090 LDI R25,0
015E 01FE MOVW R30,R28
015F 9673 ADIW R30,0x13
0160 E00D LDI R16,0xD
0161 E010 LDI R17,0
0162 93FA ST R31,-Y
0163 93EA ST R30,-Y
0164 939A ST R25,-Y
0165 938A ST R24,-Y
0166 940E0219 CALL asgncblk
(0044) char clr[]=" ";
0168 E681 LDI R24,0x61
0169 E090 LDI R25,0
016A 01FE MOVW R30,R28
016B 9632 ADIW R30,2
016C E101 LDI R16,0x11
016D E010 LDI R17,0
016E 93FA ST R31,-Y
016F 93EA ST R30,-Y
0170 939A ST R25,-Y
0171 938A ST R24,-Y
0172 940E0219 CALL asgncblk
(0045) char str1[]="www.adembed.com";
0174 E782 LDI R24,0x72
0175 E090 LDI R25,0
0176 01FE MOVW R30,R28
0177 96B0 ADIW R30,0x20
0178 E100 LDI R16,0x10
0179 E010 LDI R17,0
017A 93FA ST R31,-Y
017B 93EA ST R30,-Y
017C 939A ST R25,-Y
017D 938A ST R24,-Y
017E 940E0219 CALL asgncblk
(0046) char ver[]= "EasyAVR AV3";
0180 E882 LDI R24,0x82
0181 E090 LDI R25,0
0182 01FE MOVW R30,R28
0183 96F0 ADIW R30,0x30
0184 E00C LDI R16,0xC
0185 E010 LDI R17,0
0186 93FA ST R31,-Y
0187 93EA ST R30,-Y
0188 939A ST R25,-Y
0189 938A ST R24,-Y
018A 940E0219 CALL asgncblk
(0047) char test[]="1602LCD DEMO PRO";
018C E88E LDI R24,0x8E
018D E090 LDI R25,0
018E 01FE MOVW R30,R28
018F 96FC ADIW R30,0x3C
0190 E101 LDI R16,0x11
0191 E010 LDI R17,0
0192 93FA ST R31,-Y
0193 93EA ST R30,-Y
0194 939A ST R25,-Y
0195 938A ST R24,-Y
0196 940E0219 CALL asgncblk
(0048) unsigned int i=0;
0198 2744 CLR R20
0199 2755 CLR R21
(0049) lcd_init();
019A 940E0134 CALL _lcd_init
(0050) delay_nms(10);
019C E00A LDI R16,0xA
019D E010 LDI R17,0
019E 940E0082 CALL _delay_nms
(0051) lcd_disp_string(0,0,str);
01A0 01CE MOVW R24,R28
01A1 9643 ADIW R24,0x13
01A2 8399 STD Y+1,R25
01A3 8388 STD Y+0,R24
01A4 2722 CLR R18
01A5 2733 CLR R19
01A6 2700 CLR R16
01A7 2711 CLR R17
01A8 940E00F5 CALL _lcd_disp_string
(0052) delay_nms(10);//短延时是必要的
01AA E00A LDI R16,0xA
01AB E010 LDI R17,0
01AC 940E0082 CALL _delay_nms
(0053) lcd_disp_string(1,0,str1);
01AE 01CE MOVW R24,R28
01AF 9680 ADIW R24,0x20
01B0 8399 STD Y+1,R25
01B1 8388 STD Y+0,R24
01B2 2722 CLR R18
01B3 2733 CLR R19
01B4 E001 LDI R16,1
01B5 E010 LDI R17,0
01B6 940E00F5 CALL _lcd_disp_string
(0054) delay_nms(2000);
01B8 ED00 LDI R16,0xD0
01B9 E017 LDI R17,7
01BA 940E0082 CALL _delay_nms
(0055) lcd_disp_string(0,0,clr);
01BC 01CE MOVW R24,R28
01BD 9602 ADIW R24,2
01BE 8399 STD Y+1,R25
01BF 8388 STD Y+0,R24
01C0 2722 CLR R18
01C1 2733 CLR R19
01C2 2700 CLR R16
01C3 2711 CLR R17
01C4 940E00F5 CALL _lcd_disp_string
(0056) delay_nms(10);//短延时是必要的
01C6 E00A LDI R16,0xA
01C7 E010 LDI R17,0
01C8 940E0082 CALL _delay_nms
(0057) lcd_disp_string(0,0,ver);
01CA 01CE MOVW R24,R28
01CB 96C0 ADIW R24,0x30
01CC 8399 STD Y+1,R25
01CD 8388 STD Y+0,R24
01CE 2722 CLR R18
01CF 2733 CLR R19
01D0 2700 CLR R16
01D1 2711 CLR R17
01D2 940E00F5 CALL _lcd_disp_string
(0058) delay_nms(10);//短延时是必要的
01D4 E00A LDI R16,0xA
01D5 E010 LDI R17,0
01D6 940E0082 CALL _delay_nms
(0059) lcd_disp_string(1,0,clr);
01D8 01CE MOVW R24,R28
01D9 9602 ADIW R24,2
01DA 8399 STD Y+1,R25
01DB 8388 STD Y+0,R24
01DC 2722 CLR R18
01DD 2733 CLR R19
01DE E001 LDI R16,1
01DF E010 LDI R17,0
01E0 940E00F5 CALL _lcd_disp_string
(0060) delay_nms(10);//短延时是必要的
01E2 E00A LDI R16,0xA
01E3 E010 LDI R17,0
01E4 940E0082 CALL _delay_nms
(0061) lcd_disp_string(1,0,test);
01E6 01CE MOVW R24,R28
01E7 96CC ADIW R24,0x3C
01E8 8399 STD Y+1,R25
01E9 8388 STD Y+0,R24
01EA 2722 CLR R18
01EB 2733 CLR R19
01EC E001 LDI R16,1
01ED E010 LDI R17,0
01EE 940E00F5 CALL _lcd_disp_string
(0062) while(1)
FILE: <library>
01F0 CFFF RJMP 0x01F0
01F1 96EF ADIW R28,0x3F
01F2 962E ADIW R28,0xE
01F3 9508 RET
pop_gset2:
01F4 E0E2 LDI R30,2
01F5 940C0206 JMP pop
pop_gset4:
01F7 E0E8 LDI R30,0x8
01F8 940C0206 JMP pop
push_gset5:
01FA 92FA ST R15,-Y
01FB 92EA ST R14,-Y
push_gset4:
01FC 92DA ST R13,-Y
01FD 92CA ST R12,-Y
push_gset3:
01FE 92BA ST R11,-Y
01FF 92AA ST R10,-Y
push_gset2:
0200 937A ST R23,-Y
0201 936A ST R22,-Y
push_gset1:
0202 935A ST R21,-Y
0203 934A ST R20,-Y
0204 9508 RET
pop_gset1:
0205 E0E1 LDI R30,1
pop:
0206 9149 LD R20,Y+
0207 9159 LD R21,Y+
0208 FDE0 SBRC R30,0
0209 9508 RET
020A 9169 LD R22,Y+
020B 9179 LD R23,Y+
020C FDE1 SBRC R30,1
020D 9508 RET
020E 90A9 LD R10,Y+
020F 90B9 LD R11,Y+
0210 FDE2 SBRC R30,2
0211 9508 RET
0212 90C9 LD R12,Y+
0213 90D9 LD R13,Y+
0214 FDE3 SBRC R30,3
0215 9508 RET
0216 90E9 LD R14,Y+
0217 90F9 LD R15,Y+
0218 9508 RET
asgncblk:
0219 93AA ST R26,-Y
021A 93BA ST R27,-Y
021B 93EA ST R30,-Y
021C 93FA ST R31,-Y
021D 920A ST R0,-Y
021E 81AF LDD R26,Y+7
021F 85B8 LDD R27,Y+8
0220 81ED LDD R30,Y+5
0221 81FE LDD R31,Y+6
0222 3000 CPI R16,0
0223 0701 CPC R16,R17
0224 F031 BEQ 0x022B
0225 95C8 LPM
0226 920D ST R0,X+
0227 9631 ADIW R30,1
0228 5001 SUBI R16,1
0229 4010 SBCI R17,0
022A CFF7 RJMP 0x0222
022B 9009 LD R0,Y+
022C 91F9 LD R31,Y+
022D 91E9 LD R30,Y+
022E 91B9 LD R27,Y+
022F 91A9 LD R26,Y+
0230 9624 ADIW R28,4
0231 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -