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

📄 lcd.s

📁 AtMega169芯片对LCD进行测试的C程序
💻 S
字号:
	.module lcd.c
	.area text(rom, con, rel)
	.dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
	.area lit(rom, con, rel)
_LCD_character_table::
	.word 4899
	.word 544
	.word 4402
	.word 4658
	.word 561
	.word 4627
	.word 4883
	.word 546
	.word 4915
	.word 4659
	.word 8736
	.dbsym e LCD_character_table _LCD_character_table A[22:11]ki
	.area text(rom, con, rel)
	.dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 28
; // **************************************************************
; // *** 		         广 州 天 河 双 龙 电 子 公 司 	            ***
; // ***                   http://www.sl.com.cn                 ***
; // ***                    lcd 显示校验    		                ***
; // ***                  作者:zxy@sl.com.cn                   ***
; // ***                       2006年3月28日                    ***
; // ***         目标MCU:MEGA169    晶振:内部(INT)8MHZ         ***
; // **************************************************************
; //实验效果:0-9动态循环显示
; #include <iom169v.h>
; #include <macros.h>
; #define pLCDREG (*(unsigned char *)(0xEC)) 
; const unsigned int LCD_character_table[] = // Character definitions table.
; {
; 	0x1323,		// '0'
; 	0x0220,		// '1'
; 	0x1132,		// '2'
; 	0x1232,		// '3'	
; 	0x0231,		// '4'
; 	0x1213,		// '5'
; 	0x1313,		// '6'
; 	0x0222,		// '7'
; 	0x1333,		// '8'
; 	0x1233,		// '9'
; 	0x2220         // 'c'
; };          
; void port_init(void)
; {
	.dbline 29
;  PORTA = 0x00;
	clr R2
	out 0x2,R2
	.dbline 30
;  DDRA  = 0x00;
	out 0x1,R2
	.dbline 31
;  PORTC = 0x00; 
	out 0x8,R2
	.dbline 32
;  DDRC  = 0x00;
	out 0x7,R2
	.dbline 33
;  PORTD = 0x00;
	out 0xb,R2
	.dbline 34
;  DDRD  = 0x00; 
	out 0xa,R2
	.dbline 35
;  PORTG = 0x00;
	out 0x14,R2
	.dbline 36
;  DDRG  = 0x00;
	out 0x13,R2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 40
; }
; /*				微秒级延时程序	  		*/
; void delay_us(int time)
; 	 {     
L3:
	.dbline 42
;   	  do
; 	  	{
	.dbline 43
; 		 time--;
	subi R16,1
	sbci R17,0
	.dbline 44
; 		}	
L4:
	.dbline 45
;   	  while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L3
X0:
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 49
; 	 }	  
; /*	  		    毫秒级延时程序			*/	 
; void delay_ms(unsigned int time)
; 	 {
	xjmp L8
L7:
	.dbline 51
; 	  while(time!=0)
; 	  	  {		
	.dbline 52
; 		   delay_us(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delay_us
	.dbline 53
; 		   time--;
	subi R20,1
	sbci R21,0
	.dbline 54
; 		  }
L8:
	.dbline 50
	cpi R20,0
	cpc R20,R21
	brne L7
X1:
	.dbline -2
L6:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e lcd_init _lcd_init fV
	.even
_lcd_init::
	.dbline -1
	.dbline 57
; 	 }					
; void lcd_init(void)
; {
	.dbline 59
; 
; LCDCRA = (1<<LCDEN);
	ldi R24,128
	sts 228,R24
	.dbline 62
; /* 晶体振荡器*/
; /* 1/3 偏置和1/4 占空比 */
; LCDCRB =  (0<<LCDCS) |(1<<LCDMUX1)| (1<<LCDMUX0)| (1<<LCDPM2)| (1<<LCDPM1)| (1<<LCDPM0);
	ldi R24,55
	sts 229,R24
	.dbline 65
; /* 选择16 为预分频因子,7 为LCD 时钟分频数*/
; /* 得到帧速率为 Hz */
; LCDFRR = (1<<LCDPS2) |(1<<LCDPS1) |(0<<LCDPS0) |(1<<LCDCD2) | (1<<LCDCD1) | (0<<LCDCD0);
	ldi R24,102
	sts 230,R24
	.dbline 67
; /* 设置输出电压为3.3 V */
; LCDCCR = (1<<LCDCC3) | (1<<LCDCC2) | (1<<LCDCC1) | (1<<LCDCC0);
	ldi R24,15
	sts 231,R24
	.dbline 70
; /* 使能LCD,缺省波形并禁止所有中断*/
; 
;  LCDDR0=0x00;
	clr R2
	sts 236,R2
	.dbline 71
;  LCDDR1=0x00;
	sts 237,R2
	.dbline 72
;  LCDDR2=0x00;
	sts 238,R2
	.dbline 73
;  LCDDR3=0x00;
	sts 239,R2
	.dbline 74
;  LCDDR5=0x00;
	sts 241,R2
	.dbline 75
;  LCDDR6=0x00;
	sts 242,R2
	.dbline 76
;  LCDDR7=0x00;
	sts 243,R2
	.dbline 77
;  LCDDR8=0x00;
	sts 244,R2
	.dbline 78
;  LCDDR10=0x00;
	sts 246,R2
	.dbline 79
;  LCDDR11=0x00;
	sts 247,R2
	.dbline 80
;  LCDDR12=0x00;
	sts 248,R2
	.dbline 81
;  LCDDR13=0x00;
	sts 249,R2
	.dbline 82
;  LCDDR15=0x00;
	sts 251,R2
	.dbline 83
;  LCDDR16=0x00;
	sts 252,R2
	.dbline 84
;  LCDDR17=0x00;
	sts 253,R2
	.dbline 85
;  LCDDR18=0x00;
	sts 254,R2
	.dbline 86
;  LCDCRA=(1<<LCDEN);
	ldi R24,128
	sts 228,R24
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 89
; }
; void init_devices(void)
; {
	.dbline 91
;  
;  port_init();
	xcall _port_init
	.dbline 92
;  lcd_init();
	xcall _lcd_init
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;              n -> R10,R11
;              i -> R20,R21
;              j -> R10,R11
;              m -> R22,R23
	.even
_main::
	.dbline -1
	.dbline 97
; 
; }
; 
; void main(void)
; {
	.dbline 98
;  unsigned int i,j,m,n=0;
	clr R10
	clr R11
	.dbline 99
;  init_devices();
	xcall _init_devices
	xjmp L14
L16:
	.dbline 102
;  while(1)
;  		 {  
; 		  while ( !(LCDCRA & (1<<LCDIF)) );
L17:
	.dbline 102
	lds R2,228
	sbrs R2,4
	rjmp L16
X2:
	.dbline 103
; 		  LCDCRA = (1<<LCDEN)|(1<<LCDIF);
	ldi R24,144
	sts 228,R24
	.dbline 104
; 		  for(i=0;i<10;i++)	
	clr R20
	clr R21
	xjmp L22
L19:
	.dbline 105
; 		   {
	.dbline 106
; 		    j=LCD_character_table[i];			//左1位
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	ldi R24,<_LCD_character_table
	ldi R25,>_LCD_character_table
	add R30,R24
	adc R31,R25
	lpm R10,Z+
	lpm R11,Z
	.dbline 108
; 			//j=j<<n;			
; 			m=j&0x000f;
	movw R22,R10
	andi R22,15
	andi R23,0
	.dbline 109
; 			LCDDR0=m;
	sts 236,R22
	.dbline 110
; 			m=(j>>4)&0x000f;
	movw R22,R10
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	andi R22,15
	andi R23,0
	.dbline 111
; 			LCDDR5=m; 
	sts 241,R22
	.dbline 112
; 			m=(j>>8)&0x000f;
	movw R22,R10
	mov R22,R23
	clr R23
	andi R22,15
	andi R23,0
	.dbline 113
; 			LCDDR10=m;
	sts 246,R22
	.dbline 114
; 			m=(j>>12)&0x000f;
	ldi R18,12
	ldi R19,0
	movw R16,R10
	xcall lsr16
	movw R22,R16
	andi R22,15
	andi R23,0
	.dbline 115
; 			LCDDR15=m;
	sts 251,R22
	.dbline 118
; 			
; 			
; 			j=LCD_character_table[i];		//左2位
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	ldi R24,<_LCD_character_table
	ldi R25,>_LCD_character_table
	add R30,R24
	adc R31,R25
	lpm R10,Z+
	lpm R11,Z
	.dbline 119
; 			j=j<<2;			
	lsl R10
	rol R11
	lsl R10
	rol R11
	.dbline 120
; 			m=j&0x000f;
	movw R22,R10
	andi R22,15
	andi R23,0
	.dbline 121
; 			LCDDR0|=m;
	lds R2,236
	clr R3
	or R2,R22
	or R3,R23
	sts 236,R2
	.dbline 122
; 			m=(j>>4)&0x000f;
	movw R22,R10
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	andi R22,15
	andi R23,0
	.dbline 123
; 			LCDDR5|=m; 
	lds R2,241
	clr R3
	or R2,R22
	or R3,R23
	sts 241,R2
	.dbline 124
; 			m=(j>>8)&0x000f;
	movw R22,R10
	mov R22,R23
	clr R23
	andi R22,15
	andi R23,0
	.dbline 125
; 			LCDDR10|=m;
	lds R2,246
	clr R3
	or R2,R22
	or R3,R23
	sts 246,R2
	.dbline 126
; 			m=(j>>12)&0x000f;
	ldi R18,12
	ldi R19,0
	movw R16,R10
	xcall lsr16
	movw R22,R16
	andi R22,15
	andi R23,0
	.dbline 127
; 			LCDDR15|=m;
	lds R2,251
	clr R3
	or R2,R22
	or R3,R23
	sts 251,R2
	.dbline 129
; 			
; 			m=LCDDR0<<2;                     //左3位
	lds R22,236
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 130
; 			LCDDR0|=m;
	lds R2,236
	clr R3
	or R2,R22
	or R3,R23
	sts 236,R2
	.dbline 131
; 			m=LCDDR5<<2;
	lds R22,241
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 132
; 			LCDDR5|=m;
	lds R2,241
	clr R3
	or R2,R22
	or R3,R23
	sts 241,R2
	.dbline 133
; 			m=LCDDR10<<2;
	lds R22,246
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 134
; 			LCDDR10|=m;
	lds R2,246
	clr R3
	or R2,R22
	or R3,R23
	sts 246,R2
	.dbline 135
; 			m=LCDDR15<<2;
	lds R22,251
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 136
; 			LCDDR15|=m;
	lds R2,251
	clr R3
	or R2,R22
	or R3,R23
	sts 251,R2
	.dbline 138
; 			
; 			m=LCDDR0<<2;                        //左4位
	lds R22,236
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 139
; 			LCDDR0|=m;
	lds R2,236
	clr R3
	or R2,R22
	or R3,R23
	sts 236,R2
	.dbline 140
; 			m=LCDDR5<<2;
	lds R22,241
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 141
; 			LCDDR5|=m;
	lds R2,241
	clr R3
	or R2,R22
	or R3,R23
	sts 241,R2
	.dbline 142
; 			m=LCDDR10<<2;
	lds R22,246
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 143
; 			LCDDR10|=m;
	lds R2,246
	clr R3
	or R2,R22
	or R3,R23
	sts 246,R2
	.dbline 144
; 			m=LCDDR15<<2;
	lds R22,251
	clr R23
	lsl R22
	rol R23
	lsl R22
	rol R23
	.dbline 145
; 			LCDDR15|=m;
	lds R2,251
	clr R3
	or R2,R22
	or R3,R23
	sts 251,R2
	.dbline 149
; 			
; 			
; 			
; 			j=LCD_character_table[i];			//左5位		
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	ldi R24,<_LCD_character_table
	ldi R25,>_LCD_character_table
	add R30,R24
	adc R31,R25
	lpm R10,Z+
	lpm R11,Z
	.dbline 150
; 			m=j&0x000f;
	movw R22,R10
	andi R22,15
	andi R23,0
	.dbline 151
; 			LCDDR1=m;
	sts 237,R22
	.dbline 152
; 			m=(j>>4)&0x000f;
	movw R22,R10
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	andi R22,15
	andi R23,0
	.dbline 153
; 			LCDDR6=m; 
	sts 242,R22
	.dbline 154
; 			m=(j>>8)&0x000f;
	movw R22,R10
	mov R22,R23
	clr R23
	andi R22,15
	andi R23,0
	.dbline 155
; 			LCDDR11=m;
	sts 247,R22
	.dbline 156
; 			m=(j>>12)&0x000f;
	ldi R18,12
	ldi R19,0
	movw R16,R10
	xcall lsr16
	movw R22,R16
	andi R22,15
	andi R23,0
	.dbline 157
; 			LCDDR16=m;
	sts 252,R22
	.dbline 159
; 			
; 			j=LCD_character_table[i];	   //左6位
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	ldi R24,<_LCD_character_table
	ldi R25,>_LCD_character_table
	add R30,R24
	adc R31,R25
	lpm R10,Z+
	lpm R11,Z
	.dbline 160
; 			m=j&0x000f;
	movw R22,R10
	andi R22,15
	andi R23,0
	.dbline 161
; 			LCDDR1|=m<<2;
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,237
	clr R5
	or R4,R2
	or R5,R3
	sts 237,R4
	.dbline 162
; 			m=(j>>4)&0x000f;
	movw R22,R10
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	andi R22,15
	andi R23,0
	.dbline 163
; 			LCDDR6|=m<<2; 
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,242
	clr R5
	or R4,R2
	or R5,R3
	sts 242,R4
	.dbline 164
; 			m=(j>>8)&0x000f;
	movw R22,R10
	mov R22,R23
	clr R23
	andi R22,15
	andi R23,0
	.dbline 165
; 			LCDDR11|=m<<2;
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,247
	clr R5
	or R4,R2
	or R5,R3
	sts 247,R4
	.dbline 166
; 			m=(j>>12)&0x000f;
	ldi R18,12
	ldi R19,0
	movw R16,R10
	xcall lsr16
	movw R22,R16
	andi R22,15
	andi R23,0
	.dbline 167
; 			LCDDR16|=m<<2;			
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,252
	clr R5
	or R4,R2
	or R5,R3
	sts 252,R4
	.dbline 169
; 						
; 			j=LCD_character_table[i];			//左7位	
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	ldi R24,<_LCD_character_table
	ldi R25,>_LCD_character_table
	add R30,R24
	adc R31,R25
	lpm R10,Z+
	lpm R11,Z
	.dbline 170
; 			m=j&0x000f;
	movw R22,R10
	andi R22,15
	andi R23,0
	.dbline 171
; 			LCDDR1|=m<<4;
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,237
	clr R5
	or R4,R2
	or R5,R3
	sts 237,R4
	.dbline 172
; 			m=(j>>4)&0x000f;			
	movw R22,R10
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	andi R22,15
	andi R23,0
	.dbline 173
; 			LCDDR6|=m<<4; 
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,242
	clr R5
	or R4,R2
	or R5,R3
	sts 242,R4
	.dbline 174
; 			m=(j>>8)&0x000f;			
	movw R22,R10
	mov R22,R23
	clr R23
	andi R22,15
	andi R23,0
	.dbline 175
; 			LCDDR11|=m<<4;
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,247
	clr R5
	or R4,R2
	or R5,R3
	sts 247,R4
	.dbline 176
; 			m=(j>>12)&0x000f;			
	ldi R18,12
	ldi R19,0
	movw R16,R10
	xcall lsr16
	movw R22,R16
	andi R22,15
	andi R23,0
	.dbline 177
; 			LCDDR16|=m<<4;		
	movw R2,R22
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lsl R2
	rol R3
	lds R4,252
	clr R5
	or R4,R2
	or R5,R3
	sts 252,R4
	.dbline 180
; 			
; 			
; 			j=LCD_character_table[i];			//左8位			
	ldi R16,2
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R30,R16
	ldi R24,<_LCD_character_table
	ldi R25,>_LCD_character_table
	add R30,R24
	adc R31,R25
	lpm R10,Z+
	lpm R11,Z
	.dbline 181
; 			m=j&0x000f;			
	movw R22,R10
	andi R22,15
	andi R23,0
	.dbline 182
; 			LCDDR1|=m<<6;
	ldi R18,6
	ldi R19,0
	movw R16,R22
	xcall lsl16
	lds R2,237
	clr R3
	or R2,R16
	or R3,R17
	sts 237,R2
	.dbline 183
; 			m=(j>>4)&0x000f;			
	movw R22,R10
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	lsr R23
	ror R22
	andi R22,15
	andi R23,0
	.dbline 184
; 			LCDDR6|=m<<6; 
	ldi R18,6
	ldi R19,0
	movw R16,R22
	xcall lsl16
	lds R2,242
	clr R3
	or R2,R16
	or R3,R17
	sts 242,R2
	.dbline 185
; 			m=(j>>8)&0x000f;			
	movw R22,R10
	mov R22,R23
	clr R23
	andi R22,15
	andi R23,0
	.dbline 186
; 			LCDDR11|=m<<6;
	ldi R18,6
	ldi R19,0
	movw R16,R22
	xcall lsl16
	lds R2,247
	clr R3
	or R2,R16
	or R3,R17
	sts 247,R2
	.dbline 187
; 			m=(j>>12)&0x000f;			
	ldi R18,12
	ldi R19,0
	movw R16,R10
	xcall lsr16
	movw R22,R16
	andi R22,15
	andi R23,0
	.dbline 188
; 			LCDDR16|=m<<6;
	ldi R18,6
	ldi R19,0
	movw R16,R22
	xcall lsl16
	lds R2,252
	clr R3
	or R2,R16
	or R3,R17
	sts 252,R2
	.dbline 190
; 						
; 			delay_ms(1000);  
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	.dbline 191
; 		   }  		    
L20:
	.dbline 104
	subi R20,255  ; offset = 1
	sbci R21,255
L22:
	.dbline 104
	cpi R20,10
	ldi R30,0
	cpc R21,R30
	brsh X5
	xjmp L19
X5:
X3:
	.dbline 192
; 		 }
L14:
	.dbline 100
	xjmp L17
X4:
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbsym r n 10 i
	.dbsym r i 20 i
	.dbsym r j 10 i
	.dbsym r m 22 i
	.dbend
;  } 
;  
;  
;  
;  
;  
;  

⌨️ 快捷键说明

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