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

📄 lcd.lis

📁 作为LCD显示的 AVR开发学习源码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lcd.c
                        .area data(ram, con, rel)
 0000           _str1::
 0000                   .blkb 17
                        .area idata
 0000 2051513A313037343337353936202020  .byte 32,'Q,'Q,58,49,48,55,52,51,55,53,57,54,32,32,32
 0010 00                .byte 0
                        .area data(ram, con, rel)
 0011                   .dbfile F:\专业\单片机分类\AVR\功能模块应用\1602LCD\lcd.c
 0011                   .dbsym e str1 _str1 A[17:17]c
 0011           _str2::
 0011                   .blkb 17
                        .area idata
 0011 2039386469616E403136332E636F6D20  .byte 32,57,56,'d,'i,'a,'n,64,49,54,51,46,'c,'o,'m,32
 0021 00                .byte 0
                        .area data(ram, con, rel)
 0022                   .dbfile F:\专业\单片机分类\AVR\功能模块应用\1602LCD\lcd.c
 0022                   .dbsym e str2 _str2 A[17:17]c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\专业\单片机分类\AVR\功能模块应用\1602LCD\lcd.c
 0000                   .dbfunc e main _main fV
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 33
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; 
 0000           ; #define lcd_data_port PORTC
 0000           ; #define lcd_data_ddr DDRC
 0000           ; #define lcd_busy_pin PINC
 0000           ; #define lcd_busy_ddr DDRC
 0000           ; #define lcd_control_port PORTB
 0000           ; #define lcd_control_ddr DDRB
 0000           ; 
 0000           ; #define lcd_RS 0x20   //PORTB5
 0000           ; #define lcd_RW 0x10   //PORTB4
 0000           ; #define lcd_EN 0x08   //PORTB3
 0000           ; #define busy 0x80     //LCD_DB7
 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           ; unsigned char str1[]=" QQ:107437596   ";
 0000           ; unsigned char str2[]=" 98dian@163.com ";
 0000           ; 
 0000           ; /*------------------------------------主函数-------------------------------------------*/
 0000           ; void main(void)
 0000           ; {
 0000                   .dbline 34
 0000           ;       lcd_data_port=0xff;
 0000 8FEF              ldi R24,255
 0002 85BB              out 0x15,R24
 0004                   .dbline 35
 0004           ;       lcd_data_ddr=0xff;
 0004 84BB              out 0x14,R24
 0006                   .dbline 36
 0006           ;       lcd_control_ddr=0xff;
 0006 87BB              out 0x17,R24
 0008                   .dbline 37
 0008           ;       lcd_init();
 0008 0AD0              xcall _lcd_init
 000A                   .dbline 38
 000A           ;       display_a_string(0,str1);
 000A 20E0              ldi R18,<_str1
 000C 30E0              ldi R19,>_str1
 000E 0027              clr R16
 0010 68D0              xcall _display_a_string
 0012                   .dbline 39
 0012           ;       display_a_string(1,str2);
 0012 20E0              ldi R18,<_str2
 0014 30E0              ldi R19,>_str2
 0016 01E0              ldi R16,1
 0018 64D0              xcall _display_a_string
 001A           L2:
 001A                   .dbline 40
 001A           L3:
 001A                   .dbline 40
 001A FFCF              xjmp L2
 001C           X0:
 001C                   .dbline -2
 001C           L1:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfunc e lcd_init _lcd_init fV
                        .even
 001E           _lcd_init::
 001E                   .dbline -1
 001E                   .dbline 46
 001E           ;       while(1);
 001E           ; }
 001E           ;       
 001E           ; /*------------------------------------液晶驱动函数-------------------------------------*/
 001E           ; //液晶初始化
 001E           ; void lcd_init(void)
 001E           ; {
 001E                   .dbline 47
 001E           ;       delay_nms(15);
 001E 0FE0              ldi R16,15
 0020 10E0              ldi R17,0
 0022 82D0              xcall _delay_nms
 0024                   .dbline 48
 0024           ;       lcd_write_command(0x38,0);//显示模式设置三次(此时不管lcd空闲与否)
 0024 2227              clr R18
 0026 08E3              ldi R16,56
 0028 1FD0              xcall _lcd_write_command
 002A                   .dbline 49
 002A           ;       delay_nms(5);
 002A 05E0              ldi R16,5
 002C 10E0              ldi R17,0
 002E 7CD0              xcall _delay_nms
 0030                   .dbline 50
 0030           ;       lcd_write_command(0x38,0);
 0030 2227              clr R18
 0032 08E3              ldi R16,56
 0034 19D0              xcall _lcd_write_command
 0036                   .dbline 51
 0036           ;       delay_nms(5);
 0036 05E0              ldi R16,5
 0038 10E0              ldi R17,0
 003A 76D0              xcall _delay_nms
 003C                   .dbline 52
 003C           ;       lcd_write_command(0x38,0);
 003C 2227              clr R18
 003E 08E3              ldi R16,56
 0040 13D0              xcall _lcd_write_command
 0042                   .dbline 53
 0042           ;       delay_nms(5);
 0042 05E0              ldi R16,5
 0044 10E0              ldi R17,0
 0046 70D0              xcall _delay_nms
 0048                   .dbline 55
 0048           ;       
 0048           ;       lcd_write_command(0x38,1);//显示模式设置(从此之后均需lcd空闲)
 0048 21E0              ldi R18,1
 004A 08E3              ldi R16,56
 004C 0DD0              xcall _lcd_write_command
 004E                   .dbline 56
 004E           ;       lcd_write_command(0x08,1);//显示关闭
 004E 21E0              ldi R18,1
 0050 08E0              ldi R16,8
 0052 0AD0              xcall _lcd_write_command
 0054                   .dbline 57
 0054           ;       lcd_write_command(0x01,1);//显示清屏
 0054 21E0              ldi R18,1
 0056 01E0              ldi R16,1
 0058 07D0              xcall _lcd_write_command
 005A                   .dbline 58
 005A           ;       lcd_write_command(0x06,1);//显示光标移动设置
 005A 21E0              ldi R18,1
 005C 06E0              ldi R16,6
 005E 04D0              xcall _lcd_write_command
 0060                   .dbline 59
 0060           ;       lcd_write_command(0x0c,1);//显示开及光标设置
 0060 21E0              ldi R18,1
 0062 0CE0              ldi R16,12
 0064 01D0              xcall _lcd_write_command
 0066                   .dbline -2
 0066           L5:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbend
 0068                   .dbfunc e lcd_write_command _lcd_write_command fV
 0068           ;        wait_en -> R22
 0068           ;        command -> R20
                        .even
 0068           _lcd_write_command::
 0068 0E940000          xcall push_gset2
 006C 622F              mov R22,R18
 006E 402F              mov R20,R16
 0070                   .dbline -1
 0070                   .dbline 64
 0070           ; }
 0070           ; 
 0070           ; //写指令函数: E=高脉冲 RS=0 RW=0
 0070           ; void lcd_write_command(unsigned char command,unsigned char wait_en)//command为指令,wait_en指定是否要检测LCD忙信号
 0070           ; {
 0070                   .dbline 65
 0070           ;       if(wait_en)wait_enable();//若wait_en为1,则要检测LCD忙信号,等待其空闲
 0070 6623              tst R22
 0072 09F0              breq L7
 0074                   .dbline 65
 0074 18D0              xcall _wait_enable
 0076           L7:
 0076                   .dbline 66
 0076           ;       lcd_control_port&=~lcd_RS;//RS=0
 0076 C598              cbi 0x18,5
 0078                   .dbline 67
 0078           ;       lcd_control_port&=~lcd_RW;//RW=0
 0078 C498              cbi 0x18,4
 007A                   .dbline 68
 007A           ;       lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲
 007A C398              cbi 0x18,3
 007C                   .dbline 69
 007C           ;       NOP();
 007C 0000              nop
 007E                   .dbline 70
 007E           ;       lcd_control_port|=lcd_EN;//E=1
 007E C39A              sbi 0x18,3
 0080                   .dbline 71
 0080           ;       lcd_data_port=command;
 0080 45BB              out 0x15,R20
 0082                   .dbline 72
 0082           ;       lcd_control_port&=~lcd_EN;//重设E=0
 0082 C398              cbi 0x18,3
 0084                   .dbline -2
 0084           L6:
 0084 0E940000          xcall pop_gset2
 0088                   .dbline 0 ; func end
 0088 0895              ret
 008A                   .dbsym r wait_en 22 c
 008A                   .dbsym r command 20 c
 008A                   .dbend
 008A                   .dbfunc e lcd_write_data _lcd_write_data fV
 008A           ;      char_data -> R20
                        .even
 008A           _lcd_write_data::
 008A 0E940000          xcall push_gset1
 008E 402F              mov R20,R16
 0090                   .dbline -1
 0090                   .dbline 77
 0090           ; }
 0090           ; 
 0090           ; //写数据函数: E =高脉冲 RS=1 RW=0
 0090           ; void lcd_write_data(unsigned char char_data)
 0090           ; {
 0090                   .dbline 78
 0090           ;       wait_enable();//等待LCD空闲
 0090 0AD0              xcall _wait_enable
 0092                   .dbline 79
 0092           ;       lcd_control_port|=lcd_RS;//RS=1
 0092 C59A              sbi 0x18,5
 0094                   .dbline 80
 0094           ;       lcd_control_port&=~lcd_RW;//RW=0
 0094 C498              cbi 0x18,4
 0096                   .dbline 81
 0096           ;       lcd_control_port&=~lcd_EN;//E=0,下面给LCD一个高脉冲
 0096 C398              cbi 0x18,3
 0098                   .dbline 82
 0098           ;       NOP();

⌨️ 快捷键说明

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