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

📄 lcd_back.lis

📁 AVR单片机C语言程序设计实例精粹
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module LCD_back.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\点阵型LCD显示应用设计\LCD_back.c
 0000                   .dbfunc e Delay_ms _Delay_ms fV
 0000           ;           time -> R20,R21
                        .even
 0000           _Delay_ms::
 0000 0E940000          xcall push_gset1
 0004 A801              movw R20,R16
 0006                   .dbline -1
 0006                   .dbline 61
 0006           ; //******************************************************************************
 0006           ; // File Name : LCD.c
 0006           ; // Author    : Steaven
 0006           ; // Created   : 2008-07-27
 0006           ; // Modified  : 
 0006           ; // Revision  : V0.0
 0006           ; //******************************************************************************
 0006           ; 
 0006           ; //PIN DESCRIPTION
 0006           ; //01  2   3  4   5   6   7   8   9   10  11  12  13  14  15  16
 0006           ; //GND VCC V0 RS  RW  EN  D0  D1  D2  D3  D4  D5  D6  D7  BLA BLK
 0006           ; //GND +5V V0 PB0 PB1 PB2 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 GND +5V
 0006           ; 
 0006           ; #include "iom16v.h" 
 0006           ; #include "DataType.h"
 0006           ; #include "LCD.h"
 0006           ; #include "macros.h" 
 0006           ; 
 0006           ; #define cLCD_X_MAX   64
 0006           ; #define cLCD_Y_MAX  128
 0006           ; 
 0006           ; //local functions declaration
 0006           ; void Set_DI(INT8U RS);
 0006           ; void Set_RW(INT8U RW);
 0006           ; void Set_EN(INT8U EN);
 0006           ; void Set_CS1(INT8U CS1);
 0006           ; void Set_CS2(INT8U CS2);
 0006           ; void Set_RST(INT8U RST);
 0006           ; void Set_Data(INT8U data);
 0006           ; INT8U Get_Data(void);
 0006           ; void DisplayOnOff(INT8U i);
 0006           ; void SetStartLine(INT8U i);
 0006           ; void LCD_Command_Set_X(INT8U x);
 0006           ; void LCD_Command_Set_Y(INT8U y);
 0006           ; void LCD_Command_WriteByte(INT8U data);
 0006           ; INT8U Read_Byte(void);
 0006           ; void LCD_Reset(void);
 0006           ; void LCD_Clear_Line(INT8U wStartLine,INT8U wEndLine);
 0006           ; void LCD_Init(void);
 0006           ; void WriteWord(INT8U const *disp,INT8U x,INT8U y);
 0006           ; void WriteCharacter(const INT8U *disp,INT8U x,INT8U y,INT8U cs);
 0006           ; void WritePIC(const INT8U *disp);
 0006           ; void LCD_Write_Char(INT8U y,INT8U x,const INT8U *pdata);
 0006           ; void LCD_Write_Dot(INT8U x,INT8U y);
 0006           ; INT8U LCD_Read_Data(INT8U x,INT8U y);
 0006           ; void LCD_Write_Data(INT8U x,INT8U y,INT8U data);      
 0006           ; void LCD_Write_Picture(INT8U x1,INT8U y1,INT8U x2,INT8U y2,const INT8U *pdata);
 0006           ; 
 0006           ; /*
 0006           ; void nop(INT8U cnt)
 0006           ; {
 0006           ;       while(cnt--) ;
 0006           ; }
 0006           ; 
 0006           ; void Delay(INT8U cnt)
 0006           ; {
 0006           ;       while(cnt--) ;
 0006           ; }
 0006           ; */
 0006           ; void Delay_ms(INT16U time)
 0006           ; {
 0006                   .dbline 62
 0006           ;     for(;time!=0;time--)
 0006 06C0              xjmp L5
 0008           L2:
 0008                   .dbline 63
 0008                   .dbline 64
 0008 04EF              ldi R16,500
 000A 11E0              ldi R17,1
 000C 0E940000          xcall _Delay
 0010                   .dbline 65
 0010           L3:
 0010                   .dbline 62
 0010 4150              subi R20,1
 0012 5040              sbci R21,0
 0014           L5:
 0014                   .dbline 62
 0014 4030              cpi R20,0
 0016 4507              cpc R20,R21
 0018 B9F7              brne L2
 001A           X0:
 001A                   .dbline -2
 001A                   .dbline 66
 001A           ;               {
 001A           ;                   Delay(500);
 001A           ;               }
 001A           ; }
 001A           L1:
 001A 0E940000          xcall pop_gset1
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbsym r time 20 i
 0020                   .dbend
 0020                   .dbfunc e Set_DI _Set_DI fV
 0020           ;             RS -> R16
                        .even
 0020           _Set_DI::
 0020                   .dbline -1
 0020                   .dbline 79
 0020           ; 
 0020           ; 
 0020           ; #define nop(X) {;}
 0020           ; #define Delay(X) {;}
 0020           ; 
 0020           ; //******************************************************************************
 0020           ; // Function    : Set_RS
 0020           ; // Input       : RS - RS Control Line Level
 0020           ; // Output      : none
 0020           ; // Description : LCD(1602) Low Level Interface Function
 0020           ; //******************************************************************************
 0020           ; void Set_DI(INT8U RS)
 0020           ; {
 0020                   .dbline 80
 0020           ;       if(RS == 0)
 0020 0023              tst R16
 0022 11F4              brne L7
 0024                   .dbline 81
 0024           ;       {
 0024                   .dbline 82
 0024           ;               PORTB &= ~0x01;
 0024 C098              cbi 0x18,0
 0026                   .dbline 83
 0026           ;       }
 0026 01C0              xjmp L8
 0028           L7:
 0028                   .dbline 85
 0028                   .dbline 86
 0028 C09A              sbi 0x18,0
 002A                   .dbline 87
 002A           L8:
 002A                   .dbline -2
 002A                   .dbline 88
 002A           ;       else
 002A           ;       {
 002A           ;               PORTB |= 0x01;
 002A           ;       }
 002A           ; }
 002A           L6:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r RS 16 c
 002C                   .dbend
 002C                   .dbfunc e Set_RW _Set_RW fV
 002C           ;             RW -> R16
                        .even
 002C           _Set_RW::
 002C                   .dbline -1
 002C                   .dbline 97
 002C           ; 
 002C           ; //******************************************************************************
 002C           ; // Function    : Set_RW
 002C           ; // Input       : RW - RW Control Line Level
 002C           ; // Output      : none
 002C           ; // Description : Low Level Interface Function
 002C           ; //******************************************************************************
 002C           ; void Set_RW(INT8U RW)
 002C           ; {
 002C                   .dbline 98
 002C           ;       if(RW == 0)
 002C 0023              tst R16
 002E 11F4              brne L10
 0030                   .dbline 99
 0030           ;       {
 0030                   .dbline 100
 0030           ;               PORTB &= ~0x02;
 0030 C198              cbi 0x18,1
 0032                   .dbline 101
 0032           ;       }
 0032 01C0              xjmp L11
 0034           L10:
 0034                   .dbline 103
 0034                   .dbline 104
 0034 C19A              sbi 0x18,1
 0036                   .dbline 105
 0036           L11:
 0036                   .dbline -2
 0036                   .dbline 106
 0036           ;       else
 0036           ;       {
 0036           ;               PORTB |= 0x02;
 0036           ;       }
 0036           ; }
 0036           L9:
 0036                   .dbline 0 ; func end
 0036 0895              ret
 0038                   .dbsym r RW 16 c
 0038                   .dbend
 0038                   .dbfunc e Set_EN _Set_EN fV
 0038           ;             EN -> R16
                        .even
 0038           _Set_EN::
 0038                   .dbline -1
 0038                   .dbline 115
 0038           ; 
 0038           ; //******************************************************************************
 0038           ; // Function    : Set_EN
 0038           ; // Input       : RW - RW Control Line Level
 0038           ; // Output      : none
 0038           ; // Description : Low Level Interface Function
 0038           ; //******************************************************************************
 0038           ; void Set_EN(INT8U EN)
 0038           ; {
 0038                   .dbline 116
 0038           ;       if(EN == 0)
 0038 0023              tst R16
 003A 11F4              brne L13
 003C                   .dbline 117
 003C           ;       {
 003C                   .dbline 118
 003C           ;               PORTB &= ~0x04;
 003C C298              cbi 0x18,2
 003E                   .dbline 119
 003E           ;       }
 003E 01C0              xjmp L14
 0040           L13:
 0040                   .dbline 121
 0040                   .dbline 122
 0040 C29A              sbi 0x18,2
 0042                   .dbline 123
 0042           L14:
 0042                   .dbline -2
 0042                   .dbline 124
 0042           ;       else
 0042           ;       {
 0042           ;               PORTB |= 0x04;
 0042           ;       }
 0042           ; }
 0042           L12:
 0042                   .dbline 0 ; func end
 0042 0895              ret
 0044                   .dbsym r EN 16 c
 0044                   .dbend
 0044                   .dbfunc e Set_CS2 _Set_CS2 fV
 0044           ;            CS2 -> R16
                        .even
 0044           _Set_CS2::
 0044                   .dbline -1
 0044                   .dbline 133
 0044           ; 
 0044           ; //******************************************************************************
 0044           ; // Function    : Set_CS2
 0044           ; // Input       : CS2 - CS2 Control Line Level
 0044           ; // Output      : none
 0044           ; // Description : Low Level Interface Function
 0044           ; //******************************************************************************
 0044           ; void Set_CS2(INT8U CS2)
 0044           ; {
 0044                   .dbline 134
 0044           ;       if(CS2 == 0) 
 0044 0023              tst R16
 0046 11F4              brne L16
 0048                   .dbline 135
 0048           ;       {
 0048                   .dbline 136
 0048           ;               PORTC &= ~0x20;
 0048 AD98              cbi 0x15,5
 004A                   .dbline 137
 004A           ;       }
 004A 01C0              xjmp L17
 004C           L16:
 004C                   .dbline 139
 004C                   .dbline 140
 004C AD9A              sbi 0x15,5
 004E                   .dbline 141
 004E           L17:
 004E                   .dbline -2
 004E                   .dbline 142
 004E           ;       else
 004E           ;       {
 004E           ;               PORTC |= 0x20;
 004E           ;       }
 004E           ; }
 004E           L15:
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbsym r CS2 16 c
 0050                   .dbend
 0050                   .dbfunc e Set_CS1 _Set_CS1 fV
 0050           ;            CS1 -> R16
                        .even
 0050           _Set_CS1::
 0050                   .dbline -1
 0050                   .dbline 151
 0050           ; 
 0050           ; //******************************************************************************
 0050           ; // Function    : Set_CS1
 0050           ; // Input       : CS1 - CS1 Control Line Level
 0050           ; // Output      : none
 0050           ; // Description : Low Level Interface Function
 0050           ; //******************************************************************************
 0050           ; void Set_CS1(INT8U CS1)
 0050           ; {
 0050                   .dbline 152
 0050           ;       if(CS1 == 0)
 0050 0023              tst R16
 0052 11F4              brne L19
 0054                   .dbline 153
 0054           ;       {
 0054                   .dbline 154
 0054           ;               PORTC &= ~0x40;
 0054 AE98              cbi 0x15,6
 0056                   .dbline 155
 0056           ;       }
 0056 01C0              xjmp L20
 0058           L19:
 0058                   .dbline 157
 0058                   .dbline 158
 0058 AE9A              sbi 0x15,6
 005A                   .dbline 159
 005A           L20:
 005A                   .dbline -2
 005A                   .dbline 160
 005A           ;       else
 005A           ;       {
 005A           ;               PORTC |= 0x40;
 005A           ;       }
 005A           ; }
 005A           L18:
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbsym r CS1 16 c
 005C                   .dbend
 005C                   .dbfunc e Set_RST _Set_RST fV
 005C           ;            RST -> R16
                        .even
 005C           _Set_RST::
 005C                   .dbline -1
 005C                   .dbline 165
 005C           ; 
 005C           ; 
 005C           ; //sbit RST=PC7;
 005C           ; void Set_RST(INT8U RST)
 005C           ; {
 005C                   .dbline 166
 005C           ;       if(RST == 0)
 005C 0023              tst R16
 005E 11F4              brne L22
 0060                   .dbline 167
 0060           ;       {
 0060                   .dbline 168
 0060           ;               PORTC &= ~0x80;
 0060 AF98              cbi 0x15,7
 0062                   .dbline 169
 0062           ;       }
 0062 01C0              xjmp L23
 0064           L22:
 0064                   .dbline 171
 0064                   .dbline 172
 0064 AF9A              sbi 0x15,7
 0066                   .dbline 173
 0066           L23:
 0066                   .dbline -2
 0066                   .dbline 174
 0066           ;       else
 0066           ;       {
 0066           ;               PORTC |= 0x80;
 0066           ;       }
 0066           ; }
 0066           L21:
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r RST 16 c

⌨️ 快捷键说明

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