⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602.lis

📁 AVR MEGA16 控制 LCD(1602) 显示英文单词
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _1602.c
                        .area data(ram, con, rel)
 0000           _str1::
 0000                   .blkb 16
                        .area idata
 0000 20202049206C6F766520796F75202000  .byte 32,32,32,'I,32,'l,'o,'v,'e,32,'y,'o,'u,32,32,0
                        .area data(ram, con, rel)
 0010                   .dbfile 1602.c
 0010                   .dbsym e str1 _str1 A[16:16]c
 0010           _str2::
 0010                   .blkb 17
                        .area idata
 0010 207777772E6F75726176722E636F6D20  .byte 32,'w,'w,'w,46,'o,'u,'r,'a,'v,'r,46,'c,'o,'m,32
 0020 00                .byte 0
                        .area data(ram, con, rel)
 0021                   .dbfile 1602.c
 0021                   .dbsym e str2 _str2 A[17:17]c
                        .area text(rom, con, rel)
 0000                   .dbfile 1602.c
 0000                   .dbfunc e main _main fV
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 54
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define lcd_data_port PORTD
 0000           ; #define lcd_data_ddr DDRD
 0000           ; #define lcd_busy_pin PIND
 0000           ; #define lcd_busy_ddr DDRD
 0000           ; #define lcd_control_port PORTA
 0000           ; #define lcd_control_ddr DDRA
 0000           ; 
 0000           ; #define lcd_RS 0x01   
 0000           ; //PORTA0
 0000           ; #define lcd_RW 0x02   
 0000           ; //PORTA1
 0000           ; #define lcd_EN 0x04   
 0000           ; //PORTA2
 0000           ; #define busy 0x80     
 0000           ; //LCD_DB7
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; /*----------------------------------函数声明------------------------------------------*/
 0000           ; void lcd_init(void);
 0000           ; void lcd_write_command(unsigned char command,unsigned char wait_en);
 0000           ; void lcd_write_data(unsigned char char_data);
 0000           ; void wait_enable(void);
 0000           ; void display_a_char(unsigned char position,unsigned char char_data);
 0000           ; void display_a_string(unsigned char col,unsigned char *ptr);
 0000           ; void delay_1ms(void);
 0000           ; void delay_nms(unsigned int n);
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; //显示的两行字符
 0000           ; unsigned char str1[]="   I love you  ";
 0000           ; unsigned char str2[]=" www.ouravr.com ";
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; /*------------------------------------主函数-------------------------------------------*/
 0000           ; void main(void)
 0000           ; {
 0000                   .dbline 55
 0000           ;       lcd_data_port=0xff;
 0000 8FEF              ldi R24,255
 0002 82BB              out 0x12,R24
 0004                   .dbline 56
 0004           ;       lcd_data_ddr=0xff;
 0004 81BB              out 0x11,R24
 0006                   .dbline 57
 0006           ;       lcd_control_port=0x07;
 0006 87E0              ldi R24,7
 0008 8BBB              out 0x1b,R24
 000A                   .dbline 58
 000A           ;       lcd_control_ddr=0x07;
 000A 8ABB              out 0x1a,R24
 000C                   .dbline 59
 000C           ;       lcd_init();
 000C 0AD0              xcall _lcd_init
 000E                   .dbline 60
 000E           ;       display_a_string(0,str1);
 000E 20E0              ldi R18,<_str1
 0010 30E0              ldi R19,>_str1
 0012 0027              clr R16
 0014 67D0              xcall _display_a_string
 0016                   .dbline 61
 0016           ;       display_a_string(1,str2);
 0016 20E0              ldi R18,<_str2
 0018 30E0              ldi R19,>_str2
 001A 01E0              ldi R16,1
 001C 63D0              xcall _display_a_string
 001E           L2:
 001E                   .dbline 62
 001E           L3:
 001E                   .dbline 62
 001E FFCF              xjmp L2
 0020           X0:
 0020                   .dbline -2
 0020                   .dbline 63
 0020           ;       while(1);
 0020           ; }
 0020           L1:
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbend
 0022                   .dbfunc e lcd_init _lcd_init fV
                        .even
 0022           _lcd_init::
 0022                   .dbline -1
 0022                   .dbline 77
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ; 
 0022           ;       
 0022           ; /*------------------------------------液晶驱动函数-------------------------------------*/
 0022           ; //液晶初始化
 0022           ; void lcd_init(void)
 0022           ; {
 0022                   .dbline 78
 0022           ;       delay_nms(15);
 0022 0FE0              ldi R16,15
 0024 10E0              ldi R17,0
 0026 81D0              xcall _delay_nms
 0028                   .dbline 79
 0028           ;       lcd_write_command(0x38,0);//显示模式设置三次(此时不管lcd空闲与否)
 0028 2227              clr R18
 002A 08E3              ldi R16,56
 002C 1ED0              xcall _lcd_write_command
 002E                   .dbline 80
 002E           ;       delay_nms(5);
 002E 05E0              ldi R16,5
 0030 10E0              ldi R17,0
 0032 7BD0              xcall _delay_nms
 0034                   .dbline 81
 0034           ;       lcd_write_command(0x38,0);
 0034 2227              clr R18
 0036 08E3              ldi R16,56
 0038 18D0              xcall _lcd_write_command
 003A                   .dbline 82
 003A           ;       delay_nms(5);
 003A 05E0              ldi R16,5
 003C 10E0              ldi R17,0
 003E 75D0              xcall _delay_nms
 0040                   .dbline 83
 0040           ;       lcd_write_command(0x38,0);
 0040 2227              clr R18
 0042 08E3              ldi R16,56
 0044 12D0              xcall _lcd_write_command
 0046                   .dbline 84
 0046           ;       delay_nms(5);
 0046 05E0              ldi R16,5
 0048 10E0              ldi R17,0
 004A 6FD0              xcall _delay_nms
 004C                   .dbline 86
 004C           ;       
 004C           ;       lcd_write_command(0x38,1);//显示模式设置(从此之后均需lcd空闲)
 004C 21E0              ldi R18,1
 004E 08E3              ldi R16,56
 0050 0CD0              xcall _lcd_write_command
 0052                   .dbline 87
 0052           ;       lcd_write_command(0x08,1);//显示关闭
 0052 21E0              ldi R18,1
 0054 08E0              ldi R16,8
 0056 09D0              xcall _lcd_write_command
 0058                   .dbline 88
 0058           ;       lcd_write_command(0x01,1);//显示清屏
 0058 21E0              ldi R18,1
 005A 01E0              ldi R16,1
 005C 06D0              xcall _lcd_write_command
 005E                   .dbline 89
 005E           ;       lcd_write_command(0x06,1);//显示光标移动设置
 005E 21E0              ldi R18,1
 0060 06E0              ldi R16,6
 0062 03D0              xcall _lcd_write_command
 0064                   .dbline 90
 0064           ;       lcd_write_command(0x0c,1);//显示开及光标设置
 0064 21E0              ldi R18,1
 0066 0CE0              ldi R16,12
 0068                   .dbline -2
 0068                   .dbline 91
 0068           ; }
 0068           L5:
 0068                   .dbline 0 ; func end
 0068 00C0              xjmp _lcd_write_command
 006A                   .dbend
 006A                   .dbfunc e lcd_write_command _lcd_write_command fV
 006A           ;        wait_en -> R22
 006A           ;        command -> R20
                        .even
 006A           _lcd_write_command::
 006A 0E940000          xcall push_gset2
 006E 622F              mov R22,R18
 0070 402F              mov R20,R16
 0072                   .dbline -1
 0072                   .dbline 102
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; //写指令函数: E=高脉冲 RS=0 RW=0
 0072           ; void lcd_write_command(unsigned char command,unsigned char wait_en)//command为指令,wait_en指定是否要检测LCD忙信号
 0072           ; {
 0072                   .dbline 103
 0072           ;       if(wait_en)wait_enable();//若wait_en为1,则要检测LCD忙信号,等待其空闲
 0072 6623              tst R22
 0074 09F0              breq L7
 0076                   .dbline 103
 0076 18D0              xcall _wait_enable
 0078           L7:
 0078                   .dbline 104
 0078           ;       lcd_control_port&=~lcd_RS;//RS=0
 0078 D898              cbi 0x1b,0
 007A                   .dbline 105
 007A           ;       lcd_control_port&=~lcd_RW;//RW=0
 007A D998              cbi 0x1b,1
 007C                   .dbline 106
 007C           ;       lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲
 007C DA98              cbi 0x1b,2
 007E                   .dbline 107
 007E           ;       NOP();
 007E 0000              nop
 0080                   .dbline 108
 0080           ;       lcd_control_port|=lcd_EN;//E=1
 0080 DA9A              sbi 0x1b,2
 0082                   .dbline 109
 0082           ;       lcd_data_port=command;
 0082 42BB              out 0x12,R20
 0084                   .dbline 110
 0084           ;       lcd_control_port&=~lcd_EN;//重设E=0
 0084 DA98              cbi 0x1b,2
 0086                   .dbline -2
 0086                   .dbline 111
 0086           ; }
 0086           L6:
 0086 0E940000          xcall pop_gset2
 008A                   .dbline 0 ; func end
 008A 0895              ret
 008C                   .dbsym r wait_en 22 c
 008C                   .dbsym r command 20 c
 008C                   .dbend
 008C                   .dbfunc e lcd_write_data _lcd_write_data fV
 008C           ;      char_data -> R20
                        .even
 008C           _lcd_write_data::
 008C 0E940000          xcall push_gset1
 0090 402F              mov R20,R16
 0092                   .dbline -1
 0092                   .dbline 123
 0092           ; 
 0092           ; 
 0092           ; 
 0092           ; 
 0092           ; 
 0092           ; 
 0092           ; 
 0092           ; 
 0092           ; 
 0092           ; //写数据函数: E =高脉冲 RS=1 RW=0
 0092           ; void lcd_write_data(unsigned char char_data)
 0092           ; {
 0092                   .dbline 124
 0092           ;       wait_enable();//等待LCD空闲
 0092 0AD0              xcall _wait_enable
 0094                   .dbline 125
 0094           ;       lcd_control_port|=lcd_RS;//RS=1
 0094 D89A              sbi 0x1b,0
 0096                   .dbline 126
 0096           ;       lcd_control_port&=~lcd_RW;//RW=0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -