📄 lcd1602.lis
字号:
005E 00D0 rcall pop_gset1
0060 .dbline 0 ; func end
0060 0895 ret
0062 .dbsym r h 20 c
0062 .dbend
0062 .dbfunc e init_lcd _init_lcd fV
.even
0062 _init_lcd::
0062 .dbline -1
0062 .dbline 93
0062 ; }
0062 ; /********************************************************
0062 ; 子程序名: init_lcd()
0062 ; 功 能: 初始化LCD
0062 ; 输入参数: /
0062 ; 输出参数: /
0062 ; 描 述: /
0062 ; ********************************************************/
0062 ; void init_lcd(void)
0062 ; {
0062 .dbline 94
0062 ; write_code(0x01); //清除屏幕
0062 01E0 ldi R16,1
0064 F2DF rcall _write_code
0066 .dbline 95
0066 ; write_code(0x38); //功能设定,8位数据口/2行/5*7的点阵
0066 08E3 ldi R16,56
0068 F0DF rcall _write_code
006A .dbline 96
006A ; write_code(0b00001111); //显示幕ON,光标ON,闪烁ON
006A 0FE0 ldi R16,15
006C EEDF rcall _write_code
006E .dbline 97
006E ; write_code(0x06); //模式,加1,显示幕ON。
006E 06E0 ldi R16,6
0070 ECDF rcall _write_code
0072 .dbline 98
0072 ; write_code(0b00000011); //光标回到原点
0072 03E0 ldi R16,3
0074 EADF rcall _write_code
0076 .dbline -2
0076 L13:
0076 .dbline 0 ; func end
0076 0895 ret
0078 .dbend
0078 .dbfunc e display_lcd _display_lcd fV
0078 ; i -> R20
0078 ; p -> R22,R23
.even
0078 _display_lcd::
0078 00D0 rcall push_gset2
007A B801 movw R22,R16
007C .dbline -1
007C .dbline 108
007C ; }
007C ; /********************************************************
007C ; 子程序名: display_lcd()
007C ; 功 能: 刷新显示一屏数据,独立的LCD显示程序,用户将显存内容更新后,只要调用此程序即可更新显示。
007C ; 输入参数: /
007C ; 输出参数: /
007C ; 描 述: 在写一个字符前,先设定显示的位置地址,然后再写数据。系统可以自动地址加一。
007C ; ********************************************************/
007C ; void display_lcd(uchar *p)
007C ; {
007C .dbline 110
007C ; uchar i;
007C ; write_code(0x80); //第一行起始地址,0b10000000B=0x80.
007C 00E8 ldi R16,128
007E E5DF rcall _write_code
0080 .dbline 111
0080 ; for(i=0;i<16;i++)
0080 4427 clr R20
0082 07C0 rjmp L18
0084 L15:
0084 .dbline 112
0084 .dbline 113
0084 E42F mov R30,R20
0086 FF27 clr R31
0088 E60F add R30,R22
008A F71F adc R31,R23
008C 0081 ldd R16,z+0
008E D1DF rcall _write_data
0090 .dbline 114
0090 L16:
0090 .dbline 111
0090 4395 inc R20
0092 L18:
0092 .dbline 111
0092 4031 cpi R20,16
0094 B8F3 brlo L15
0096 .dbline 115
0096 ; {
0096 ; write_data(p[i]);
0096 ; }
0096 ; write_code(0xc0); //第二行起始地址,0b11000000B=0xc0.
0096 00EC ldi R16,192
0098 D8DF rcall _write_code
009A .dbline 116
009A ; for(i=16;i<32;i++)
009A 40E1 ldi R20,16
009C 07C0 rjmp L22
009E L19:
009E .dbline 117
009E .dbline 118
009E E42F mov R30,R20
00A0 FF27 clr R31
00A2 E60F add R30,R22
00A4 F71F adc R31,R23
00A6 0081 ldd R16,z+0
00A8 C4DF rcall _write_data
00AA .dbline 119
00AA L20:
00AA .dbline 116
00AA 4395 inc R20
00AC L22:
00AC .dbline 116
00AC 4032 cpi R20,32
00AE B8F3 brlo L19
00B0 .dbline -2
00B0 L14:
00B0 00D0 rcall pop_gset2
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym r i 20 c
00B4 .dbsym r p 22 pc
00B4 .dbend
.area lit(rom, con, rel)
0000 L24:
0000 2020202077656C636F6D652120202020 .byte 32,32,32,32,'w,'e,'l,'c,'o,'m,'e,33,32,32,32,32
0010 20207777772E6974736E2E636E212020 .byte 32,32,'w,'w,'w,46,'i,'t,'s,'n,46,'c,'n,33,32,32
0020 2000 .byte 32,0
.area text(rom, con, rel)
00B4 .dbfile E:\iccavr代码\实验板lcd1602\lcd1602.c
00B4 .dbfunc e main _main fV
00B4 ; i -> <dead>
00B4 ; buf -> y+0
.even
00B4 _main::
00B4 A297 sbiw R28,34
00B6 .dbline -1
00B6 .dbline 123
00B6 ; {
00B6 ; write_data(p[i]);
00B6 ; }
00B6 ; }
00B6 ; //*****************主程序**********************************
00B6 ; void main (void)
00B6 ; {
00B6 .dbline 125
00B6 ; uchar i;
00B6 ; uchar buf[]=" welcome! www.itsn.cn! ";
00B6 80E0 ldi R24,<L24
00B8 90E0 ldi R25,>L24
00BA FE01 movw R30,R28
00BC 02E2 ldi R16,34
00BE 10E0 ldi R17,0
00C0 FA93 st -y,R31
00C2 EA93 st -y,R30
00C4 9A93 st -y,R25
00C6 8A93 st -y,R24
00C8 00D0 rcall asgncblk
00CA .dbline 126
00CA ; DelaymS(100);
00CA 04E6 ldi R16,100
00CC 10E0 ldi R17,0
00CE 98DF rcall _DelaymS
00D0 .dbline 127
00D0 ; init_mcu(); //单片机初始化
00D0 ACDF rcall _init_mcu
00D2 .dbline 128
00D2 ; init_lcd(); //lcd初始化
00D2 C7DF rcall _init_lcd
00D4 .dbline 129
00D4 ; display_lcd(buf); //刷新显示一屏
00D4 8E01 movw R16,R28
00D6 D0DF rcall _display_lcd
00D8 .dbline 131
00D8 ;
00D8 ; buf[0] = 'i'; //可以任意修改显示的内容
00D8 89E6 ldi R24,105
00DA 8883 std y+0,R24
00DC .dbline 132
00DC ; display_lcd(buf); //刷新显示
00DC 8E01 movw R16,R28
00DE CCDF rcall _display_lcd
00E0 .dbline 133
00E0 ; write_code (0xC0); //光标停留在0C2H位置。第1行光标位置有0x80,0x81...0x8f,第2行光标位置有0xc0,0xc1...0xcf.
00E0 00EC ldi R16,192
00E2 B3DF rcall _write_code
00E4 L25:
00E4 .dbline 134
00E4 L26:
00E4 .dbline 134
00E4 FFCF rjmp L25
00E6 X0:
00E6 .dbline -2
00E6 L23:
00E6 A296 adiw R28,34
00E8 .dbline 0 ; func end
00E8 0895 ret
00EA .dbsym l i 1 c
00EA .dbsym l buf 0 A[34:34]c
00EA .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -