📄 lcd4bit.s
字号:
.module LCD4BIT.C
.area text(rom, con, rel)
.dbfile D:\我的文档\mingkang\LCDCN\LCD4BIT.C
.dbfunc s waste_lcd _waste_lcd fI
.even
_waste_lcd::
.dbline -1
.dbline 55
; /*
; ** File: LCD4BITS.C
; **
; ** Purpose: LCD Routines for 4 bit I/O (D4->D7+E+RS)
; ** D4-D7 is connected on PORTB4-7
; ** E is connected on PORTB3
; ** RS is connected on PORTB2
; **
; ** Chip: ATMega48
; **
; ** Version: 1.0.0, 23:rd of May 2003
; **
; ** Author: Lars Wictorsson
; ** LAWICEL / SWEDEN
; ** http://www.lawicel.com lars@lawicel.com
; **
; ** Copyright: The copyright to the computer program(s) herein is the
; ** property of LAWICEL HB, Sweden. The program(s) may be used
; ** and/or copied only with the written permission of LAWICEL HB
; ** in accordance with the terms and conditions stipulated in
; ** the agreement/contract under which the program(s) have been
; ** supplied.
; **
; ** Remarks: This program is tested with ICCAVR version 6.27A.
; **
; ** History: 2003-05-23 1.0.0 Created (LWI)
; */
; void LCD4_Init(void);
; void LCD4_Clear(void);
; void LCD4_Home(void);
; void LCD4_Home2(void);
; void LCD4_PutC(unsigned char);
; void LCD4_PutC_Const(const unsigned char);
; void LCD4_PutS(unsigned char *);
;
; #include <iom48v.h>
; #include <macros.h>
;
; //void waitMS(unsigned long);
;
; #define WASTE waste_lcd()
;
; #define LCD_E_SET PORTB |= 0x40 //PORTB.3-LCD ENABLE
; #define LCD_E_CLR PORTB &= ~0x40 //PORTB.3-LCD DISABLE
; #define LCD_RS_SET PORTB |= 0x80 //PORTB.2-DISPLAY DATA
; #define LCD_RS_CLR PORTB &= ~0x80 //PORTB.2-INSTRCTION
; //** E is connected on PORTB3
; //** RS is connected on PORTB2
; #define xtal 8
; #define DELAY for (del = 0; del < 16; del++)
;
; long del;
;
; void waste_lcd(void)
; {
.dbline -2
.dbline 56
; }
L1:
.dbline 0 ; func end
ret
.dbfunc s delay_1ms _delay_1ms fI
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 59
;
; void delay_1ms(void)
; {
.dbline 61
ldi R16,1
ldi R17,0
xjmp L6
L3:
.dbline 61
L4:
.dbline 61
subi R16,255 ; offset = 1
sbci R17,255
L6:
.dbline 61
; unsigned int i;
; for(i=1;i<(unsigned int)(xtal*143-2);i++);
cpi R16,118
ldi R30,4
cpc R17,R30
brlo L3
.dbline -2
.dbline 62
; }
L2:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbfunc s waitms _waitms fI
; i -> R10,R11
; n -> R12,R13
.even
_waitms::
xcall push_gset4x
movw R12,R16
.dbline -1
.dbline 65
;
; void waitms(unsigned int n)
; {
.dbline 66
; unsigned int i=0;
clr R10
clr R11
xjmp L9
L8:
.dbline 68
.dbline 69
xcall _delay_1ms
.dbline 70
movw R24,R10
adiw R24,1
movw R10,R24
.dbline 71
L9:
.dbline 67
; while(i<n)
cp R10,R12
cpc R11,R13
brlo L8
.dbline -2
.dbline 72
; {
; delay_1ms();
; i++;
; }
; }
L7:
xcall pop_gset4x
.dbline 0 ; func end
ret
.dbsym r i 10 i
.dbsym r n 12 i
.dbfunc s LCD4_WR4bits _LCD4_WR4bits fI
; c -> R10
.even
_LCD4_WR4bits::
xcall push_gset3x
mov R10,R16
.dbline -1
.dbline 75
;
; void LCD4_WR4bits(unsigned char c)
; {
.dbline 76
; c &= 0x0F;//屏蔽高四位
mov R24,R10
andi R24,15
mov R10,R24
.dbline 77
; c = c << 4;//移入高四位
andi R24,#0x0F
swap R24
mov R10,R24
.dbline 78
; LCD_E_SET;
sbi 0x5,6
.dbline 79
; WASTE;
xcall _waste_lcd
.dbline 80
; PORTB &= 0x0F;
in R24,0x5
andi R24,15
out 0x5,R24
.dbline 81
; PORTB |= c;
in R2,0x5
or R2,R10
out 0x5,R2
.dbline 82
; WASTE;
xcall _waste_lcd
.dbline 83
; LCD_E_CLR;
cbi 0x5,6
.dbline 84
; WASTE;
xcall _waste_lcd
.dbline -2
.dbline 85
; }
L11:
xcall pop_gset3x
.dbline 0 ; func end
ret
.dbsym r c 10 c
.dbfunc s LCD4_Init _LCD4_Init fI
.even
_LCD4_Init::
.dbline -1
.dbline 88
;
; void LCD4_Init(void)
; {
.dbline 89
; waitms(15); // Wait on power up 15mS
ldi R16,15
ldi R17,0
xcall _waitms
.dbline 90
; LCD_RS_CLR;
cbi 0x5,7
.dbline 91
ldi R16,<L17
ldi R17,>L17
xcall lpm32
sts _del+1,R17
sts _del,R16
sts _del+2+1,R19
sts _del+2,R18
L13:
.dbline 91
L14:
.dbline 91
; DELAY;
ldi R16,<L18
ldi R17,>L18
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _del+1,R3
sts _del,R2
sts _del+2+1,R5
sts _del+2,R4
.dbline 91
ldi R16,<L19
ldi R17,>L19
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlt L13
.dbline 93
;
; LCD4_WR4bits( 0x03); // Function Set 8bit
ldi R16,3
xcall _LCD4_WR4bits
.dbline 94
; waitms(5);
ldi R16,5
ldi R17,0
xcall _waitms
.dbline 96
;
; LCD4_WR4bits( 0x03); // Function Set 8bit
ldi R16,3
xcall _LCD4_WR4bits
.dbline 97
; waitms(5);
ldi R16,5
ldi R17,0
xcall _waitms
.dbline 99
;
; LCD4_WR4bits( 0x03); // Function Set 8bit
ldi R16,3
xcall _LCD4_WR4bits
.dbline 100
; waitms(5);
ldi R16,5
ldi R17,0
xcall _waitms
.dbline 102
;
; LCD4_WR4bits( 0x02); // Function Set 4bit
ldi R16,2
xcall _LCD4_WR4bits
.dbline 103
; waitms(5);
ldi R16,5
ldi R17,0
xcall _waitms
.dbline 105
;
; LCD4_WR4bits( 0x02); // Function Set
ldi R16,2
xcall _LCD4_WR4bits
.dbline 106
; LCD4_WR4bits( 0x08);
ldi R16,8
xcall _LCD4_WR4bits
.dbline 107
ldi R16,<L17
ldi R17,>L17
xcall lpm32
sts _del+1,R17
sts _del,R16
sts _del+2+1,R19
sts _del+2,R18
L20:
.dbline 107
L21:
.dbline 107
; DELAY;
ldi R16,<L18
ldi R17,>L18
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _del+1,R3
sts _del,R2
sts _del+2+1,R5
sts _del+2,R4
.dbline 107
ldi R16,<L19
ldi R17,>L19
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlt L20
.dbline 109
;
; LCD4_WR4bits( 0x00); // Display ON/OFF
clr R16
xcall _LCD4_WR4bits
.dbline 110
; LCD4_WR4bits( 0x0C); // Display ON, Curson OFF, Blink OFF
ldi R16,12
xcall _LCD4_WR4bits
.dbline 111
ldi R16,<L17
ldi R17,>L17
xcall lpm32
sts _del+1,R17
sts _del,R16
sts _del+2+1,R19
sts _del+2,R18
L24:
.dbline 111
L25:
.dbline 111
; DELAY;
ldi R16,<L18
ldi R17,>L18
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _del+1,R3
sts _del,R2
sts _del+2+1,R5
sts _del+2,R4
.dbline 111
ldi R16,<L19
ldi R17,>L19
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlt L24
.dbline 113
;
; LCD4_WR4bits( 0x00); // Entry mode
clr R16
xcall _LCD4_WR4bits
.dbline 114
; LCD4_WR4bits( 0x06);
ldi R16,6
xcall _LCD4_WR4bits
.dbline 115
ldi R16,<L17
ldi R17,>L17
xcall lpm32
sts _del+1,R17
sts _del,R16
sts _del+2+1,R19
sts _del+2,R18
L28:
.dbline 115
L29:
.dbline 115
; DELAY;
ldi R16,<L18
ldi R17,>L18
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _del+1,R3
sts _del,R2
sts _del+2+1,R5
sts _del+2,R4
.dbline 115
ldi R16,<L19
ldi R17,>L19
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlt L28
.dbline 117
;
; LCD_RS_SET;
sbi 0x5,7
.dbline 118
; waitms(5);
ldi R16,5
ldi R17,0
xcall _waitms
.dbline -2
.dbline 119
; }
L12:
.dbline 0 ; func end
ret
.dbfunc s LCD4_Clear _LCD4_Clear fI
.even
_LCD4_Clear::
.dbline -1
.dbline 122
;
; void LCD4_Clear(void)
; {
.dbline 123
; LCD_RS_CLR;
cbi 0x5,7
.dbline 124
ldi R16,<L17
ldi R17,>L17
xcall lpm32
sts _del+1,R17
sts _del,R16
sts _del+2+1,R19
sts _del+2,R18
L33:
.dbline 124
L34:
.dbline 124
; DELAY;
ldi R16,<L18
ldi R17,>L18
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _del+1,R3
sts _del,R2
sts _del+2+1,R5
sts _del+2,R4
.dbline 124
ldi R16,<L19
ldi R17,>L19
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlt L33
.dbline 125
; LCD4_WR4bits( 0x00); // Clear Display
clr R16
xcall _LCD4_WR4bits
.dbline 126
; LCD4_WR4bits( 0x01);
ldi R16,1
xcall _LCD4_WR4bits
.dbline 127
ldi R16,<L17
ldi R17,>L17
xcall lpm32
sts _del+1,R17
sts _del,R16
sts _del+2+1,R19
sts _del+2,R18
L37:
.dbline 127
L38:
.dbline 127
; DELAY;
ldi R16,<L18
ldi R17,>L18
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _del+1,R3
sts _del,R2
sts _del+2+1,R5
sts _del+2,R4
.dbline 127
ldi R16,<L19
ldi R17,>L19
xcall lpm32
lds R5,_del+2+1
lds R4,_del+2
lds R3,_del+1
lds R2,_del
cp R2,R16
cpc R3,R17
cpc R4,R18
cpc R5,R19
brlt L37
.dbline 128
; LCD_RS_SET;
sbi 0x5,7
.dbline 129
; waitms(5);
ldi R16,5
ldi R17,0
xcall _waitms
.dbline -2
.dbline 130
; }
L32:
.dbline 0 ; func end
ret
.dbfunc s LCD4_Home _LCD4_Home fI
.even
_LCD4_Home::
.dbline -1
.dbline 133
;
; void LCD4_Home(void)
; {
.dbline 134
; LCD_RS_CLR;
cbi 0x5,7
.dbline 135
ldi R16,<L17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -