📄 lcd4bit.lis
字号:
.module LCD4BIT.C
.area text(rom, con, rel)
0000 .dbfile D:\我的文档\mingkang\LCDCN\LCD4BIT.C
0000 .dbfunc s waste_lcd _waste_lcd fI
.even
0000 _waste_lcd::
0000 .dbline -1
0000 .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)
; {
0000 .dbline -2
0000 .dbline 56
; }
0000 L1:
0000 .dbline 0 ; func end
0000 0895 ret
0002 .dbfunc s delay_1ms _delay_1ms fI
; i -> R16,R17
.even
0002 _delay_1ms::
0002 .dbline -1
0002 .dbline 59
;
; void delay_1ms(void)
; {
0002 .dbline 61
0002 01E0 ldi R16,1
0004 10E0 ldi R17,0
0006 02C0 xjmp L6
0008 L3:
0008 .dbline 61
0008 L4:
0008 .dbline 61
0008 0F5F subi R16,255 ; offset = 1
000A 1F4F sbci R17,255
000C L6:
000C .dbline 61
; unsigned int i;
; for(i=1;i<(unsigned int)(xtal*143-2);i++);
000C 0637 cpi R16,118
000E E4E0 ldi R30,4
0010 1E07 cpc R17,R30
0012 D0F3 brlo L3
0014 .dbline -2
0014 .dbline 62
; }
0014 L2:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbsym r i 16 i
0016 .dbfunc s waitms _waitms fI
; i -> R10,R11
; n -> R12,R13
.even
0016 _waitms::
0016 0E940000 xcall push_gset4x
001A 6801 movw R12,R16
001C .dbline -1
001C .dbline 65
;
; void waitms(unsigned int n)
; {
001C .dbline 66
; unsigned int i=0;
001C AA24 clr R10
001E BB24 clr R11
0020 04C0 xjmp L9
0022 L8:
0022 .dbline 68
0022 .dbline 69
0022 EFDF xcall _delay_1ms
0024 .dbline 70
0024 C501 movw R24,R10
0026 0196 adiw R24,1
0028 5C01 movw R10,R24
002A .dbline 71
002A L9:
002A .dbline 67
; while(i<n)
002A AC14 cp R10,R12
002C BD04 cpc R11,R13
002E C8F3 brlo L8
0030 .dbline -2
0030 .dbline 72
; {
; delay_1ms();
; i++;
; }
; }
0030 L7:
0030 0E940000 xcall pop_gset4x
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 10 i
0036 .dbsym r n 12 i
0036 .dbfunc s LCD4_WR4bits _LCD4_WR4bits fI
; c -> R10
.even
0036 _LCD4_WR4bits::
0036 0E940000 xcall push_gset3x
003A A02E mov R10,R16
003C .dbline -1
003C .dbline 75
;
; void LCD4_WR4bits(unsigned char c)
; {
003C .dbline 76
; c &= 0x0F;//屏蔽高四位
003C 8A2D mov R24,R10
003E 8F70 andi R24,15
0040 A82E mov R10,R24
0042 .dbline 77
; c = c << 4;//移入高四位
0042 8F70 andi R24,#0x0F
0044 8295 swap R24
0046 A82E mov R10,R24
0048 .dbline 78
; LCD_E_SET;
0048 2E9A sbi 0x5,6
004A .dbline 79
; WASTE;
004A DADF xcall _waste_lcd
004C .dbline 80
; PORTB &= 0x0F;
004C 85B1 in R24,0x5
004E 8F70 andi R24,15
0050 85B9 out 0x5,R24
0052 .dbline 81
; PORTB |= c;
0052 25B0 in R2,0x5
0054 2A28 or R2,R10
0056 25B8 out 0x5,R2
0058 .dbline 82
; WASTE;
0058 D3DF xcall _waste_lcd
005A .dbline 83
; LCD_E_CLR;
005A 2E98 cbi 0x5,6
005C .dbline 84
; WASTE;
005C D1DF xcall _waste_lcd
005E .dbline -2
005E .dbline 85
; }
005E L11:
005E 0E940000 xcall pop_gset3x
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbsym r c 10 c
0064 .dbfunc s LCD4_Init _LCD4_Init fI
.even
0064 _LCD4_Init::
0064 .dbline -1
0064 .dbline 88
;
; void LCD4_Init(void)
; {
0064 .dbline 89
; waitms(15); // Wait on power up 15mS
0064 0FE0 ldi R16,15
0066 10E0 ldi R17,0
0068 D6DF xcall _waitms
006A .dbline 90
; LCD_RS_CLR;
006A 2F98 cbi 0x5,7
006C .dbline 91
006C 00E0 ldi R16,<L17
006E 10E0 ldi R17,>L17
0070 0E940000 xcall lpm32
0074 10930100 sts _del+1,R17
0078 00930000 sts _del,R16
007C 30930300 sts _del+2+1,R19
0080 20930200 sts _del+2,R18
0084 L13:
0084 .dbline 91
0084 L14:
0084 .dbline 91
; DELAY;
0084 00E0 ldi R16,<L18
0086 10E0 ldi R17,>L18
0088 0E940000 xcall lpm32
008C 50900300 lds R5,_del+2+1
0090 40900200 lds R4,_del+2
0094 30900100 lds R3,_del+1
0098 20900000 lds R2,_del
009C 200E add R2,R16
009E 311E adc R3,R17
00A0 421E adc R4,R18
00A2 531E adc R5,R19
00A4 30920100 sts _del+1,R3
00A8 20920000 sts _del,R2
00AC 50920300 sts _del+2+1,R5
00B0 40920200 sts _del+2,R4
00B4 .dbline 91
00B4 00E0 ldi R16,<L19
00B6 10E0 ldi R17,>L19
00B8 0E940000 xcall lpm32
00BC 50900300 lds R5,_del+2+1
00C0 40900200 lds R4,_del+2
00C4 30900100 lds R3,_del+1
00C8 20900000 lds R2,_del
00CC 2016 cp R2,R16
00CE 3106 cpc R3,R17
00D0 4206 cpc R4,R18
00D2 5306 cpc R5,R19
00D4 BCF2 brlt L13
00D6 .dbline 93
;
; LCD4_WR4bits( 0x03); // Function Set 8bit
00D6 03E0 ldi R16,3
00D8 AEDF xcall _LCD4_WR4bits
00DA .dbline 94
; waitms(5);
00DA 05E0 ldi R16,5
00DC 10E0 ldi R17,0
00DE 9BDF xcall _waitms
00E0 .dbline 96
;
; LCD4_WR4bits( 0x03); // Function Set 8bit
00E0 03E0 ldi R16,3
00E2 A9DF xcall _LCD4_WR4bits
00E4 .dbline 97
; waitms(5);
00E4 05E0 ldi R16,5
00E6 10E0 ldi R17,0
00E8 96DF xcall _waitms
00EA .dbline 99
;
; LCD4_WR4bits( 0x03); // Function Set 8bit
00EA 03E0 ldi R16,3
00EC A4DF xcall _LCD4_WR4bits
00EE .dbline 100
; waitms(5);
00EE 05E0 ldi R16,5
00F0 10E0 ldi R17,0
00F2 91DF xcall _waitms
00F4 .dbline 102
;
; LCD4_WR4bits( 0x02); // Function Set 4bit
00F4 02E0 ldi R16,2
00F6 9FDF xcall _LCD4_WR4bits
00F8 .dbline 103
; waitms(5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -