📄 lcd20x4.lis
字号:
0082 D5DF rcall _Lcd_Busy
0084 0023 tst R16
0086 E9F7 brne L15
0088 X3:
0088 .dbline 99
0088 ; E_L;RS_H;RW_L; //E=0(致能),RS=1(数据),RW=0(写)
0088 AF98 cbi 0x15,7
008A .dbline 99
008A AD9A sbi 0x15,5
008C .dbline 99
008C AE98 cbi 0x15,6
008E .dbline 100
008E ; delay_us(2); //液晶延时子程序
008E 02E0 ldi R16,2
0090 10E0 ldi R17,0
0092 B6DF rcall _delay_us
0094 .dbline 101
0094 ; E_H;
0094 AF9A sbi 0x15,7
0096 .dbline 102
0096 ; PORTB = Data; //向lcd写入一个字符
0096 A8BA out 0x18,R10
0098 .dbline 103
0098 ; delay_us(2); //液晶延时子程序
0098 02E0 ldi R16,2
009A 10E0 ldi R17,0
009C B1DF rcall _delay_us
009E .dbline 104
009E ; E_L;
009E AF98 cbi 0x15,7
00A0 .dbline -2
00A0 L14:
00A0 .dbline 0 ; func end
00A0 A990 ld R10,y+
00A2 0895 ret
00A4 .dbsym r Data 10 c
00A4 .dbend
00A4 .dbfunc e Lcd_Init _Lcd_Init fV
.even
00A4 _Lcd_Init::
00A4 .dbline -1
00A4 .dbline 116
00A4 ; }
00A4 ;
00A4 ;
00A4 ; /*=======================================================
00A4 ; LCD第1行显示地址1~20(0x80~0x93)
00A4 ; LCD第2行显示地址1~20(0xc0~0xd3)
00A4 ; LCD第3行显示地址1~20(0x94~0xa7)
00A4 ; LCD第4行显示地址1~20(0xd4~0xe7)
00A4 ; =======================================================*/
00A4 ; //初始化LCD_8位接口,4行x20字符的工作方式
00A4 ; void Lcd_Init()
00A4 ; {
00A4 .dbline 117
00A4 ; DDRB = 0xff; //端口B设为输出方式
00A4 8FEF ldi R24,255
00A6 87BB out 0x17,R24
00A8 .dbline 118
00A8 ; DDRD = 0xff; //端口D设为输出方式
00A8 81BB out 0x11,R24
00AA .dbline 119
00AA ; Lcd_Command(0x38); //
00AA 08E3 ldi R16,56
00AC D5DF rcall _Lcd_Command
00AE .dbline 120
00AE ; Lcd_Command(0x38); //
00AE 08E3 ldi R16,56
00B0 D3DF rcall _Lcd_Command
00B2 .dbline 121
00B2 ; Lcd_Command(0x38); //
00B2 08E3 ldi R16,56
00B4 D1DF rcall _Lcd_Command
00B6 .dbline 122
00B6 ; Lcd_Command(0x38); //
00B6 08E3 ldi R16,56
00B8 CFDF rcall _Lcd_Command
00BA .dbline 123
00BA ; Lcd_Command(0x08); //令显示器off
00BA 08E0 ldi R16,8
00BC CDDF rcall _Lcd_Command
00BE .dbline 124
00BE ; Lcd_Command(0x01); //清除显示器
00BE 01E0 ldi R16,1
00C0 CBDF rcall _Lcd_Command
00C2 .dbline 125
00C2 ; Lcd_Command(0x06); //令LCD每接收到1Byte数据后,AC自动加1
00C2 06E0 ldi R16,6
00C4 C9DF rcall _Lcd_Command
00C6 .dbline 126
00C6 ; Lcd_Command(0x0C); //令光标,0x0c=不显示,0x0d=显示闪动.
00C6 0CE0 ldi R16,12
00C8 C7DF rcall _Lcd_Command
00CA .dbline -2
00CA L18:
00CA .dbline 0 ; func end
00CA 0895 ret
00CC .dbend
00CC .dbfunc e asc_tran _asc_tran fV
00CC ; asc -> R20,R21
.even
00CC _asc_tran::
00CC 4A93 st -y,R20
00CE 5A93 st -y,R21
00D0 A801 movw R20,R16
00D2 .dbline -1
00D2 .dbline 132
00D2 ; }
00D2 ;
00D2 ; //=======================================================
00D2 ; //写ASCII字符串程序
00D2 ; void asc_tran(unsigned char *asc)
00D2 ; {
00D2 05C0 rjmp L21
00D4 L20:
00D4 .dbline 134
00D4 ; while((*asc) != 0) //判断字是否结束
00D4 ; {
00D4 .dbline 135
00D4 ; Lcd_Write(*asc); //向lcd写入字符串
00D4 FA01 movw R30,R20
00D6 0081 ldd R16,z+0
00D8 D2DF rcall _Lcd_Write
00DA .dbline 136
00DA ; asc++; //移下一个字符
00DA 4F5F subi R20,255 ; offset = 1
00DC 5F4F sbci R21,255
00DE .dbline 137
00DE ; }
00DE L21:
00DE .dbline 133
00DE FA01 movw R30,R20
00E0 2080 ldd R2,z+0
00E2 2220 tst R2
00E4 B9F7 brne L20
00E6 X4:
00E6 .dbline -2
00E6 L19:
00E6 .dbline 0 ; func end
00E6 5991 ld R21,y+
00E8 4991 ld R20,y+
00EA 0895 ret
00EC .dbsym r asc 20 pc
00EC .dbend
00EC .dbfunc e main _main fV
.even
00EC _main::
00EC .dbline -1
00EC .dbline 143
00EC ; }
00EC ;
00EC ; //=======================================================
00EC ; //测试主LCD主程序
00EC ; void main()
00EC ; {
00EC .dbline 144
00EC ; Lcd_Init(); //初始化LCD
00EC DBDF rcall _Lcd_Init
00EE 1EC0 rjmp L25
00F0 L24:
00F0 .dbline 146
00F0 ; while(1)
00F0 ; {
00F0 .dbline 147
00F0 ; Lcd_Command(0x83); //设置显示位址
00F0 03E8 ldi R16,131
00F2 B2DF rcall _Lcd_Command
00F4 .dbline 148
00F4 ; asc_tran("-----@_@------"); //显示字符串
00F4 00E0 ldi R16,<L27
00F6 10E0 ldi R17,>L27
00F8 E9DF rcall _asc_tran
00FA .dbline 149
00FA ; Lcd_Command(0x97); //设置显示位址
00FA 07E9 ldi R16,151
00FC ADDF rcall _Lcd_Command
00FE .dbline 150
00FE ; asc_tran("www.ouravr.com"); //显示字符串
00FE 00E0 ldi R16,<L28
0100 10E0 ldi R17,>L28
0102 E4DF rcall _asc_tran
0104 .dbline 151
0104 ; delay_ms(1000); //延迟1秒
0104 08EE ldi R16,1000
0106 13E0 ldi R17,3
0108 83DF rcall _delay_ms
010A .dbline 152
010A ; Lcd_Command(0x01); //清除显示器
010A 01E0 ldi R16,1
010C A5DF rcall _Lcd_Command
010E .dbline 154
010E ;
010E ; Lcd_Command(0x83); //设置显示位址
010E 03E8 ldi R16,131
0110 A3DF rcall _Lcd_Command
0112 .dbline 155
0112 ; asc_tran("-----^_^------"); //显示字符串
0112 00E0 ldi R16,<L29
0114 10E0 ldi R17,>L29
0116 DADF rcall _asc_tran
0118 .dbline 156
0118 ; Lcd_Command(0x94); //设置显示位址
0118 04E9 ldi R16,148
011A 9EDF rcall _Lcd_Command
011C .dbline 157
011C ; asc_tran("http://59.36.96.196"); //显示字符串
011C 00E0 ldi R16,<L30
011E 10E0 ldi R17,>L30
0120 D5DF rcall _asc_tran
0122 .dbline 158
0122 ; delay_ms(1000); //延迟
0122 08EE ldi R16,1000
0124 13E0 ldi R17,3
0126 74DF rcall _delay_ms
0128 .dbline 159
0128 ; Lcd_Command(0x01); //清除显示器
0128 01E0 ldi R16,1
012A 96DF rcall _Lcd_Command
012C .dbline 160
012C ; }
012C L25:
012C .dbline 145
012C E1CF rjmp L24
012E X5:
012E .dbline -2
012E L23:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
.area data(ram, con, rel)
0000 .dbfile F:\ouravr\M16LCD~1\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 F:\ouravr\M16LCD~1\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 F:\ouravr\M16LCD~1\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 F:\ouravr\M16LCD~1\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 F:\ouravr\M16LCD~1\LCD20x4.c
0041 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -