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

📄 lcd.lis

📁 atmega16与lcd1604的的代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\各种模块设计\模块程序集\atmega16+1604仿真\lcd.c
 0000                   .dbfunc e LCD16xx_init _LCD16xx_init fV
                        .even
 0000           _LCD16xx_init::
 0000                   .dbline -1
 0000                   .dbline 27
 0000           ; /*--------------------------------------------------*/
 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           ; 建立时间:2008年04月11日
 0000           ; 修改日期:2008年04月11日
 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 28
 0000           ;     LCD_DATA_DDR |=  LCD_DATA;
 0000 8AB3              in R24,0x1a
 0002 806F              ori R24,240
 0004 8ABB              out 0x1a,R24
 0006                   .dbline 29
 0006           ;     LCD_EN_DDR   |=  LCD_EN;
 0006 8D9A              sbi 0x11,5
 0008                   .dbline 30
 0008           ;     LCD_RS_DDR   |=  LCD_RS;
 0008 8E9A              sbi 0x11,6
 000A                   .dbline 34
 000A           ;     //LCD_RW_DDR   |=  LCD_RW;
 000A           ;     //RW_L;
 000A           ;       
 000A           ;     LCD16xx_write_char(1,0x28);      
 000A 28E2              ldi R18,40
 000C 01E0              ldi R16,1
 000E 24D0              xcall _LCD16xx_write_char
 0010                   .dbline 35
 0010           ;     LCD16xx_en_write();
 0010 18D0              xcall _LCD16xx_en_write
 0012                   .dbline 36
 0012           ;     delay_nus(50);
 0012 02E3              ldi R16,50
 0014 10E0              ldi R17,0
 0016 0E940000          xcall _delay_nus
 001A                   .dbline 38
 001A           ;    
 001A           ;     LCD16xx_write_char(1,0x28);      //4线接法测试
 001A 28E2              ldi R18,40
 001C 01E0              ldi R16,1
 001E 1CD0              xcall _LCD16xx_write_char
 0020                   .dbline 39
 0020           ;     delay_nms(5);
 0020 05E0              ldi R16,5
 0022 10E0              ldi R17,0
 0024 0E940000          xcall _delay_nms
 0028                   .dbline 40
 0028           ;     LCD16xx_write_char(1,0x0d);      //显示开
 0028 2DE0              ldi R18,13
 002A 01E0              ldi R16,1
 002C 15D0              xcall _LCD16xx_write_char
 002E                   .dbline 41
 002E           ;     LCD16xx_write_char(1,0x01);      //显示清屏
 002E 21E0              ldi R18,1
 0030 01E0              ldi R16,1
 0032 12D0              xcall _LCD16xx_write_char
 0034                   .dbline 42
 0034           ;       LCD16xx_write_char(1,0x02);
 0034 22E0              ldi R18,2
 0036 01E0              ldi R16,1
 0038 0FD0              xcall _LCD16xx_write_char
 003A                   .dbline 43
 003A           ;     LCD16xx_write_char(1,0x06);      //显示光标移动设置
 003A 26E0              ldi R18,6
 003C 01E0              ldi R16,1
 003E 0CD0              xcall _LCD16xx_write_char
 0040                   .dbline -2
 0040           L1:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbend
 0042                   .dbfunc e LCD16xx_en_write _LCD16xx_en_write fV
                        .even
 0042           _LCD16xx_en_write::
 0042                   .dbline -1
 0042                   .dbline 48
 0042           ;       
 0042           ; }
 0042           ; 
 0042           ; void LCD16xx_en_write(void)          //EN端产生一个高电平脉冲,写LCD
 0042           ; {
 0042                   .dbline 49
 0042           ;     E_H;
 0042 959A              sbi 0x12,5
 0044                   .dbline 50
 0044           ;     delay_nus(2);                    //如果晶振频率太高,则可相应提高延时
 0044 02E0              ldi R16,2
 0046 10E0              ldi R17,0
 0048 0E940000          xcall _delay_nus
 004C                   .dbline 51
 004C           ;     E_L;
 004C 9598              cbi 0x12,5
 004E                   .dbline -2
 004E           L2:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbend
 0050                   .dbfunc e LCD16xx_clr _LCD16xx_clr fV
                        .even
 0050           _LCD16xx_clr::
 0050                   .dbline -1
 0050                   .dbline 58
 0050           ; }
 0050           ; 
 0050           ; /************************************************************************/
 0050           ; /* LCD16xx清屏                                                          */
 0050           ; /************************************************************************/
 0050           ; void LCD16xx_clr(void)
 0050           ; {
 0050                   .dbline 59
 0050           ;     LCD16xx_write_char(1,0x01);
 0050 21E0              ldi R18,1
 0052 01E0              ldi R16,1
 0054 01D0              xcall _LCD16xx_write_char
 0056                   .dbline -2
 0056           L3:
 0056                   .dbline 0 ; func end
 0056 0895              ret
 0058                   .dbend
 0058                   .dbfunc e LCD16xx_write_char _LCD16xx_write_char fV
 0058           ;           data -> R20
 0058           ;        command -> R22
                        .even
 0058           _LCD16xx_write_char::
 0058 0E940000          xcall push_gset2
 005C 422F              mov R20,R18
 005E 602F              mov R22,R16
 0060                   .dbline -1
 0060                   .dbline 75
 0060           ; }
 0060           ; 
 0060           ; /*-----------------------------------------------------------------------
 0060           ; LCD16xx_write_char    : 英文字符串显示函数
 0060           ; 
 0060           ; 输入参数:*s      :英文字符串指针;
 0060           ;           X、Y    : 显示字符串的位置,X:0-15,Y:0-3
 0060           ;                     LCD第一行显示寄存器地址:0x80-0x8F
 0060           ;                     LCD第二行显示寄存器地址:0xC0-0xCF
 0060           ;                                       LCD第二行显示寄存器地址:0x90-0xCF
 0060           ;                                       LCD第二行显示寄存器地址:0xd0-0xCF
 0060           ; 编写日期          :2008年04月11日
 0060           ; 最后修改日期      :2008年04月11日
 0060           ; -----------------------------------------------------------------------*/
 0060           ; void LCD16xx_write_char(uchar command,uchar data)
 0060           ; {
 0060                   .dbline 76
 0060           ;      delay_nus(1); 
 0060 01E0              ldi R16,1
 0062 10E0              ldi R17,0
 0064 0E940000          xcall _delay_nus
 0068                   .dbline 81
 0068           ; 
 0068           ;     //LCD16xx_wait_Ready();
 0068           ;    
 0068           ; //    RW_L;                                 //RW=0
 0068           ;     if (command == 0)                       //data
 0068 6623              tst R22
 006A 11F4              brne L5
 006C                   .dbline 82
 006C           ;        RS_H;                                //RS=1
 006C 969A              sbi 0x12,6
 006E 01C0              xjmp L6
 0070           L5:
 0070                   .dbline 84
 0070           ;     else                                    //command
 0070           ;        RS_L;                                //RS=0
 0070 9698              cbi 0x12,6
 0072           L6:
 0072                   .dbline 86
 0072           ;          
 0072           ;     LCD_DATA_PORT &= data&0x00;
 0072 8BB3              in R24,0x1b
 0074 8070              andi R24,0
 0076 8BBB              out 0x1b,R24
 0078                   .dbline 87
 0078           ;     LCD_DATA_PORT |= data&0xff;            
 0078 842F              mov R24,R20
 007A 8F7F              andi R24,255
 007C 2BB2              in R2,0x1b
 007E 282A              or R2,R24
 0080 2BBA              out 0x1b,R2
 0082                   .dbline 88
 0082           ;     LCD16xx_en_write();
 0082 DFDF              xcall _LCD16xx_en_write
 0084                   .dbline 90
 0084           ;       
 0084           ;       data=data<<4;
 0084 842F              mov R24,R20
 0086 8F70              andi R24,#0x0F
 0088 8295              swap R24
 008A 482F              mov R20,R24

⌨️ 快捷键说明

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