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

📄 lcd4bit.s

📁 C语言开发使LCD显示汉字程序,采用自带汉字库的LCD模块.
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -