📄 lcd1602.lis
字号:
.module lcd1602.c
.area text(rom, con, rel)
0000 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\lcd1602.c
0000 .dbfunc e LCD_init _LCD_init fV
.even
0000 _LCD_init::
0000 .dbline -1
0000 .dbline 7
0000 ; //-----------------------------LCD1602 Function---------------------------------
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; #include "lcd1602.h"
0000 ;
0000 ; void LCD_init(void) //液晶初始化
0000 ; {
0000 .dbline 8
0000 ; delay_nms(2);
0000 02E0 ldi R16,2
0002 10E0 ldi R17,0
0004 00D0 rcall _delay_nms
0006 .dbline 10
0006 ;
0006 ; LCD_write_char(0x28,0); //4位显示
0006 2227 clr R18
0008 3327 clr R19
000A 08E2 ldi R16,40
000C 10E0 ldi R17,0
000E 39D0 rcall _LCD_write_char
0010 .dbline 11
0010 ; LCD_write_char(0x0c,0); //显示开
0010 2227 clr R18
0012 3327 clr R19
0014 0CE0 ldi R16,12
0016 10E0 ldi R17,0
0018 34D0 rcall _LCD_write_char
001A .dbline 12
001A ; LCD_write_char(0x01,0); //清屏
001A 2227 clr R18
001C 3327 clr R19
001E 01E0 ldi R16,1
0020 10E0 ldi R17,0
0022 2FD0 rcall _LCD_write_char
0024 .dbline -2
0024 L1:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e LCD_write_string _LCD_write_string fV
0026 ; s -> R20,R21
0026 ; Y -> R10
0026 ; X -> R22
.even
0026 _LCD_write_string::
0026 00D0 rcall push_gset3
0028 A22E mov R10,R18
002A 602F mov R22,R16
002C 4E81 ldd R20,y+6
002E 5F81 ldd R21,y+7
0030 .dbline -1
0030 .dbline 16
0030 ; }
0030 ;
0030 ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
0030 ; {
0030 .dbline 17
0030 ; LCD_set_xy( X, Y ); //写地址
0030 2A2D mov R18,R10
0032 062F mov R16,R22
0034 0FD0 rcall _LCD_set_xy
0036 08C0 rjmp L4
0038 L3:
0038 .dbline 20
0038 .dbline 21
0038 FA01 movw R30,R20
003A 2081 ldd R18,z+0
003C 3327 clr R19
003E 0027 clr R16
0040 1127 clr R17
0042 1FD0 rcall _LCD_write_char
0044 .dbline 22
0044 4F5F subi R20,255 ; offset = 1
0046 5F4F sbci R21,255
0048 .dbline 23
0048 L4:
0048 .dbline 19
0048 ;
0048 ; while (*s) // 写显示字符
0048 FA01 movw R30,R20
004A 2080 ldd R2,z+0
004C 2220 tst R2
004E A1F7 brne L3
0050 .dbline -2
0050 L2:
0050 00D0 rcall pop_gset3
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r s 20 pc
0054 .dbsym r Y 10 c
0054 .dbsym r X 22 c
0054 .dbend
0054 .dbfunc e LCD_set_xy _LCD_set_xy fV
0054 ; address -> R20
0054 ; y -> R20
0054 ; x -> R22
.even
0054 _LCD_set_xy::
0054 00D0 rcall push_gset2
0056 422F mov R20,R18
0058 602F mov R22,R16
005A .dbline -1
005A .dbline 27
005A ; {
005A ; LCD_write_char( 0, *s );
005A ; s ++;
005A ; }
005A ; }
005A ;
005A ; void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数
005A ; {
005A .dbline 30
005A ; unsigned char address;
005A ;
005A ; if (y == 0)
005A 4423 tst R20
005C 19F4 brne L7
005E .dbline 31
005E ; address = 0x80 + x;
005E 462F mov R20,R22
0060 4058 subi R20,128 ; addi 128
0062 02C0 rjmp L8
0064 L7:
0064 .dbline 33
0064 ; else
0064 ; address = 0xc0 + x;
0064 462F mov R20,R22
0066 4054 subi R20,64 ; addi 192
0068 L8:
0068 .dbline 34
0068 ; LCD_write_char( address, 0 );
0068 2227 clr R18
006A 3327 clr R19
006C 042F mov R16,R20
006E 1127 clr R17
0070 08D0 rcall _LCD_write_char
0072 .dbline -2
0072 L6:
0072 00D0 rcall pop_gset2
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbsym r address 20 c
0076 .dbsym r y 20 c
0076 .dbsym r x 22 c
0076 .dbend
0076 .dbfunc e LCD_en_write _LCD_en_write fV
.even
0076 _LCD_en_write::
0076 .dbline -1
0076 .dbline 38
0076 ; }
0076 ;
0076 ; void LCD_en_write(void) //液晶使能
0076 ; {
0076 .dbline 39
0076 ; LCD_EN_PORT|=LCD_EN;
0076 AC9A sbi 0x15,4
0078 .dbline 40
0078 ; delay_nus(1);
0078 01E0 ldi R16,1
007A 10E0 ldi R17,0
007C 00D0 rcall _delay_nus
007E .dbline 41
007E ; LCD_EN_PORT&=~LCD_EN;
007E AC98 cbi 0x15,4
0080 .dbline -2
0080 L9:
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbend
0082 .dbfunc e LCD_write_char _LCD_write_char fV
0082 ; data_temp -> R22,R23
0082 ; command_temp -> R20,R21
0082 ; data -> R12,R13
0082 ; command -> R10,R11
.even
0082 _LCD_write_char::
0082 00D0 rcall push_gset4
0084 6901 movw R12,R18
0086 5801 movw R10,R16
0088 .dbline -1
0088 .dbline 45
0088 ; }
0088 ;
0088 ; void LCD_write_char(unsigned command,unsigned data) // 写数据
0088 ; {
0088 .dbline 48
0088 ; unsigned command_temp,data_temp;
0088 ;
0088 ; command_temp=command;
0088 A501 movw R20,R10
008A .dbline 49
008A ; data_temp=data;
008A B601 movw R22,R12
008C .dbline 50
008C ; delay_nus(16);
008C 00E1 ldi R16,16
008E 10E0 ldi R17,0
0090 00D0 rcall _delay_nus
0092 .dbline 52
0092 ;
0092 ; if(command==0)
0092 4030 cpi R20,0
0094 4507 cpc R20,R21
0096 11F5 brne L11
0098 X0:
0098 .dbline 53
0098 ; {
0098 .dbline 54
0098 ; LCD_RS_PORT|=LCD_RS; //RS=1
0098 AD9A sbi 0x15,5
009A .dbline 55
009A ; LCD_DATA_PORT&=0Xf0;
009A 85B3 in R24,0x15
009C 807F andi R24,240
009E 85BB out 0x15,R24
00A0 .dbline 56
00A0 ; LCD_DATA_PORT|=((data_temp&0xf0)>>4); //写高四位
00A0 CB01 movw R24,R22
00A2 807F andi R24,240
00A4 9070 andi R25,0
00A6 9695 lsr R25
00A8 8795 ror R24
00AA 9695 lsr R25
00AC 8795 ror R24
00AE 9695 lsr R25
00B0 8795 ror R24
00B2 9695 lsr R25
00B4 8795 ror R24
00B6 25B2 in R2,0x15
00B8 3324 clr R3
00BA 282A or R2,R24
00BC 392A or R3,R25
00BE 25BA out 0x15,R2
00C0 .dbline 57
00C0 ; LCD_en_write();
00C0 DADF rcall _LCD_en_write
00C2 .dbline 58
00C2 ; LCD_DATA_PORT&=0Xf0;
00C2 85B3 in R24,0x15
00C4 807F andi R24,240
00C6 85BB out 0x15,R24
00C8 .dbline 59
00C8 ; LCD_DATA_PORT|=data_temp&0x0f; //写低四位
00C8 CB01 movw R24,R22
00CA 8F70 andi R24,15
00CC 9070 andi R25,0
00CE 25B2 in R2,0x15
00D0 3324 clr R3
00D2 282A or R2,R24
00D4 392A or R3,R25
00D6 25BA out 0x15,R2
00D8 .dbline 60
00D8 ; LCD_en_write();
00D8 CEDF rcall _LCD_en_write
00DA .dbline 61
00DA ; }
00DA 21C0 rjmp L12
00DC L11:
00DC .dbline 63
00DC .dbline 64
00DC AD98 cbi 0x15,5
00DE .dbline 65
00DE 85B3 in R24,0x15
00E0 807F andi R24,240
00E2 85BB out 0x15,R24
00E4 .dbline 66
00E4 CA01 movw R24,R20
00E6 807F andi R24,240
00E8 9070 andi R25,0
00EA 9695 lsr R25
00EC 8795 ror R24
00EE 9695 lsr R25
00F0 8795 ror R24
00F2 9695 lsr R25
00F4 8795 ror R24
00F6 9695 lsr R25
00F8 8795 ror R24
00FA 25B2 in R2,0x15
00FC 3324 clr R3
00FE 282A or R2,R24
0100 392A or R3,R25
0102 25BA out 0x15,R2
0104 .dbline 67
0104 B8DF rcall _LCD_en_write
0106 .dbline 68
0106 85B3 in R24,0x15
0108 807F andi R24,240
010A 85BB out 0x15,R24
010C .dbline 69
010C CA01 movw R24,R20
010E 8F70 andi R24,15
0110 9070 andi R25,0
0112 25B2 in R2,0x15
0114 3324 clr R3
0116 282A or R2,R24
0118 392A or R3,R25
011A 25BA out 0x15,R2
011C .dbline 70
011C ACDF rcall _LCD_en_write
011E .dbline 71
011E L12:
011E .dbline -2
011E L10:
011E 00D0 rcall pop_gset4
0120 .dbline 0 ; func end
0120 0895 ret
0122 .dbsym r data_temp 22 i
0122 .dbsym r command_temp 20 i
0122 .dbsym r data 12 i
0122 .dbsym r command 10 i
0122 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -