📄 lcd.lis
字号:
.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 + -