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

📄 lcd.lis

📁 mage16,LCM1604驱动8线,调试成功
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\lcd1604\avr16-1020-2\lcd.c
 0000                   .dbfunc e LCD16xx_init _LCD16xx_init fV
                        .even
 0000           _LCD16xx_init::
 0000                   .dbline -1
 0000                   .dbline 32
 0000           ; /*--------------------------------------------------*/
 0000           ; /*             AVR-ARM开发网论坛                    */
 0000           ; /*           http://www.avrarm.com                  */
 0000           ; /*            AVR生成代码测试程序                   */
 0000           ; /*--------------------------------------------------*/
 0000           ; /*     程序由AVR辅助开发工具V2.0.1自动生成          */
 0000           ; /*     AVR系统的处理器为:   ATMega16               */
 0000           ; /*     AVR系统的晶振频率:   8.0000 Mhz             */
 0000           ; /*--------------------------------------------------*/
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "lcd.h"
 0000           ; #include "delay.h"
 0000           ; 
 0000           ; /**********************************************************
 0000           ; 光标命令
 0000           ; LCD16xx_write_char(1,0x0e);    //光标开
 0000           ; LCD16xx_write_char(1,0x0d);    //光标所在字符闪烁
 0000           ; LCD16xx_write_char(1,0x0c);    //光标关
 0000           ; **********************************************************/
 0000           ; /**********************************************************
 0000           ; TC16xxB LCD DISPLAY
 0000           ; 建立时间:2006年08月30日
 0000           ; 修改日期:2006年08月30日
 0000           ; LCD_write函数功能:当command=0时,向LCD写入数据,否则向LCD写
 0000           ;                    入命令
 0000           ; LCD第一行显示寄存器地址:0x80-0x8F
 0000           ; LCD第二行显示寄存器地址:0xC0-0xCF
 0000           ; **********************************************************/
 0000           ; void LCD16xx_init(void)
 0000           ; {
 0000                   .dbline 33
 0000           ;     LCD_DATA_DDR |=  LCD_DATA;
 0000 84B3              in R24,0x14
 0002 8F6F              ori R24,255
 0004 84BB              out 0x14,R24
 0006                   .dbline 34
 0006           ;     LCD_EN_DDR   |=  LCD_EN;
 0006 8F9A              sbi 0x11,7
 0008                   .dbline 35
 0008           ;     LCD_RS_DDR   |=  LCD_RS;
 0008 8E9A              sbi 0x11,6
 000A                   .dbline 38
 000A           ; 
 000A           ;       
 000A           ;     LCD_DATA_PORT = 0xff;
 000A 8FEF              ldi R24,255
 000C 85BB              out 0x15,R24
 000E                   .dbline 39
 000E           ;     LCD16xx_en_write();
 000E 11D0              xcall _LCD16xx_en_write
 0010                   .dbline 40
 0010           ;       delay_nus(100);
 0010 04E6              ldi R16,100
 0012 10E0              ldi R17,0
 0014 0E940000          xcall _delay_nus
 0018                   .dbline 42
 0018           ; 
 0018           ;     LCD16xx_write_char(0,0x38);      //4bit test
 0018 28E3              ldi R18,56
 001A 0027              clr R16
 001C 15D0              xcall _LCD16xx_write_char
 001E                   .dbline 43
 001E           ;     LCD16xx_write_char(0,0x0c);      //显示开
 001E 2CE0              ldi R18,12
 0020 0027              clr R16
 0022 12D0              xcall _LCD16xx_write_char
 0024                   .dbline 44
 0024           ;     LCD16xx_write_char(0,0x01);      //显示清屏
 0024 21E0              ldi R18,1
 0026 0027              clr R16
 0028 0FD0              xcall _LCD16xx_write_char
 002A                   .dbline 45
 002A           ;     LCD16xx_write_char(0,0x06);      //显示光标移动设置
 002A 26E0              ldi R18,6
 002C 0027              clr R16
 002E 0CD0              xcall _LCD16xx_write_char
 0030                   .dbline -2
 0030           L1:
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbend
 0032                   .dbfunc e LCD16xx_en_write _LCD16xx_en_write fV
                        .even
 0032           _LCD16xx_en_write::
 0032                   .dbline -1
 0032                   .dbline 49
 0032           ; }
 0032           ; 
 0032           ; void LCD16xx_en_write(void)          //EN端产生一个高电平脉冲,写LCD
 0032           ; {
 0032                   .dbline 50
 0032           ;     LCD_EN_PORT |= LCD_EN;
 0032 979A              sbi 0x12,7
 0034                   .dbline 51
 0034           ;     delay_nus(30);                    //如果晶振频率太高,则可相应提高延时
 0034 0EE1              ldi R16,30
 0036 10E0              ldi R17,0
 0038 0E940000          xcall _delay_nus
 003C                   .dbline 52
 003C           ;     LCD_EN_PORT &= ~LCD_EN;           //时间短的话,数据发不权,出现乱码
 003C 9798              cbi 0x12,7
 003E                   .dbline -2
 003E           L2:
 003E                   .dbline 0 ; func end
 003E 0895              ret
 0040                   .dbend
 0040                   .dbfunc e LCD16xx_clr _LCD16xx_clr fV
                        .even
 0040           _LCD16xx_clr::
 0040                   .dbline -1
 0040                   .dbline 59
 0040           ; }
 0040           ; 
 0040           ; /************************************************************************/
 0040           ; /* LCD16xx清屏                                                          */
 0040           ; /************************************************************************/
 0040           ; void LCD16xx_clr(void)
 0040           ; {
 0040                   .dbline 60
 0040           ;     LCD16xx_write_char(1,0x01);
 0040 21E0              ldi R18,1
 0042 01E0              ldi R16,1
 0044 01D0              xcall _LCD16xx_write_char
 0046                   .dbline -2
 0046           L3:
 0046                   .dbline 0 ; func end
 0046 0895              ret
 0048                   .dbend
 0048                   .dbfunc e LCD16xx_write_char _LCD16xx_write_char fV
 0048           ;           data -> R20
 0048           ;        command -> R22
                        .even
 0048           _LCD16xx_write_char::
 0048 0E940000          xcall push_gset2
 004C 422F              mov R20,R18
 004E 602F              mov R22,R16
 0050                   .dbline -1
 0050                   .dbline 76
 0050           ; }
 0050           ; 
 0050           ; /*-----------------------------------------------------------------------
 0050           ; LCD16xx_write_char    : 英文字符串显示函数
 0050           ; 
 0050           ; 输入参数:*s      :英文字符串指针;
 0050           ;           X、Y    : 显示字符串的位置,X:0-15,Y:0-1
 0050           ;                     LCD第一行显示寄存器地址:0x80-0x8F
 0050           ;                     LCD第一行显示寄存器地址:0xC0-0xCF
 0050           ;                                       LCD第三行显示寄存器地址:0x90-0x9F
 0050           ;                                       LCD第四行显示寄存器地址:0xD0-0xDF
 0050           ; 编写日期          :2006年08月30日
 0050           ; 最后修改日期      :2006年08月30日
 0050           ; -----------------------------------------------------------------------*/
 0050           ; void LCD16xx_write_char(unsigned char command,unsigned char data)
 0050           ; {
 0050                   .dbline 81
 0050           ;    
 0050           ;     //LCD16xx_wait_Ready();
 0050           ;    
 0050           ;                
 0050           ;     if (command == 0)                       //data
 0050 6623              tst R22
 0052 11F4              brne L5
 0054                   .dbline 82
 0054           ;        LCD_RS_PORT |= LCD_RS;               //RS=1
 0054 969A              sbi 0x12,6
 0056 01C0              xjmp L6
 0058           L5:
 0058                   .dbline 84
 0058           ;     else                                    //command
 0058           ;        LCD_RS_PORT &= ~LCD_RS;              //RS=0
 0058 9698              cbi 0x12,6
 005A           L6:
 005A                   .dbline 87
 005A           ;        
 005A           ;   
 005A           ;     LCD_DATA_PORT &= command;
 005A 25B2              in R2,0x15
 005C 2622              and R2,R22
 005E 25BA              out 0x15,R2
 0060                   .dbline 88
 0060           ;     LCD_DATA_PORT |= data&0xff;            //send low 4bit
 0060 842F              mov R24,R20
 0062 8F7F              andi R24,255
 0064 25B2              in R2,0x15
 0066 282A              or R2,R24
 0068 25BA              out 0x15,R2
 006A                   .dbline 89
 006A           ;     LCD16xx_en_write();
 006A E3DF              xcall _LCD16xx_en_write
 006C                   .dbline -2

⌨️ 快捷键说明

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