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

📄 lcd12232.s

📁 用ICC-AVR编译器编译M16单片机适用的LCD12232液晶屏驱动程序.
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module LCD12232.C
	.area data(ram, con, rel)
_b1::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e b1 _b1 c
_pianyi::
	.blkb 1
	.area idata
	.byte 65
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e pianyi _pianyi c
_sz0::
	.blkb 1
	.area idata
	.byte 65
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e sz0 _sz0 c
_sz1::
	.blkb 1
	.area idata
	.byte 65
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e sz1 _sz1 c
_sz2::
	.blkb 1
	.area idata
	.byte 65
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e sz2 _sz2 c
_sz3::
	.blkb 1
	.area idata
	.byte 65
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e sz3 _sz3 c
_sz4::
	.blkb 1
	.area idata
	.byte 65
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e sz4 _sz4 c
_sz5::
	.blkb 1
	.area idata
	.byte 65
	.area data(ram, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbsym e sz5 _sz5 c
	.area text(rom, con, rel)
	.dbfile F:\新建文件夹\LCD12232APP\LCD12232.C
	.dbfunc e wcodel _wcodel fV
;         status -> R22
;              c -> R20
	.even
_wcodel::
	xcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 30
; //-----------------------------------------------------------------------------
; //-----------------------------------------------------------------------------
; //					    LCD12232 Library for AVR 
; //								  V0.1c
; // 	  							 zhongwh
; //							Copyright 2003-2005 
; //   					   Email: hfkj01@163.com
; //						    2005-6-19 15:38:52
; //			    Compiled with Imagecraft C Compiler for the AVR series
; //-----------------------------------------------------------------------------
; //-----------------------------------------------------------------------------
; #include <iom16v.h>
; #define prepage 0xB8
; #define precol 0X00
; #define	E1_H  PORTD|=BIT(PD4);
; #define	E1_L  PORTD&=~BIT(PD4);
; #define	A0_H  PORTD|=BIT(PD7);
; #define	A0_L  PORTD&=~BIT(PD7);
; #define	LCD_READ  PORTD|=BIT(PD6);
; #define	LCD_WRITE PORTD&=~BIT(PD6);
; #define	E2_H  PORTD|=BIT(PD5);
; #define	E2_L  PORTD&=~BIT(PD5);
; #define	LCD_PCT		DDRC		   
; #define	LCD_IN		PINC
; #define	LCD_DATA	PORTC
; #define uchar unsigned char
; uchar	b1=0,pianyi=0x41,sz0=0x41,sz1=0x41,sz2=0x41,sz3=0x41,sz4=0x41,sz5=0x41;
; const char chartable[35][32];
; void wcodel (uchar c)
; {	 uchar status;
	xjmp L3
L2:
	.dbline 32
;  	 
; 	 while(1){
	.dbline 33
; 	          LCD_PCT=0X00;
	clr R2
	out 0x14,R2
	.dbline 34
; 			  E1_H 
	ldi R16,4
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 35
; 			  A0_L
	ldi R16,7
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 36
; 			  LCD_READ
	ldi R16,6
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 37
; 			  E1_L
	ldi R16,4
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 38
; 			  status=LCD_IN;
	in R22,0x13
	.dbline 39
; 			  status=status&0x80;
	andi R22,128
	.dbline 40
; 			if (status==0) break;
	brne L5
	.dbline 40
	xjmp L4
L5:
	.dbline 41
L3:
	.dbline 32
	xjmp L2
L4:
	.dbline 42
; 			}
; 	LCD_PCT=0XFF;
	ldi R24,255
	out 0x14,R24
	.dbline 43
; 	E1_H 
	ldi R16,4
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 44
; 	LCD_WRITE
	ldi R16,6
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 45
; 	LCD_DATA=c;
	out 0x15,R20
	.dbline 46
;     E1_L
	ldi R16,4
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline -2
	.dbline 48
; 	
; }
L1:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r status 22 c
	.dbsym r c 20 c
	.dbend
	.dbfunc e wdatal _wdatal fV
;         status -> R22
;              d -> R20
	.even
_wdatal::
	xcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 50
; void wdatal (uchar d)
; {	 uchar status;
	xjmp L9
L8:
	.dbline 52
;  	 
; 	  while(1){   
	.dbline 53
; 	 		  LCD_PCT=0X00;
	clr R2
	out 0x14,R2
	.dbline 54
; 			  E1_H
	ldi R16,4
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 55
; 			  A0_L
	ldi R16,7
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 56
; 			  LCD_READ
	ldi R16,6
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 57
; 			  E1_L
	ldi R16,4
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 58
; 			  status=LCD_IN;
	in R22,0x13
	.dbline 59
; 			  status=status&0x80;
	andi R22,128
	.dbline 60
; 			if (status==0) break;
	brne L11
	.dbline 60
	xjmp L10
L11:
	.dbline 61
L9:
	.dbline 52
	xjmp L8
L10:
	.dbline 62
; 			} 
; 	LCD_PCT=0XFF;	
	ldi R24,255
	out 0x14,R24
	.dbline 63
; 	E1_H		
	ldi R16,4
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 64
; 	A0_H
	ldi R16,7
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 65
; 	LCD_WRITE
	ldi R16,6
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 66
; 	LCD_DATA=d;
	out 0x15,R20
	.dbline 67
;     E1_L
	ldi R16,4
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline -2
	.dbline 69
; 	
; }		
L7:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r status 22 c
	.dbsym r d 20 c
	.dbend
	.dbfunc e wcoder _wcoder fV
;         status -> R22
;              c -> R20
	.even
_wcoder::
	xcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 71
; void wcoder (uchar c)
; {	 uchar status;
	xjmp L15
L14:
	.dbline 73
;  	 
; 	 while(1){
	.dbline 74
; 	 		  LCD_PCT=0X00;
	clr R2
	out 0x14,R2
	.dbline 75
; 	   		  E2_H
	ldi R16,5
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 76
; 	 		  A0_L
	ldi R16,7
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 77
; 			  LCD_READ
	ldi R16,6
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 78
; 		      E2_L
	ldi R16,5
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 79
; 			  status=LCD_IN;
	in R22,0x13
	.dbline 80
; 			  status=status&0x80;
	andi R22,128
	.dbline 81
; 			  if (status==0) 
	brne L17
	.dbline 82
; 			   	{ break;}
	.dbline 82
	xjmp L16
L17:
	.dbline 83
L15:
	.dbline 73
	xjmp L14
L16:
	.dbline 84
; 			}
; 	LCD_PCT=0XFF;
	ldi R24,255
	out 0x14,R24
	.dbline 85
; 	E2_H
	ldi R16,5
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 86
; 	LCD_WRITE		
	ldi R16,6
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 87
; 	LCD_DATA=c;
	out 0x15,R20
	.dbline 88
; 	E2_L
	ldi R16,5
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline -2
	.dbline 90
; 	
; }			
L13:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r status 22 c
	.dbsym r c 20 c
	.dbend
	.dbfunc e wdatar _wdatar fV
;         status -> R22
;              d -> R20
	.even
_wdatar::
	xcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 92
; void wdatar (uchar d)
; {	 uchar status;
	xjmp L21
L20:
	.dbline 94
;  	 
; 	 while(1){ LCD_PCT=0X00;
	.dbline 94
	clr R2
	out 0x14,R2
	.dbline 95
; 	 		  E2_H
	ldi R16,5
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 96
; 	 		  A0_L
	ldi R16,7
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 97
; 			  LCD_READ
	ldi R16,6
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 98
; 		      E2_L
	ldi R16,5
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 99
; 			  status=LCD_IN;
	in R22,0x13
	.dbline 100
; 			  status=status&0x80;
	andi R22,128
	.dbline 101
; 			if (status==0) break;
	brne L23
	.dbline 101
	xjmp L22
L23:
	.dbline 102
L21:
	.dbline 94
	xjmp L20
L22:
	.dbline 103
; 			}	
; 	LCD_PCT=0XFF;
	ldi R24,255
	out 0x14,R24
	.dbline 104
; 	E2_H
	ldi R16,5
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 105
; 	A0_H
	ldi R16,7
	ldi R17,0
	xcall _BIT
	in R2,0x12
	clr R3
	or R2,R16
	or R3,R17
	out 0x12,R2
	.dbline 106
; 	LCD_WRITE
	ldi R16,6
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline 107
; 	LCD_DATA=d;
	out 0x15,R20
	.dbline 108
;     E2_L
	ldi R16,5
	ldi R17,0
	xcall _BIT
	movw R2,R16
	com R2
	com R3
	in R4,0x12
	clr R5
	and R4,R2
	and R5,R3
	out 0x12,R4
	.dbline -2
	.dbline 110
; 	
; }		
L19:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r status 22 c
	.dbsym r d 20 c
	.dbend
	.dbfunc e clear _clear fV
;           page -> R20
;            col -> R22
;         symbol -> R10
	.even
_clear::
	xcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 114
; 
; 
; void clear(uchar symbol)
; {
	.dbline 115
; uchar page=0x00;
	clr R20
	.dbline 116
; uchar col=0x00;
	clr R22
	.dbline 117
; 	 for (page=0x00;page<0x04;page++)
	xjmp L29
L26:
	.dbline 118
; 	 {
	.dbline 120
; 	 
; 	  	 wcodel(prepage+page);
	mov R16,R20
	subi R16,72    ; addi 184
	xcall _wcodel
	.dbline 122
; 		 
; 		 for (col=0x00;col<0x61;col++)
	clr R22
	xjmp L33
L30:
	.dbline 123
	.dbline 124
	mov R16,R22
	xcall _wcodel
	.dbline 125
	mov R16,R10
	xcall _wdatal
	.dbline 126
L31:
	.dbline 122
	inc R22
L33:
	.dbline 122
	cpi R22,97
	brlo L30
	.dbline 127
L27:
	.dbline 117
	inc R20
L29:
	.dbline 117
	cpi R20,4
	brlo L26
	.dbline 128
; 		 	 {
; 			 wcodel(precol+col);
; 			 wdatal(symbol);
; 			 }
; 	}
; 	for (page=0x00;page<0x04;page++)
	clr R20
	xjmp L37
L34:
	.dbline 129
; 	{
	.dbline 130
; 	 	wcoder(prepage+page);
	mov R16,R20
	subi R16,72    ; addi 184
	xcall _wcoder
	.dbline 132
; 		
; 		for (col=0x00;col<0x61;col++)
	clr R22
	xjmp L41
L38:
	.dbline 133
	.dbline 134
	mov R16,R22
	xcall _wcoder
	.dbline 135
	mov R16,R10
	xcall _wdatar
	.dbline 136
L39:
	.dbline 132
	inc R22
L41:
	.dbline 132
	cpi R22,97
	brlo L38
	.dbline 137
L35:
	.dbline 128
	inc R20
L37:
	.dbline 128
	cpi R20,4
	brlo L34
	.dbline -2
	.dbline 138
; 		{
; 		 	wcoder(precol+col);
; 			wdatar(symbol);
; 		}
; 	}
; }
L25:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r page 20 c
	.dbsym r col 22 c
	.dbsym r symbol 10 c
	.dbend
	.dbfunc e addressl _addressl fV
;            col -> R20
;           page -> R22
	.even
_addressl::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 141
; //
; void addressl(uchar page,uchar col)
; {
	.dbline 142
;  	 wcodel(prepage+page);
	mov R16,R22
	subi R16,72    ; addi 184
	xcall _wcodel
	.dbline 143
; 	 wcodel(precol+col);
	mov R16,R20
	xcall _wcodel
	.dbline -2
	.dbline 144
; }
L42:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r col 20 c
	.dbsym r page 22 c
	.dbend
	.dbfunc e addressr _addressr fV
;            col -> R20
;           page -> R22
	.even
_addressr::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 147
; //
; void addressr(uchar page,uchar col)
; {	 
	.dbline 148
;  	 wcoder(prepage+page);
	mov R16,R22
	subi R16,72    ; addi 184
	xcall _wcoder
	.dbline 149
; 	 wcoder(precol+col+3);
	mov R16,R20
	subi R16,253    ; addi 3
	xcall _wcoder
	.dbline -2
	.dbline 150
; }	
L43:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r col 20 c
	.dbsym r page 22 c
	.dbend
	.dbfunc e lcdinit _lcdinit fV
	.even
_lcdinit::
	.dbline -1
	.dbline 153
; // 	 
; void lcdinit(void)
; {	 PORTC=0XFF;
	.dbline 153
	ldi R24,255
	out 0x15,R24
	.dbline 154
; 	 DDRC=0X00;
	clr R2
	out 0x14,R2
	.dbline 155
; 	 DDRD=0XFF;
	out 0x11,R24
	.dbline 156
; 	 DDRA|=BIT(PA7);
	ldi R16,7
	ldi R17,0
	xcall _BIT
	in R2,0x1a
	clr R3
	or R2,R16
	or R3,R17
	out 0x1a,R2
	.dbline 157
; 	 PORTA|=BIT(PA7);
	ldi R16,7
	ldi R17,0
	xcall _BIT
	in R2,0x1b
	clr R3
	or R2,R16
	or R3,R17
	out 0x1b,R2
	.dbline 158
; 	 wcodel(0xe2);wcoder(0xe2);//reset
	ldi R16,226
	xcall _wcodel
	.dbline 158
	ldi R16,226
	xcall _wcoder
	.dbline 159
; 	 wcodel(0xae);wcoder(0xae);//display off	
	ldi R16,174
	xcall _wcodel
	.dbline 159
	ldi R16,174
	xcall _wcoder
	.dbline 160
; 	 wcodel(0xA4);wcoder(0xA4);//display off 
	ldi R16,164
	xcall _wcodel
	.dbline 160
	ldi R16,164
	xcall _wcoder
	.dbline 161
; 	 wcodel(0xa9);wcoder(0xa9);//duty select :1/32
	ldi R16,169
	xcall _wcodel
	.dbline 161
	ldi R16,169
	xcall _wcoder
	.dbline 162
; 	 wcodel(0xa0);wcoder(0xa0);//clock
	ldi R16,160

⌨️ 快捷键说明

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