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

📄 23.lst

📁 用ICC-AVR编译器编译M16单片机适用的LCD12232液晶屏驱动程序.
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    0267 E5CF      LDI	R28,0x5F
    0268 E0D4      LDI	R29,4
    0269 BFCD      OUT	0x3D,R28
    026A BFDE      OUT	0x3E,R29
    026B 51C0      SUBI	R28,0x10
    026C 40D0      SBCI	R29,0
    026D EA0A      LDI	R16,0xAA
    026E 8308      STD	Y+0,R16
    026F 2400      CLR	R0
    0270 E7E9      LDI	R30,0x79
    0271 E0F0      LDI	R31,0
    0272 E010      LDI	R17,0
    0273 37E9      CPI	R30,0x79
    0274 07F1      CPC	R31,R17
    0275 F011      BEQ	0x0278
    0276 9201      ST	R0,Z+
    0277 CFFB      RJMP	0x0273
    0278 8300      STD	Z+0,R16
    0279 EBE4      LDI	R30,0xB4
    027A E0F4      LDI	R31,4
    027B E6A0      LDI	R26,0x60
    027C E0B0      LDI	R27,0
    027D E014      LDI	R17,4
    027E 3CED      CPI	R30,0xCD
    027F 07F1      CPC	R31,R17
    0280 F021      BEQ	0x0285
    0281 95C8      LPM
    0282 9631      ADIW	R30,1
    0283 920D      ST	R0,X+
    0284 CFF9      RJMP	0x027E
    0285 940E0582  CALL	_main
_exit:
    0287 CFFF      RJMP	_exit
_wcodel:
  status               --> R20
  c                    --> R16
    0288 940E05A3  CALL	push_gset1
FILE: F:\新建文件夹\LCD12232APP\LCD12232.C
(0001) //-----------------------------------------------------------------------------
(0002) //-----------------------------------------------------------------------------
(0003) //					    LCD12232 Library for AVR 
(0004) //								  V0.1c
(0005) // 	  							 zhongwh
(0006) //							Copyright 2003-2005 
(0007) //   					   Email: hfkj01@163.com
(0008) //						    2005-6-19 15:38:52
(0009) //			    Compiled with Imagecraft C Compiler for the AVR series
(0010) //-----------------------------------------------------------------------------
(0011) //-----------------------------------------------------------------------------
(0012) #include <iom16v.h>
(0013) #define prepage 0xB8
(0014) #define precol 0X00
(0015) #define	E1_H  PORTD|=BIT(PD4);
(0016) #define	E1_L  PORTD&=~BIT(PD4);
(0017) #define	A0_H  PORTD|=BIT(PD7);
(0018) #define	A0_L  PORTD&=~BIT(PD7);
(0019) #define	LCD_READ  PORTD|=BIT(PD6);
(0020) #define	LCD_WRITE PORTD&=~BIT(PD6);
(0021) #define	E2_H  PORTD|=BIT(PD5);
(0022) #define	E2_L  PORTD&=~BIT(PD5);
(0023) #define	LCD_PCT		DDRC		   
(0024) #define	LCD_IN		PINC
(0025) #define	LCD_DATA	PORTC
(0026) #define uchar unsigned char
(0027) uchar	b1=0,pianyi=0x41,sz0=0x41,sz1=0x41,sz2=0x41,sz3=0x41,sz4=0x41,sz5=0x41;
(0028) const char chartable[35][32];
(0029) void wcodel (uchar c)
(0030) {	 uchar status;
    028A C00A      RJMP	0x0295
(0031)  	 
(0032) 	 while(1){
(0033) 	          LCD_PCT=0X00;
    028B 2422      CLR	R2
    028C BA24      OUT	0x14,R2
(0034) 			  E1_H 
    028D 9A94      SBI	0x12,4
(0035) 			  A0_L
    028E 9897      CBI	0x12,7
(0036) 			  LCD_READ
    028F 9A96      SBI	0x12,6
(0037) 			  E1_L
    0290 9894      CBI	0x12,4
(0038) 			  status=LCD_IN;
    0291 B343      IN	R20,0x13
(0039) 			  status=status&0x80;
    0292 7840      ANDI	R20,0x80
(0040) 			if (status==0) break;
    0293 F409      BNE	0x0295
    0294 C001      RJMP	0x0296
    0295 CFF5      RJMP	0x028B
(0041) 			}
(0042) 	LCD_PCT=0XFF;
    0296 EF8F      LDI	R24,0xFF
    0297 BB84      OUT	0x14,R24
(0043) 	E1_H 
    0298 9A94      SBI	0x12,4
(0044) 	LCD_WRITE
    0299 9896      CBI	0x12,6
(0045) 	LCD_DATA=c;
    029A BB05      OUT	0x15,R16
(0046)     E1_L
    029B 9894      CBI	0x12,4
(0047) 	
(0048) }
    029C 940E05A6  CALL	pop_gset1
    029E 9508      RET
_wdatal:
  status               --> R20
  d                    --> R16
    029F 940E05A3  CALL	push_gset1
(0049) void wdatal (uchar d)
(0050) {	 uchar status;
    02A1 C00A      RJMP	0x02AC
(0051)  	 
(0052) 	  while(1){   
(0053) 	 		  LCD_PCT=0X00;
    02A2 2422      CLR	R2
    02A3 BA24      OUT	0x14,R2
(0054) 			  E1_H
    02A4 9A94      SBI	0x12,4
(0055) 			  A0_L
    02A5 9897      CBI	0x12,7
(0056) 			  LCD_READ
    02A6 9A96      SBI	0x12,6
(0057) 			  E1_L
    02A7 9894      CBI	0x12,4
(0058) 			  status=LCD_IN;
    02A8 B343      IN	R20,0x13
(0059) 			  status=status&0x80;
    02A9 7840      ANDI	R20,0x80
(0060) 			if (status==0) break;
    02AA F409      BNE	0x02AC
    02AB C001      RJMP	0x02AD
    02AC CFF5      RJMP	0x02A2
(0061) 			} 
(0062) 	LCD_PCT=0XFF;	
    02AD EF8F      LDI	R24,0xFF
    02AE BB84      OUT	0x14,R24
(0063) 	E1_H		
    02AF 9A94      SBI	0x12,4
(0064) 	A0_H
    02B0 9A97      SBI	0x12,7
(0065) 	LCD_WRITE
    02B1 9896      CBI	0x12,6
(0066) 	LCD_DATA=d;
    02B2 BB05      OUT	0x15,R16
(0067)     E1_L
    02B3 9894      CBI	0x12,4
(0068) 	
(0069) }		
    02B4 940E05A6  CALL	pop_gset1
    02B6 9508      RET
_wcoder:
  status               --> R20
  c                    --> R16
    02B7 940E05A3  CALL	push_gset1
(0070) void wcoder (uchar c)
(0071) {	 uchar status;
    02B9 C00A      RJMP	0x02C4
(0072)  	 
(0073) 	 while(1){
(0074) 	 		  LCD_PCT=0X00;
    02BA 2422      CLR	R2
    02BB BA24      OUT	0x14,R2
(0075) 	   		  E2_H
    02BC 9A95      SBI	0x12,5
(0076) 	 		  A0_L
    02BD 9897      CBI	0x12,7
(0077) 			  LCD_READ
    02BE 9A96      SBI	0x12,6
(0078) 		      E2_L
    02BF 9895      CBI	0x12,5
(0079) 			  status=LCD_IN;
    02C0 B343      IN	R20,0x13
(0080) 			  status=status&0x80;
    02C1 7840      ANDI	R20,0x80
(0081) 			  if (status==0) 
    02C2 F409      BNE	0x02C4
(0082) 			   	{ break;}
    02C3 C001      RJMP	0x02C5
    02C4 CFF5      RJMP	0x02BA
(0083) 			}
(0084) 	LCD_PCT=0XFF;
    02C5 EF8F      LDI	R24,0xFF
    02C6 BB84      OUT	0x14,R24
(0085) 	E2_H
    02C7 9A95      SBI	0x12,5
(0086) 	LCD_WRITE		
    02C8 9896      CBI	0x12,6
(0087) 	LCD_DATA=c;
    02C9 BB05      OUT	0x15,R16
(0088) 	E2_L
    02CA 9895      CBI	0x12,5
(0089) 	
(0090) }			
    02CB 940E05A6  CALL	pop_gset1
    02CD 9508      RET
_wdatar:
  status               --> R20
  d                    --> R16
    02CE 940E05A3  CALL	push_gset1
(0091) void wdatar (uchar d)
(0092) {	 uchar status;
    02D0 C00A      RJMP	0x02DB
(0093)  	 
(0094) 	 while(1){ LCD_PCT=0X00;
    02D1 2422      CLR	R2
    02D2 BA24      OUT	0x14,R2
(0095) 	 		  E2_H
    02D3 9A95      SBI	0x12,5
(0096) 	 		  A0_L
    02D4 9897      CBI	0x12,7
(0097) 			  LCD_READ
    02D5 9A96      SBI	0x12,6
(0098) 		      E2_L
    02D6 9895      CBI	0x12,5
(0099) 			  status=LCD_IN;
    02D7 B343      IN	R20,0x13
(0100) 			  status=status&0x80;
    02D8 7840      ANDI	R20,0x80
(0101) 			if (status==0) break;
    02D9 F409      BNE	0x02DB
    02DA C001      RJMP	0x02DC
    02DB CFF5      RJMP	0x02D1
(0102) 			}	
(0103) 	LCD_PCT=0XFF;
    02DC EF8F      LDI	R24,0xFF
    02DD BB84      OUT	0x14,R24
(0104) 	E2_H
    02DE 9A95      SBI	0x12,5
(0105) 	A0_H
    02DF 9A97      SBI	0x12,7
(0106) 	LCD_WRITE
    02E0 9896      CBI	0x12,6
(0107) 	LCD_DATA=d;
    02E1 BB05      OUT	0x15,R16
(0108)     E2_L
    02E2 9895      CBI	0x12,5
(0109) 	
(0110) }		
    02E3 940E05A6  CALL	pop_gset1
    02E5 9508      RET
_clear:
  page                 --> R20
  col                  --> R22
  symbol               --> R10
    02E6 940E05BE  CALL	push_gset3
    02E8 2EA0      MOV	R10,R16
(0111) 
(0112) 
(0113) void clear(uchar symbol)
(0114) {
(0115) uchar page=0x00;
    02E9 2744      CLR	R20
(0116) uchar col=0x00;
    02EA 2766      CLR	R22
(0117) 	 for (page=0x00;page<0x04;page++)
    02EB C00D      RJMP	0x02F9
(0118) 	 {
(0119) 	 
(0120) 	  	 wcodel(prepage+page);
    02EC 2F04      MOV	R16,R20
    02ED 5408      SUBI	R16,0x48
    02EE DF99      RCALL	_wcodel
(0121) 		 
(0122) 		 for (col=0x00;col<0x61;col++)
    02EF 2766      CLR	R22
    02F0 C005      RJMP	0x02F6
(0123) 		 	 {
(0124) 			 wcodel(precol+col);
    02F1 2F06      MOV	R16,R22
    02F2 DF95      RCALL	_wcodel
(0125) 			 wdatal(symbol);
    02F3 2D0A      MOV	R16,R10
    02F4 DFAA      RCALL	_wdatal
    02F5 9563      INC	R22
    02F6 3661      CPI	R22,0x61
    02F7 F3C8      BCS	0x02F1
    02F8 9543      INC	R20
    02F9 3044      CPI	R20,4
    02FA F388      BCS	0x02EC
(0126) 			 }
(0127) 	}
(0128) 	for (page=0x00;page<0x04;page++)
    02FB 2744      CLR	R20
    02FC C00D      RJMP	0x030A
(0129) 	{
(0130) 	 	wcoder(prepage+page);
    02FD 2F04      MOV	R16,R20
    02FE 5408      SUBI	R16,0x48
    02FF DFB7      RCALL	_wcoder
(0131) 		
(0132) 		for (col=0x00;col<0x61;col++)
    0300 2766      CLR	R22
    0301 C005      RJMP	0x0307
(0133) 		{
(0134) 		 	wcoder(precol+col);
    0302 2F06      MOV	R16,R22
    0303 DFB3      RCALL	_wcoder
(0135) 			wdatar(symbol);
    0304 2D0A      MOV	R16,R10
    0305 DFC8      RCALL	_wdatar
    0306 9563      INC	R22
    0307 3661      CPI	R22,0x61
    0308 F3C8      BCS	0x0302
    0309 9543      INC	R20
    030A 3044      CPI	R20,4
    030B F388      BCS	0x02FD
(0136) 		}
(0137) 	}
(0138) }
    030C 940E059D  CALL	pop_gset3
    030E 9508      RET
_addressl:
  col                  --> R20
  page                 --> R22
    030F 940E05BA  CALL	push_gset2
    0311 2F42      MOV	R20,R18
    0312 2F60      MOV	R22,R16
(0139) //
(0140) void addressl(uchar page,uchar col)
(0141) {
(0142)  	 wcodel(prepage+page);
    0313 2F06      MOV	R16,R22
    0314 5408      SUBI	R16,0x48
    0315 DF72      RCALL	_wcodel
(0143) 	 wcodel(precol+col);
    0316 2F04      MOV	R16,R20
    0317 DF70      RCALL	_wcodel
(0144) }
    0318 940E059A  CALL	pop_gset2
    031A 9508      RET
_addressr:
  col                  --> R20
  page                 --> R22
    031B 940E05BA  CALL	push_gset2
    031D 2F42      MOV	R20,R18
    031E 2F60      MOV	R22,R16
(0145) //
(0146) void addressr(uchar page,uchar col)
(0147) {	 
(0148)  	 wcoder(prepage+page);
    031F 2F06      MOV	R16,R22
    0320 5408      SUBI	R16,0x48
    0321 DF95      RCALL	_wcoder
(0149) 	 wcoder(precol+col+3);
    0322 2F04      MOV	R16,R20
    0323 5F0D      SUBI	R16,0xFD
    0324 DF92      RCALL	_wcoder
(0150) }	
    0325 940E059A  CALL	pop_gset2
    0327 9508      RET
(0151) // 	 
(0152) void lcdinit(void)
(0153) {	 PORTC=0XFF;
_lcdinit:
    0328 EF8F      LDI	R24,0xFF
    0329 BB85      OUT	0x15,R24
(0154) 	 DDRC=0X00;
    032A 2422      CLR	R2
    032B BA24      OUT	0x14,R2
(0155) 	 DDRD=0XFF;
    032C BB81      OUT	0x11,R24
(0156) 	 DDRA|=BIT(PA7);
    032D 9AD7      SBI	0x1A,7
(0157) 	 PORTA|=BIT(PA7);
    032E 9ADF      SBI	0x1B,7
(0158) 	 wcodel(0xe2);wcoder(0xe2);//reset
    032F EE02      LDI	R16,0xE2
    0330 DF57      RCALL	_wcodel
    0331 EE02      LDI	R16,0xE2
    0332 DF84      RCALL	_wcoder
(0159) 	 wcodel(0xae);wcoder(0xae);//display off	
    0333 EA0E      LDI	R16,0xAE
    0334 DF53      RCALL	_wcodel
    0335 EA0E      LDI	R16,0xAE
    0336 DF80      RCALL	_wcoder
(0160) 	 wcodel(0xA4);wcoder(0xA4);//display off 
    0337 EA04      LDI	R16,0xA4
    0338 DF4F      RCALL	_wcodel
    0339 EA04      LDI	R16,0xA4
    033A DF7C      RCALL	_wcoder
(0161) 	 wcodel(0xa9);wcoder(0xa9);//duty select :1/32
    033B EA09      LDI	R16,0xA9
    033C DF4B      RCALL	_wcodel
    033D EA09      LDI	R16,0xA9
    033E DF78      RCALL	_wcoder
(0162) 	 wcodel(0xa0);wcoder(0xa0);//clock
    033F EA00      LDI	R16,0xA0
    0340 DF47      RCALL	_wcodel
    0341 EA00      LDI	R16,0xA0
    0342 DF74      RCALL	_wcoder
(0163) 	 wcodel(0xEE);wcoder(0xEE);//display off
    0343 EE0E      LDI	R16,0xEE
    0344 DF43      RCALL	_wcodel
    0345 EE0E      LDI	R16,0xEE
    0346 DF70      RCALL	_wcoder
(0164) 	 wcodel(0xc0);wcoder(0xc0);//start line: 1
    0347 EC00      LDI	R16,0xC0
    0348 DF3F      RCALL	_wcodel
    0349 EC00      LDI	R16,0xC0
    034A DF6C      RCALL	_wcoder
(0165) 	 wcodel(0x00);wcoder(0x00); //column address set:0
    034B 2700      CLR	R16
    034C DF3B      RCALL	_wcodel
    034D 2700      CLR	R16
    034E DF68      RCALL	_wcoder
(0166) 	 clear(0X00);
    034F 2700      CLR	R16
    0350 DF95      RCALL	_clear
(0167) 	 wcodel(0xAF);wcoder(0xAF);//page address set:1
    0351 EA0F      LDI	R16,0xAF
    0352 DF35      RCALL	_wcodel
    0353 EA0F      LDI	R16,0xAF
(0168) 
(0169) } 
    0354 CF62      RJMP	_wcoder
_displaystring:
  w                    --> R14
  j                    --> R22
  z                    --> R10
  i                    --> R20
  onechar              --> Y+16
  y                    --> Y+14
  x                    --> Y+12
    0355 940E0595  CALL	push_arg4
    0357 940E05C6  CALL	push_gset5
    0359 9722      SBIW	R28,2
(0170) void displaystring(uchar x,uchar y,uchar *onechar)
(0171) {
(0172)  	 uchar i=0,z=0,j=0,w;

⌨️ 快捷键说明

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