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

📄 lcd.lis

📁 AVR单片机C语言程序设计实例精粹
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module LCD.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\字符型LCD显示应用设计\LCD.c
 0000                   .dbfunc e Set_RS _Set_RS fV
 0000           ;             RS -> R16
                        .even
 0000           _Set_RS::
 0000                   .dbline -1
 0000                   .dbline 37
 0000           ; //******************************************************************************
 0000           ; // File Name : LCD.c
 0000           ; // Author    : Steaven
 0000           ; // Created   : 2008-07-27
 0000           ; // Modified  : 
 0000           ; // Revision  : V0.0
 0000           ; //******************************************************************************
 0000           ; 
 0000           ; //PIN DESCRIPTION
 0000           ; //01  2   3  4   5   6   7   8   9   10  11  12  13  14  15  16
 0000           ; //GND VCC V0 RS  RW  EN  D0  D1  D2  D3  D4  D5  D6  D7  BLA BLK
 0000           ; //GND +5V V0 PB0 PB1 PB2 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 GND +5V
 0000           ; 
 0000           ; #include "iom16v.h" 
 0000           ; #include "DataType.h"
 0000           ; #include "LCD.h"
 0000           ; #include "macros.h" 
 0000           ; 
 0000           ; //local functions declaration
 0000           ; void Set_RS(INT8U RS);
 0000           ; void Set_RW(INT8U RW);
 0000           ; void Set_EN(INT8U EN);
 0000           ; void Set_Data(INT8U data);
 0000           ; void LCD_Write_Command(INT8U command,INT8U status);
 0000           ; void LCD_Write_Data(INT8U data,INT8U status);
 0000           ; void Delay_ms(INT8U time);
 0000           ; INT8U LCD_Read_BF(void);
 0000           ; INT8U LCD_Read_Data(INT8U status);
 0000           ; 
 0000           ; //******************************************************************************
 0000           ; // Function    : Set_RS
 0000           ; // Input       : RS - RS Control Line Level
 0000           ; // Output      : none
 0000           ; // Description : LCD(1602) Low Level Interface Function
 0000           ; //******************************************************************************
 0000           ; void Set_RS(INT8U RS)
 0000           ; {
 0000                   .dbline 38
 0000           ;       if(RS == 0)
 0000 0023              tst R16
 0002 11F4              brne L2
 0004                   .dbline 39
 0004           ;       {
 0004                   .dbline 40
 0004           ;               PORTB &= ~0x01;
 0004 C098              cbi 0x18,0
 0006                   .dbline 41
 0006           ;       }
 0006 01C0              xjmp L3
 0008           L2:
 0008                   .dbline 43
 0008                   .dbline 44
 0008 C09A              sbi 0x18,0
 000A                   .dbline 45
 000A           L3:
 000A                   .dbline -2
 000A                   .dbline 46
 000A           ;       else
 000A           ;       {
 000A           ;               PORTB |= 0x01;
 000A           ;       }
 000A           ; }
 000A           L1:
 000A                   .dbline 0 ; func end
 000A 0895              ret
 000C                   .dbsym r RS 16 c
 000C                   .dbend
 000C                   .dbfunc e Set_RW _Set_RW fV
 000C           ;             RW -> R16
                        .even
 000C           _Set_RW::
 000C                   .dbline -1
 000C                   .dbline 55
 000C           ; 
 000C           ; //******************************************************************************
 000C           ; // Function    : Set_RW
 000C           ; // Input       : RW - RW Control Line Level
 000C           ; // Output      : none
 000C           ; // Description : Low Level Interface Function
 000C           ; //******************************************************************************
 000C           ; void Set_RW(INT8U RW)
 000C           ; {
 000C                   .dbline 56
 000C           ;       if(RW == 0)
 000C 0023              tst R16
 000E 11F4              brne L5
 0010                   .dbline 57
 0010           ;       {
 0010                   .dbline 58
 0010           ;               PORTB &= ~0x02;
 0010 C198              cbi 0x18,1
 0012                   .dbline 59
 0012           ;       }
 0012 01C0              xjmp L6
 0014           L5:
 0014                   .dbline 61
 0014                   .dbline 62
 0014 C19A              sbi 0x18,1
 0016                   .dbline 63
 0016           L6:
 0016                   .dbline -2
 0016                   .dbline 64
 0016           ;       else
 0016           ;       {
 0016           ;               PORTB |= 0x02;
 0016           ;       }
 0016           ; }
 0016           L4:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbsym r RW 16 c
 0018                   .dbend
 0018                   .dbfunc e Set_EN _Set_EN fV
 0018           ;             EN -> R16
                        .even
 0018           _Set_EN::
 0018                   .dbline -1
 0018                   .dbline 73
 0018           ; 
 0018           ; //******************************************************************************
 0018           ; // Function    : Set_EN
 0018           ; // Input       : RW - RW Control Line Level
 0018           ; // Output      : none
 0018           ; // Description : Low Level Interface Function
 0018           ; //******************************************************************************
 0018           ; void Set_EN(INT8U EN)
 0018           ; {
 0018                   .dbline 74
 0018           ;       if(EN == 0)
 0018 0023              tst R16
 001A 11F4              brne L8
 001C                   .dbline 75
 001C           ;       {
 001C                   .dbline 76
 001C           ;               PORTB &= ~0x04;
 001C C298              cbi 0x18,2
 001E                   .dbline 77
 001E           ;       }
 001E 01C0              xjmp L9
 0020           L8:
 0020                   .dbline 79
 0020                   .dbline 80
 0020 C29A              sbi 0x18,2
 0022                   .dbline 81
 0022           L9:
 0022                   .dbline -2
 0022                   .dbline 82
 0022           ;       else
 0022           ;       {
 0022           ;               PORTB |= 0x04;
 0022           ;       }
 0022           ; }
 0022           L7:
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbsym r EN 16 c
 0024                   .dbend
 0024                   .dbfunc e Set_Data _Set_Data fV
 0024           ;           data -> R16
                        .even
 0024           _Set_Data::
 0024                   .dbline -1
 0024                   .dbline 91
 0024           ; 
 0024           ; //******************************************************************************
 0024           ; // Function    : Set_RW
 0024           ; // Input       : data - Data Line Level
 0024           ; // Output      : none
 0024           ; // Description : Low Level Interface Function
 0024           ; //******************************************************************************
 0024           ; void Set_Data(INT8U data)
 0024           ; {
 0024                   .dbline 92
 0024           ;       PORTA  = data;
 0024 0BBB              out 0x1b,R16
 0026                   .dbline -2
 0026                   .dbline 93
 0026           ; }
 0026           L10:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r data 16 c
 0028                   .dbend
 0028                   .dbfunc e LCD_Read_BF _LCD_Read_BF fc
 0028           ;         status -> R20
                        .even
 0028           _LCD_Read_BF::
 0028 0E940000          xcall push_gset1
 002C                   .dbline -1
 002C                   .dbline 102
 002C           ; 
 002C           ; //******************************************************************************
 002C           ; // Function    : LCD_Read_BF
 002C           ; // Input       : none
 002C           ; // Output      : 0 = LCD Controller is Free,0x80 = LCD Busy
 002C           ; // Description : Read LCD Controller Status
 002C           ; //******************************************************************************
 002C           ; INT8U LCD_Read_BF(void)
 002C           ; {
 002C                   .dbline 104
 002C           ;       INT8U status;
 002C           ;       DDRA = 0x00;
 002C 2224              clr R2
 002E 2ABA              out 0x1a,R2
 0030                   .dbline 105
 0030           ;       Set_EN(0);
 0030 0027              clr R16
 0032 F2DF              xcall _Set_EN
 0034                   .dbline 106
 0034           ;       Set_RS(0);
 0034 0027              clr R16
 0036 E4DF              xcall _Set_RS
 0038                   .dbline 107
 0038           ;       Set_RW(1);
 0038 01E0              ldi R16,1
 003A E8DF              xcall _Set_RW
 003C                   .dbline 108
 003C           ;       Set_EN(1);
 003C 01E0              ldi R16,1
 003E ECDF              xcall _Set_EN
 0040                   .dbline 109
 0040           ;       NOP();
 0040 0000              nop
 0042                   .dbline 110
 0042           ;       status = PINA;
 0042 49B3              in R20,0x19
 0044                   .dbline 111
 0044           ;       Set_EN(0);
 0044 0027              clr R16
 0046 E8DF              xcall _Set_EN
 0048                   .dbline 112
 0048           ;       DDRA = 0xFF;
 0048 8FEF              ldi R24,255
 004A 8ABB              out 0x1a,R24
 004C                   .dbline 113
 004C           ;       return(status & 0x80);
 004C 042F              mov R16,R20
 004E 0078              andi R16,128
 0050                   .dbline -2
 0050           L11:
 0050 0E940000          xcall pop_gset1
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbsym r status 20 c
 0056                   .dbend
 0056                   .dbfunc e LCD_Write_Command _LCD_Write_Command fV
 0056           ;         status -> R22
 0056           ;        command -> R20
                        .even
 0056           _LCD_Write_Command::
 0056 0E940000          xcall push_gset2
 005A 622F              mov R22,R18
 005C 402F              mov R20,R16
 005E                   .dbline -1
 005E                   .dbline 124
 005E           ; }
 005E           ; 
 005E           ; //******************************************************************************
 005E           ; // Function    : LCD_Write_Command
 005E           ; // Input       : command - Command to be written to LCD
 005E           ; //               status  - Detect LCD Status when 1 

⌨️ 快捷键说明

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