📄 lcd20x4.lis
字号:
008C L15:
008C .dbline 91
008C L16:
008C .dbline 91
008C ; while(Lcd_Busy()); //判断lcd是否内部操作状态
008C D0DF xcall _Lcd_Busy
008E 0023 tst R16
0090 E9F7 brne L15
0092 .dbline 92
0092 ; E_L;RS_H;RW_L; //E=0(致能),RS=1(数据),RW=0(写)
0092 9798 cbi 0x12,7
0094 .dbline 92
0094 959A sbi 0x12,5
0096 .dbline 92
0096 9698 cbi 0x12,6
0098 .dbline 93
0098 ; delay_us(2); //液晶延时子程序
0098 02E0 ldi R16,2
009A 10E0 ldi R17,0
009C B1DF xcall _delay_us
009E .dbline 94
009E ; E_H;
009E 979A sbi 0x12,7
00A0 .dbline 95
00A0 ; PORTB = Data; //向lcd写入一个字符
00A0 48BB out 0x18,R20
00A2 .dbline 96
00A2 ; delay_us(2); //液晶延时子程序
00A2 02E0 ldi R16,2
00A4 10E0 ldi R17,0
00A6 ACDF xcall _delay_us
00A8 .dbline 97
00A8 ; E_L;
00A8 9798 cbi 0x12,7
00AA .dbline -2
00AA L14:
00AA 0E940000 xcall pop_gset1
00AE .dbline 0 ; func end
00AE 0895 ret
00B0 .dbsym r Data 20 c
00B0 .dbend
00B0 .dbfunc e Lcd_Init _Lcd_Init fV
.even
00B0 _Lcd_Init::
00B0 .dbline -1
00B0 .dbline 109
00B0 ; }
00B0 ;
00B0 ;
00B0 ; /*=======================================================
00B0 ; LCD第1行显示地址1~20(0x80~0x93)
00B0 ; LCD第2行显示地址1~20(0xc0~0xd3)
00B0 ; LCD第3行显示地址1~20(0x94~0xa7)
00B0 ; LCD第4行显示地址1~20(0xd4~0xe7)
00B0 ; =======================================================*/
00B0 ; //初始化LCD_8位接口,4行x20字符的工作方式
00B0 ; void Lcd_Init()
00B0 ; {
00B0 .dbline 110
00B0 ; DDRB = 0xff; //端口B设为输出方式
00B0 8FEF ldi R24,255
00B2 87BB out 0x17,R24
00B4 .dbline 111
00B4 ; DDRD = 0xff; //端口D设为输出方式
00B4 81BB out 0x11,R24
00B6 .dbline 112
00B6 ; Lcd_Command(0x38); //
00B6 08E3 ldi R16,56
00B8 D1DF xcall _Lcd_Command
00BA .dbline 113
00BA ; Lcd_Command(0x38); //
00BA 08E3 ldi R16,56
00BC CFDF xcall _Lcd_Command
00BE .dbline 114
00BE ; Lcd_Command(0x38); //
00BE 08E3 ldi R16,56
00C0 CDDF xcall _Lcd_Command
00C2 .dbline 115
00C2 ; Lcd_Command(0x38); //
00C2 08E3 ldi R16,56
00C4 CBDF xcall _Lcd_Command
00C6 .dbline 116
00C6 ; Lcd_Command(0x08); //令显示器off
00C6 08E0 ldi R16,8
00C8 C9DF xcall _Lcd_Command
00CA .dbline 117
00CA ; Lcd_Command(0x01); //清除显示器
00CA 01E0 ldi R16,1
00CC C7DF xcall _Lcd_Command
00CE .dbline 118
00CE ; Lcd_Command(0x06); //令LCD每接收到1Byte数据后,AC自动加1
00CE 06E0 ldi R16,6
00D0 C5DF xcall _Lcd_Command
00D2 .dbline 119
00D2 ; Lcd_Command(0x0C); //令光标,0x0c=不显示,0x0d=显示闪动.
00D2 0CE0 ldi R16,12
00D4 C3DF xcall _Lcd_Command
00D6 .dbline -2
00D6 L18:
00D6 .dbline 0 ; func end
00D6 0895 ret
00D8 .dbend
00D8 .dbfunc e asc_tran _asc_tran fV
00D8 ; asc -> R20,R21
.even
00D8 _asc_tran::
00D8 0E940000 xcall push_gset1
00DC A801 movw R20,R16
00DE .dbline -1
00DE .dbline 125
00DE ; }
00DE ;
00DE ; //=======================================================
00DE ; //写ASCII字符串程序
00DE ; void asc_tran(unsigned char *asc)
00DE ; {
00DE 05C0 xjmp L21
00E0 L20:
00E0 .dbline 127
00E0 .dbline 128
00E0 FA01 movw R30,R20
00E2 0081 ldd R16,z+0
00E4 D0DF xcall _Lcd_Write
00E6 .dbline 129
00E6 4F5F subi R20,255 ; offset = 1
00E8 5F4F sbci R21,255
00EA .dbline 130
00EA L21:
00EA .dbline 126
00EA ; while((*asc) != 0) //判断字是否结束
00EA FA01 movw R30,R20
00EC 2080 ldd R2,z+0
00EE 2220 tst R2
00F0 B9F7 brne L20
00F2 .dbline -2
00F2 L19:
00F2 0E940000 xcall pop_gset1
00F6 .dbline 0 ; func end
00F6 0895 ret
00F8 .dbsym r asc 20 pc
00F8 .dbend
00F8 .dbfunc e main _main fV
.even
00F8 _main::
00F8 .dbline -1
00F8 .dbline 136
00F8 ; {
00F8 ; Lcd_Write(*asc); //向lcd写入字符串
00F8 ; asc++; //移下一个字符
00F8 ; }
00F8 ; }
00F8 ;
00F8 ; //=======================================================
00F8 ; //测试主LCD主程序
00F8 ; void main()
00F8 ; {
00F8 .dbline 137
00F8 ; Lcd_Init(); //初始化LCD
00F8 DBDF xcall _Lcd_Init
00FA 1EC0 xjmp L25
00FC L24:
00FC .dbline 139
00FC .dbline 140
00FC 03E8 ldi R16,131
00FE AEDF xcall _Lcd_Command
0100 .dbline 141
0100 00E0 ldi R16,<L27
0102 10E0 ldi R17,>L27
0104 E9DF xcall _asc_tran
0106 .dbline 142
0106 07E9 ldi R16,151
0108 A9DF xcall _Lcd_Command
010A .dbline 143
010A 00E0 ldi R16,<L28
010C 10E0 ldi R17,>L28
010E E4DF xcall _asc_tran
0110 .dbline 144
0110 08EE ldi R16,1000
0112 13E0 ldi R17,3
0114 7DDF xcall _delay_ms
0116 .dbline 145
0116 01E0 ldi R16,1
0118 A1DF xcall _Lcd_Command
011A .dbline 147
011A 03E8 ldi R16,131
011C 9FDF xcall _Lcd_Command
011E .dbline 148
011E 00E0 ldi R16,<L29
0120 10E0 ldi R17,>L29
0122 DADF xcall _asc_tran
0124 .dbline 149
0124 04E9 ldi R16,148
0126 9ADF xcall _Lcd_Command
0128 .dbline 150
0128 00E0 ldi R16,<L30
012A 10E0 ldi R17,>L30
012C D5DF xcall _asc_tran
012E .dbline 151
012E 08EE ldi R16,1000
0130 13E0 ldi R17,3
0132 6EDF xcall _delay_ms
0134 .dbline 152
0134 01E0 ldi R16,1
0136 92DF xcall _Lcd_Command
0138 .dbline 153
0138 L25:
0138 .dbline 138
0138 E1CF xjmp L24
013A X1:
013A .dbline -2
013A L23:
013A .dbline 0 ; func end
013A 0895 ret
013C .dbend
.area data(ram, con, rel)
0000 .dbfile E:\AVR应用实例\LCD20x4\LCD20x4.c
0000 L30:
0000 .blkb 20
.area idata
0000 687474703A2F2F35392E33362E39362E .byte 'h,'t,'t,'p,58,47,47,53,57,46,51,54,46,57,54,46
0010 31393600 .byte 49,57,54,0
.area data(ram, con, rel)
0014 .dbfile E:\AVR应用实例\LCD20x4\LCD20x4.c
0014 L29:
0014 .blkb 15
.area idata
0014 2D2D2D2D2D5E5F5E2D2D2D2D2D2D00 .byte 45,45,45,45,45,94,95,94,45,45,45,45,45,45,0
.area data(ram, con, rel)
0023 .dbfile E:\AVR应用实例\LCD20x4\LCD20x4.c
0023 L28:
0023 .blkb 15
.area idata
0023 7777772E6F75726176722E636F6D00 .byte 'w,'w,'w,46,'o,'u,'r,'a,'v,'r,46,'c,'o,'m,0
.area data(ram, con, rel)
0032 .dbfile E:\AVR应用实例\LCD20x4\LCD20x4.c
0032 L27:
0032 .blkb 15
.area idata
0032 2D2D2D2D2D405F402D2D2D2D2D2D00 .byte 45,45,45,45,45,64,95,64,45,45,45,45,45,45,0
.area data(ram, con, rel)
0041 .dbfile E:\AVR应用实例\LCD20x4\LCD20x4.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -