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

📄 lcd1286418.s

📁 3D LCD for running graphical lCDs
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module lcd1286418.c
	.area text(rom, con, rel)
	.dbfile F:\CODE\LCD1286418\lcd1286418.c
	.dbfunc e LcdInit _LcdInit fV
	.even
_LcdInit::
	.dbline -1
	.dbline 62
; /***********************************************************************************************
; *  FILE NAME: lcd1286418.c
; *  PURPOSE: lcd1286418 drive Firmware
; *  DESCRIPTION: KS0108
; *  DEVELOPMENT HISTORY:
; *    Date         Author         Release                   Description Of Change
; *  --------    ------------     ---------     ------------------------------------------------
; *  08-04-11     XuGuohong         1.0                        Testing Edition    	     
; /**********************************************************************************************/
; 
; /* Include Global Parameters */
; #include <iom128v.h>
; #include "avr.h"
; 
; /* LCD PORTING ON ATMEGA128 */
; /* D0---D7 */
; #define LCDPORTDATA    PORTF
; #define LCDDDRDATA     DDRF
; #define LCDPINDATA     PINF
; /* CS1 */
; #define LCDPORTCS1     PORTE
; #define LCDDDRCS1      DDRE
; #define LCDCS1         PE2
; /* CS2 */
; #define LCDPORTCS2     PORTE
; #define LCDDDRCS2      DDRE
; #define LCDCS2         PE3
; /* RW */
; #define LCDPORTRW      PORTE
; #define LCDDDRRW       DDRE
; #define LCDRW          PE4
; /* RS */
; #define LCDPORTRS      PORTB
; #define LCDDDRRS       DDRB
; #define LCDRS          PB2
; /* E */
; #define LCDPORTEN      PORTB
; #define LCDDDREN       DDRB
; #define LCDEN          PB3
; 
; /* Include Global Parameters */
; unsigned char displaybuffer[8][128];
; 
; /* Declare Prototypes */
; void LcdInit(void);
; void LcdWrCmd(unsigned char,unsigned char);
; void LcdWrDat(unsigned char,unsigned char);
; unsigned char LcdRdSta(unsigned char);
; unsigned char LcdRdDat(unsigned char);
; unsigned char LcdBusy(void);
; void LcdClr(void);
; void LcdDisplaySeg(unsigned char,unsigned char,unsigned char);
; void LcdDisplayDot(unsigned char,unsigned char,unsigned char);
; void LcdDsiplayRefresh(void);
; void Delay1ms(void);
; 
; /*****************************************
; *  FUNCTION NAME: LcdInit
; *  DESCRIPTION:   LCD Initialization
; /*****************************************/
; void LcdInit(void)
; {
	.dbline 64
;     /* Ports Initialization */
; 	SetBit(LCDPORTCS1,LCDCS1);	
	sbi 0x3,2
	.dbline 65
; 	SetBit(LCDPORTCS2,LCDCS2);
	sbi 0x3,3
	.dbline 66
; 	ClrBit(LCDPORTEN,LCDEN);	
	cbi 0x18,3
	.dbline 67
; 	SetOutput(LCDDDRRS,LCDRS);	
	sbi 0x17,2
	.dbline 68
;     SetOutput(LCDDDRRW,LCDRW);
	sbi 0x2,4
	.dbline 69
;     SetOutput(LCDDDRCS1,LCDCS1);	
	sbi 0x2,2
	.dbline 70
; 	SetOutput(LCDDDRCS2,LCDCS2);	
	sbi 0x2,3
	.dbline 71
; 	SetOutput(LCDDDREN,LCDEN);
	sbi 0x17,3
	.dbline 72
; 	Delay1ms();
	xcall _Delay1ms
	.dbline 74
; 	/* Lcd Clear */
; 	LcdClr();
	xcall _LcdClr
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LcdWrCmd _LcdWrCmd fV
;           data -> R10
;         chiplr -> R20
	.even
_LcdWrCmd::
	st -y,R10
	st -y,R20
	mov R10,R18
	mov R20,R16
	.dbline -1
	.dbline 84
; }
; 
; /*****************************************
; *  FUNCTION NAME: LcdWrCmd
; *  DESCRIPTION:   Write Command To LCD 
; *                 chiplr = "L" or "R"
; *                 chiplr = " B "同时选中
; /*****************************************/
; void LcdWrCmd(unsigned char chiplr,unsigned char data)
; {
L3:
	.dbline 86
; 	while(LcdBusy() == 0)                   /* IF LCD BUSY,WAIT... */
;         ;
L4:
	.dbline 85
	xcall _LcdBusy
	tst R16
	breq L3
X0:
	.dbline 87
; 	ClrBit(LCDPORTRS,LCDRS);				/* RS = 0 ,COMMAND */
	cbi 0x18,2
	.dbline 88
; 	ClrBit(LCDPORTRW,LCDRW);				/* RW = 0 ,WRITE */
	cbi 0x3,4
	.dbline 89
; 	if(chiplr == 'L')						/* CS = 0 ,CHIP SELECT */
	cpi R20,76
	brne L6
X1:
	.dbline 90
; 	    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	xjmp L7
L6:
	.dbline 91
; 	else if(chiplr == 'R')
	cpi R20,82
	brne L8
X2:
	.dbline 92
; 	    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	xjmp L9
L8:
	.dbline 94
; 	else
; 	    {
	.dbline 95
; 		    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	.dbline 96
; 		    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	.dbline 97
; 		}
L9:
L7:
	.dbline 98
;     NOP;						  		   /* DELAY AT LEAS;T 140ns */
	nop
	.dbline 99
; 	NOP;
	nop
	.dbline 100
; 	SetBit(LCDPORTEN,LCDEN); 			   /* EN = 1 */
	sbi 0x18,3
	.dbline 101
; 	NOP;						  		   /* DELAY AT LEAST 450ns */
	nop
	.dbline 102
; 	NOP;
	nop
	.dbline 103
; 	NOP;
	nop
	.dbline 104
; 	NOP;
	nop
	.dbline 105
; 	NOP;
	nop
	.dbline 106
; 	LCDDDRDATA = 0XFF;                     /* WRITE DATA TO LCD */
	ldi R24,255
	sts 97,R24
	.dbline 107
; 	LCDPORTDATA = data;
	sts 98,R10
	.dbline 108
; 	ClrBit(LCDPORTEN,LCDEN); 			   /* EN = 0 */
	cbi 0x18,3
	.dbline 109
; 	NOP;                                   /* DELAY AT LEAST 10ns */
	nop
	.dbline 110
; 	SetBit(LCDPORTCS1,LCDCS1);	           /* CHIP DISABLE */		
	sbi 0x3,2
	.dbline 111
; 	SetBit(LCDPORTCS2,LCDCS2);
	sbi 0x3,3
	.dbline 112
; 	NOP;
	nop
	.dbline -2
L2:
	.dbline 0 ; func end
	ld R20,y+
	ld R10,y+
	ret
	.dbsym r data 10 c
	.dbsym r chiplr 20 c
	.dbend
	.dbfunc e LcdWrDat _LcdWrDat fV
;           data -> R10
;         chiplr -> R20
	.even
_LcdWrDat::
	st -y,R10
	st -y,R20
	mov R10,R18
	mov R20,R16
	.dbline -1
	.dbline 121
; }
; 
; /*****************************************
; *  FUNCTION NAME: LcdWrDat
; *  DESCRIPTION:   Write Data To LCD 
; *                 chiplr = "L" or "R"
; /*****************************************/
; void LcdWrDat(unsigned char chiplr,unsigned char data)
; {
L11:
	.dbline 123
;     while(LcdBusy() == 0)                   /* IF LCD BUSY,WAIT... */
; 	    ;
L12:
	.dbline 122
	xcall _LcdBusy
	tst R16
	breq L11
X3:
	.dbline 124
; 	SetBit(LCDPORTRS,LCDRS);				/* RS = 0 ,COMMAND */
	sbi 0x18,2
	.dbline 125
; 	ClrBit(LCDPORTRW,LCDRW);				/* RW = 0 ,WRITE */
	cbi 0x3,4
	.dbline 126
; 	if(chiplr == 'L')						/* CS = 0 ,CHIP SELECT */
	cpi R20,76
	brne L14
X4:
	.dbline 127
; 	    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	xjmp L15
L14:
	.dbline 128
; 	else if(chiplr == 'R')
	cpi R20,82
	brne L16
X5:
	.dbline 129
; 	    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	xjmp L17
L16:
	.dbline 131
; 	else
; 	    {
	.dbline 132
; 		    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	.dbline 133
; 		    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	.dbline 134
; 		}
L17:
L15:
	.dbline 135
;     NOP;						  		   /* DELAY AT LEAST 140ns */
	nop
	.dbline 136
; 	NOP;
	nop
	.dbline 137
; 	SetBit(LCDPORTEN,LCDEN); 			   /* EN = 1 */
	sbi 0x18,3
	.dbline 138
; 	NOP;						  		   /* DELAY AT LEAST 450ns */
	nop
	.dbline 139
; 	NOP;
	nop
	.dbline 140
; 	NOP;
	nop
	.dbline 141
; 	NOP;
	nop
	.dbline 142
; 	NOP;
	nop
	.dbline 143
; 	LCDDDRDATA = 0XFF;                     /* WRITE DATA TO LCD */
	ldi R24,255
	sts 97,R24
	.dbline 144
; 	LCDPORTDATA = data;
	sts 98,R10
	.dbline 145
; 	ClrBit(LCDPORTEN,LCDEN); 			   /* EN = 0 */
	cbi 0x18,3
	.dbline 146
; 	NOP;                                   /* DELAY AT LEAST 10ns */
	nop
	.dbline 147
; 	SetBit(LCDPORTCS1,LCDCS1);	           /* CHIP DISABLE */		
	sbi 0x3,2
	.dbline 148
; 	SetBit(LCDPORTCS2,LCDCS2);
	sbi 0x3,3
	.dbline 149
; 	NOP;
	nop
	.dbline -2
L10:
	.dbline 0 ; func end
	ld R20,y+
	ld R10,y+
	ret
	.dbsym r data 10 c
	.dbsym r chiplr 20 c
	.dbend
	.dbfunc e LcdRdSta _LcdRdSta fc
;           temp -> R10
;         chiplr -> R16
	.even
_LcdRdSta::
	st -y,R10
	.dbline -1
	.dbline 157
; }
; 
; /*****************************************
; *  FUNCTION NAME: LcdRdSta
; *  DESCRIPTION:   Read Status From LCD
; /*****************************************/
; unsigned char LcdRdSta(unsigned char chiplr)
; {
	.dbline 159
;     unsigned char temp;
; 	ClrBit(LCDPORTRS,LCDRS);				/* RS = 0 ,COMMAND */
	cbi 0x18,2
	.dbline 160
; 	SetBit(LCDPORTRW,LCDRW);				/* RW = 1 ,READ */
	sbi 0x3,4
	.dbline 161
; 	if(chiplr == 'L')						/* CS = 0 ,CHIP SELECT */
	cpi R16,76
	brne L19
X6:
	.dbline 162
; 	    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	xjmp L20
L19:
	.dbline 163
; 	else if(chiplr == 'R')
	cpi R16,82
	brne L21
X7:
	.dbline 164
; 	    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	xjmp L22
L21:
	.dbline 166
; 	else
; 	    {
	.dbline 167
; 		    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	.dbline 168
; 		    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	.dbline 169
; 		}
L22:
L20:
	.dbline 170
;     NOP;						  		   /* DELAY AT LEAS;T 140ns */
	nop
	.dbline 171
; 	NOP;
	nop
	.dbline 172
; 	SetBit(LCDPORTEN,LCDEN); 			   /* EN = 1 */
	sbi 0x18,3
	.dbline 173
; 	NOP;						  		   /* DELAY AT LEAST 450ns */
	nop
	.dbline 174
; 	NOP;
	nop
	.dbline 175
; 	NOP;
	nop
	.dbline 176
; 	NOP;
	nop
	.dbline 177
; 	NOP;
	nop
	.dbline 178
; 	LCDDDRDATA = 0X00;                     /* READ DATA FROM LCD */
	clr R2
	sts 97,R2
	.dbline 179
; 	temp = LCDPINDATA;
	in R10,0x0
	.dbline 180
; 	ClrBit(LCDPORTEN,LCDEN); 			   /* EN = 0 */
	cbi 0x18,3
	.dbline 181
; 	NOP;                                   /* DELAY AT LEAST 10ns */
	nop
	.dbline 182
; 	SetBit(LCDPORTCS1,LCDCS1);	           /* CHIP DISABLE */		
	sbi 0x3,2
	.dbline 183
; 	SetBit(LCDPORTCS2,LCDCS2);
	sbi 0x3,3
	.dbline 184
; 	NOP;
	nop
	.dbline 185
; 	return temp;    
	mov R16,R10
	.dbline -2
L18:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r temp 10 c
	.dbsym r chiplr 16 c
	.dbend
	.dbfunc e LcdRdDat _LcdRdDat fc
;           temp -> R10
;         chiplr -> R20
	.even
_LcdRdDat::
	st -y,R10
	st -y,R20
	mov R20,R16
	.dbline -1
	.dbline 193
; }
; 
; /*****************************************
; *  FUNCTION NAME: LcdRdDat
; *  DESCRIPTION:   Read Data From LCD 
; /*****************************************/
; unsigned char LcdRdDat(unsigned char chiplr)
; {
L24:
	.dbline 196
;     unsigned char temp;
; 	while(LcdBusy() == 0)                   /* IF LCD BUSY,WAIT... */
; 	    ;
L25:
	.dbline 195
	xcall _LcdBusy
	tst R16
	breq L24
X8:
	.dbline 197
; 	SetBit(LCDPORTRS,LCDRS);				/* RS = 1 ,DATA */
	sbi 0x18,2
	.dbline 198
; 	SetBit(LCDPORTRW,LCDRW);				/* RW = 1 ,READ */
	sbi 0x3,4
	.dbline 199
; 	if(chiplr == 'L')						/* CS = 0 ,CHIP SELECT */
	cpi R20,76
	brne L27
X9:
	.dbline 200
; 	    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	xjmp L28
L27:
	.dbline 201
; 	else if(chiplr == 'R')
	cpi R20,82
	brne L29
X10:
	.dbline 202
; 	    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	xjmp L30
L29:
	.dbline 204
; 	else
; 	    {
	.dbline 205
; 		    ClrBit(LCDPORTCS1,LCDCS1);
	cbi 0x3,2
	.dbline 206
; 		    ClrBit(LCDPORTCS2,LCDCS2);
	cbi 0x3,3
	.dbline 207
; 		}
L30:
L28:
	.dbline 208
;     NOP;						  		   /* DELAY AT LEAS;T 140ns */
	nop
	.dbline 209
; 	NOP;
	nop
	.dbline 210
; 	SetBit(LCDPORTEN,LCDEN); 			   /* EN = 1 */
	sbi 0x18,3
	.dbline 211
; 	NOP;						  		   /* DELAY AT LEAST 450ns */
	nop
	.dbline 212
; 	NOP;
	nop
	.dbline 213
; 	NOP;
	nop
	.dbline 214
; 	NOP;
	nop
	.dbline 215
; 	NOP;
	nop
	.dbline 216
; 	LCDDDRDATA = 0X00;                     /* READ DATA FROM LCD */
	clr R2
	sts 97,R2
	.dbline 217
; 	temp = LCDPINDATA;
	in R10,0x0
	.dbline 218
; 	ClrBit(LCDPORTEN,LCDEN); 			   /* EN = 0 */
	cbi 0x18,3
	.dbline 219
; 	NOP;                                   /* DELAY AT LEAST 10ns */
	nop
	.dbline 220
; 	SetBit(LCDPORTCS1,LCDCS1);	           /* CHIP DISABLE */		
	sbi 0x3,2
	.dbline 221
; 	SetBit(LCDPORTCS2,LCDCS2);
	sbi 0x3,3
	.dbline 222
; 	NOP;
	nop
	.dbline 223
; 	return temp;    
	mov R16,R10
	.dbline -2
L23:
	.dbline 0 ; func end
	ld R20,y+
	ld R10,y+
	ret
	.dbsym r temp 10 c
	.dbsym r chiplr 20 c
	.dbend
	.dbfunc e LcdBusy _LcdBusy fc
;          temp2 -> R20
;          temp1 -> R22
	.even
_LcdBusy::
	st -y,R20
	st -y,R22
	.dbline -1
	.dbline 233
; }
; 
; /*****************************************
; *  FUNCTION NAME: LcdBusy
; *  DESCRIPTION:   LCD BUSY OR NOT
; *                 BUSY-RETURN 0
; *                 NOT BUSY-RETURN 1
; /*****************************************/
; unsigned char LcdBusy(void)
; {
	.dbline 235
;     unsigned char temp1,temp2;
; 	temp1 = LcdRdSta('L'); 				   /* READ LCD STA. */
	ldi R16,76
	xcall _LcdRdSta
	mov R22,R16
	.dbline 236
; 	temp1 = temp1&0X80;
	andi R22,128
	.dbline 237
; 	temp2 = LcdRdSta('R');
	ldi R16,82
	xcall _LcdRdSta
	mov R20,R16
	.dbline 238
; 	temp2 = temp2&0X80;
	andi R20,128
	.dbline 239
; 	if(temp1|temp2)
	mov R2,R22
	or R2,R20
	breq L32
X11:
	.dbline 240
; 	    return 0;
	clr R16

⌨️ 快捷键说明

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