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

📄 lcd_1602_driver.s

📁 单片机 mega16L 电池放电器源码
💻 S
📖 第 1 页 / 共 2 页
字号:
	std z+27,R19
	.dbline 193
L38:
	.dbline 189
	dec R14
L40:
	.dbline 189
	clr R2
	cp R2,R14
	brsh X1
	rjmp L37
X1:
	.dbline 195
;       {
;         lcd[i]=dat%10+48;
; 		dat=dat/10;
;       }
; 	  
; 	for(i=1;i<11;i++)
	clr R14
	inc R14
	rjmp L44
L41:
	.dbline 196
; 	   { 
	.dbline 197
; 	     if(i==11-d)
	ldi R24,11
	ldd R0,y+22
	sub R24,R0
	cp R14,R24
	brne L45
	.dbline 198
; 		   {  
	.dbline 199
; 		      if(lcd_data[add]==c)
	ldi R24,<_lcd_data
	ldi R25,>_lcd_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	cp R2,R10
	brne L47
	.dbline 200
; 			     {}
	.dbline 200
	rjmp L48
L47:
	.dbline 202
; 			  else
; 			     {data[add]=c;}     
	.dbline 202
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R10
	.dbline 202
L48:
	.dbline 203
; 		          add++;
	lds R24,_add
	subi R24,255    ; addi 1
	sts _add,R24
	.dbline 204
; 			}   
L45:
	.dbline 205
; 	     if((lcd[i]-48+b)==0)
	movw R24,R28
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	subi R24,48
	add R24,R12
	breq X2
	rjmp L49
X2:
	.dbline 206
; 	     {
	.dbline 207
; 		   if(i>=(10-d))
	ldi R24,10
	ldd R0,y+22
	sub R24,R0
	cp R14,R24
	brsh X3
	rjmp L50
X3:
	.dbline 208
; 		   { 
	.dbline 209
; 		      if(lcd_data[add]==lcd[i])
	movw R24,R28
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_lcd_data
	ldi R25,>_lcd_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	ldd R3,z+0
	cp R3,R2
	brne L53
	.dbline 210
; 			     {}
	.dbline 210
	rjmp L54
L53:
	.dbline 212
; 			  else
; 			     {data[add]=lcd[i];}     
	.dbline 212
	movw R24,R28
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 212
L54:
	.dbline 213
; 		          add++;
	lds R24,_add
	subi R24,255    ; addi 1
	sts _add,R24
	.dbline 214
; 			} 	 
	.dbline 216
; 		   else
; 		   {}  	   
	.dbline 216
	.dbline 217
; 		 }
	rjmp L50
L49:
	.dbline 219
; 		 else
; 		 {
	.dbline 220
; 		      if(lcd_data[add]==lcd[i])
	movw R24,R28
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_lcd_data
	ldi R25,>_lcd_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	ldd R3,z+0
	cp R3,R2
	brne L55
	.dbline 221
; 			     {}
	.dbline 221
	rjmp L56
L55:
	.dbline 223
; 			  else
; 			     {data[add]=lcd[i];}      
	.dbline 223
	movw R24,R28
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 223
L56:
	.dbline 224
; 		          add++;
	lds R24,_add
	subi R24,255    ; addi 1
	sts _add,R24
	.dbline 225
; 		 b=1;
	clr R12
	inc R12
	.dbline 226
; 		 }
L50:
	.dbline 227
L42:
	.dbline 195
	inc R14
L44:
	.dbline 195
	mov R24,R14
	cpi R24,11
	brsh X4
	rjmp L41
X4:
	rjmp L58
L57:
	.dbline 229
; 	   }
; 	   while (*s) 
;       {
	.dbline 230
;         if(lcd_data[add]==*s)//如果LCD上显示的数和
	ldi R24,<_lcd_data
	ldi R25,>_lcd_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R30,R8
	lpm R30,Z
	cp R2,R30
	brne L60
	.dbline 231
; 		   {}                             //待写入的数相同的话
	.dbline 231
	rjmp L61
L60:
	.dbline 232
; 		else{data[add]=*s;}//要显示的数据存入显存
	.dbline 232
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	movw R26,R8
	st -y,R31
	st -y,R30
	movw R30,R26
	lpm R26,Z
	ld R30,y+
	ld R31,y+
	std z+0,R26
	.dbline 232
L61:
	.dbline 233
	movw R24,R8
	adiw R24,1
	movw R8,R24
	.dbline 234
	lds R24,_add
	subi R24,255    ; addi 1
	sts _add,R24
	.dbline 235
L58:
	.dbline 228
	movw R30,R8
	lpm R30,Z
	tst R30
	brne L57
	.dbline 236
; 	       s ++;//指针加1
; 	       add++;//显存地址加1
;       } 
; 	  if(y==1)
	ldd R24,y+20
	cpi R24,1
	brne L67
	.dbline 237
; 	    e+=16;
	mov R24,R6
	subi R24,240    ; addi 16
	mov R6,R24
	.dbline 238
; 	  for(;e>=add;add++)
	rjmp L67
L64:
	.dbline 239
	.dbline 239
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	ldi R24,32
	std z+0,R24
	.dbline 239
L65:
	.dbline 238
	lds R24,_add
	subi R24,255    ; addi 1
	sts _add,R24
L67:
	.dbline 238
	lds R2,_add
	cp R6,R2
	brsh L64
	.dbline 240
; 	   {data[add]=' ';}
; 	    LCD_updata;
	clr R2
	sts _new,R2
	.dbline -2
L33:
	adiw R28,10
	rcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r c 10 c
	.dbsym r b 12 c
	.dbsym l lcd 0 A[10:10]c
	.dbsym r i 14 c
	.dbsym r e 6 c
	.dbsym r s 8 pkc
	.dbsym l dat 24 l
	.dbsym l d 22 c
	.dbsym l y 20 c
	.dbsym r x 14 c
	.dbend
	.area lit(rom, con, rel)
L69:
	.byte 0
	.byte 0,0,0,0,0,0,0
	.area text(rom, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\LCD_1602_Driver.c
	.dbfunc e LCD_write_time _LCD_write_time fV
;            lcd -> y+0
;              i -> R20
;              z -> R22
;              s -> y+18
;              m -> y+16
;              h -> y+14
;              y -> R10
;              x -> R20
	.even
_LCD_write_time::
	rcall push_gset3
	mov R10,R18
	mov R20,R16
	sbiw R28,8
	ldd R22,y+20
	.dbline -1
	.dbline 251
;   }
; /*-----------------------------------------------------------------------
; LCD_write_time  : 数字显示函数
; 
; 输入参数:
;           X、Y    : 显示数据的起始的位置
; 		  h,m,s   :时,分,秒
; 编写日期          :2005-10-19 		
; -----------------------------------------------------------------------*/ 
; void LCD_write_time(unsigned char x,unsigned char y,unsigned char h,unsigned char m,unsigned char s,unsigned char z)
;   { 
	.dbline 253
;     unsigned char  i;
; 	unsigned char  lcd[8]={0};
	ldi R24,<L69
	ldi R25,>L69
	movw R30,R28
	ldi R16,8
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 254
; 	if(y<2)
	mov R24,R10
	cpi R24,2
	brsh L70
	.dbline 255
; 	add=y*16+x;//设置起始座标LCD_set_xy( X, Y );  
	ldi R24,16
	mul R24,R10
	mov R2,R0
	add R2,R20
	sts _add,R2
L70:
	.dbline 256
; 	lcd[0]=h/10+48;
	ldi R17,10
	ldd R16,y+14
	rcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	.dbline 257
; 	lcd[1]=h%10+48;
	ldi R17,10
	ldd R16,y+14
	rcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+1,R24
	.dbline 258
; 	lcd[2]=':';
	ldi R24,58
	std y+2,R24
	.dbline 259
; 	lcd[3]=m/10+48;
	ldi R17,10
	ldd R16,y+16
	rcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+3,R24
	.dbline 260
; 	lcd[4]=m%10+48;
	ldi R17,10
	ldd R16,y+16
	rcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+4,R24
	.dbline 261
; 	lcd[5]=':';  
	ldi R24,58
	std y+5,R24
	.dbline 262
; 	lcd[6]=s/10+48;
	ldi R17,10
	ldd R16,y+18
	rcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+6,R24
	.dbline 263
; 	lcd[7]=s%10+48;
	ldi R17,10
	ldd R16,y+18
	rcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+7,R24
	.dbline 264
;  if(z==5){if(lcd[7]%2)
	cpi R22,5
	brne L79
	.dbline 264
	.dbline 264
	ldi R17,2
	mov R16,R24
	rcall mod8u
	tst R16
	breq L81
	.dbline 265
; 	          lcd[2]=':';
	ldi R24,58
	std y+2,R24
	rjmp L82
L81:
	.dbline 267
	ldi R24,32
	std y+2,R24
L82:
	.dbline 267
; 	       else
; 	          lcd[2]=' ';}
L79:
	.dbline 269
; 	
;    for (i=0;i<z;i++)  
	clr R20
	rjmp L89
L86:
	.dbline 270
;       {
	.dbline 271
;               if(lcd_data[add]==lcd[i])
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_lcd_data
	ldi R25,>_lcd_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	ldd R3,z+0
	cp R3,R2
	brne L90
	.dbline 272
; 			     {}
	.dbline 272
	rjmp L91
L90:
	.dbline 274
; 			  else
; 			     {data[add]=lcd[i];}    
	.dbline 274
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_add
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 274
L91:
	.dbline 275
	lds R24,_add
	subi R24,255    ; addi 1
	sts _add,R24
	.dbline 276
L87:
	.dbline 269
	inc R20
L89:
	.dbline 269
	cp R20,R22
	brlo L86
	.dbline 277
; 		          add++;
;       }
; 	LCD_updata;
	clr R2
	sts _new,R2
	.dbline -2
L68:
	adiw R28,8
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l lcd 0 A[8:8]c
	.dbsym r i 20 c
	.dbsym r z 22 c
	.dbsym l s 18 c
	.dbsym l m 16 c
	.dbsym l h 14 c
	.dbsym r y 10 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e LCD_write_new _LCD_write_new fV
;        address -> R20
;        new_add -> R22
	.even
_LCD_write_new::
	rcall push_gset2
	.dbline -1
	.dbline 286
;   }
; /*----------------------------------------------------
;     LCD_write_new:写显存函数
; 	data[]:32字节的显存
; 	new:显存标号
; 	编写日期:2005/10/18
; -----------------------------------------------------*/  
; void  LCD_write_new(void)
;   {   
	.dbline 288
;     unsigned char address;
; 	unsigned char new_add=1;//1表示要更新地址
	ldi R22,1
	rjmp L94
L93:
	.dbline 290
; 	while(new<32)//显存共32个字节,标号从0--31 
;       {    
	.dbline 291
; 		 if(new==16)//换行
	lds R24,_new
	cpi R24,16
	brne L96
	.dbline 292
; 		    new_add=1;	   
	ldi R22,1
L96:
	.dbline 293
; 	     if(data[new])//跳过为0的显存
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_new
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	tst R2
	brne X5
	rjmp L98
X5:
	.dbline 294
;             {  
	.dbline 295
; 			if(new_add)//当new_add=0时表示无需更新地址
	tst R22
	breq L100
	.dbline 296
; 		      {
	.dbline 297
; 		         if(new>15)
	ldi R24,15
	lds R2,_new
	cp R24,R2
	brsh L102
	.dbline 298
; 			       address=0xb0+new;
	mov R20,R2
	subi R20,80    ; addi 176
	rjmp L103
L102:
	.dbline 300
; 				 else
; 			       address=0x80+new;
	lds R20,_new
	subi R20,128    ; addi 128
L103:
	.dbline 301
; 			       LCD_write_char(0,address);//设置起始地址
	mov R18,R20
	clr R19
	clr R16
	clr R17
	rcall _LCD_write_char
	.dbline 302
; 		       }  			  
L100:
	.dbline 303
; 			  LCD_write_char(1,data[new]);//写数据
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_new
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 304
; 			  lcd_data[new]=data[new];
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_new
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_lcd_data
	ldi R25,>_lcd_data
	lds R30,_new
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 305
; 			  data[new]=0;//写完数据后,显存清0
	ldi R24,<_data
	ldi R25,>_data
	lds R30,_new
	clr R31
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 306
; 			  new_add=0;
	clr R22
	.dbline 307
; 			}
	rjmp L99
L98:
	.dbline 309
; 		else
; 		   new_add=1;
	ldi R22,1
L99:
	.dbline 310
	lds R24,_new
	subi R24,255    ; addi 1
	sts _new,R24
	.dbline 311
L94:
	.dbline 289
	lds R24,_new
	cpi R24,32
	brsh X6
	rjmp L93
X6:
	.dbline -2
L92:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym r new_add 22 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\LCD_1602_Driver.c
_add::
	.blkb 1
	.dbsym e add _add c
_data::
	.blkb 32
	.dbsym e data _data A[32:32]c
_lcd_data::
	.blkb 32
	.dbsym e lcd_data _lcd_data A[32:32]c

⌨️ 快捷键说明

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