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

📄 hzmmi.s

📁 atmel的atmega128外扩ram对液晶的驱动调试程序
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 229
	clr R16
	xcall _write_data_auto
	.dbline 230
L44:
	.dbline 227
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 227
	cpi R20,64
	ldi R30,31
	cpc R21,R30
	brlt L43
	.dbline 231
; 		{
; 	      write_data_auto(0x00);
; 		}	
; 	write_order(0xb2); 
	ldi R16,178
	xcall _write_order
	.dbline -2
	.dbline 232
; }
L42:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbfunc s write_data_auto _write_data_auto fI
;           data -> R20
	.even
_write_data_auto::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 235
; 
; void write_data_auto(byte data)
; {
	.dbline 236
; 	wait_disp_auto();
	xcall _wait_disp_auto
	.dbline 237
;         write_data(data);
	mov R16,R20
	xcall _write_data
	.dbline -2
	.dbline 238
; }
L47:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbfunc s wait_disp_auto _wait_disp_auto fI
;           flag -> R16
	.even
_wait_disp_auto::
	.dbline -1
	.dbline 242
; 
; //数据自动写状态忙等待
; void wait_disp_auto(void)
; {
	.dbline 245
; byte flag;
; 
; 	PORTA=0xff;
	ldi R24,255
	out 0x1b,R24
	.dbline 246
; 	DDRA=0;                   //A口为输入	
	clr R2
	out 0x1a,R2
	.dbline 247
;         PORTD|=LCD_ID;               //CD=1	
	sbi 0x12,6
	.dbline 248
; 	PORTD|=LCD_ID;               //CD=1        	
	sbi 0x12,6
	.dbline 249
; 	PORTD&=~LCD_CS;           //CE=0
	cbi 0x12,5
	.dbline 250
; 	PORTD&=~LCD_CS;           //CE=0
	cbi 0x12,5
	.dbline 251
; 	PORTD&=~LCD_CS;           //CE=0	
	cbi 0x12,5
	.dbline 252
; 	for(;;)
L49:
	.dbline 253
; 	{	     
	.dbline 254
; 	    flag=*(byte*)0x8000;           	       
	lds R16,32768
	.dbline 255
; 	    if(flag & LCD_BUSY_S3){     //判断液晶忙否?		   	        	               	    
	sbrs R16,3
	rjmp L49
	.dbline 255
	.dbline 256
; 		  PORTD|=LCD_CS|LCD_ID;         //CE=1,ID=1
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline 257
; 		  PORTD|=LCD_CS|LCD_ID;         //CE=1,ID=1	
	in R24,0x12
	ori R24,96
	out 0x12,R24
	.dbline 258
; 		  return;
	.dbline 260
; 		}	    
; 	}   
	.dbline 252
	.dbline 252
	.dbline -2
L48:
	.dbline 0 ; func end
	ret
	.dbsym r flag 16 c
	.dbfunc s init_disp _init_disp fI
	.even
_init_disp::
	.dbline -1
	.dbline 267
; }
; 
; 
; 
; //对液晶初始化,清屏
; void init_disp(void)
; {
	.dbline 268
;     PORTD&=~LCD_RST;              //LCD_RST=0	
	cbi 0x12,7
	.dbline 269
;     PORTD&=~LCD_RST;              //LCD_RST=0		
	cbi 0x12,7
	.dbline 270
;     dlyms(2);
	ldi R16,2
	ldi R17,0
	xcall _dlyms
	.dbline 271
;     PORTD|=LCD_RST;              //LCD_RST=1
	sbi 0x12,7
	.dbline 272
;     PORTD|=LCD_RST;              //LCD_RST=1		
	sbi 0x12,7
	.dbline 273
;     dlyms(3);
	ldi R16,3
	ldi R17,0
	xcall _dlyms
	.dbline 274
; 	write_data(0x00);                      //设置图形显示首地址00H
	clr R16
	xcall _write_data
	.dbline 275
; 	write_data(0x00);                        
	clr R16
	xcall _write_data
	.dbline 276
; 	write_order(0x42);		
	ldi R16,66
	xcall _write_order
	.dbline 277
;     dlyms(2);		
	ldi R16,2
	ldi R17,0
	xcall _dlyms
	.dbline 278
; 	write_data(DIS_LEN);                   //设置图形显示区域宽度
	ldi R16,32
	xcall _write_data
	.dbline 279
; 	write_data(00);                        //即一行显示所占字节数
	clr R16
	xcall _write_data
	.dbline 280
; 	write_order(0x43);		
	ldi R16,67
	xcall _write_order
	.dbline 281
; 	dlyms(2);		
	ldi R16,2
	ldi R17,0
	xcall _dlyms
	.dbline 282
; 	write_order(0xa7);		    //光标形状设置
	ldi R16,167
	xcall _write_order
	.dbline 283
; 	write_order(0x80);		    //显示方式设置逻辑"或"合成
	ldi R16,128
	xcall _write_order
	.dbline 284
; 	write_order(0x98);		    //显示开关设置,开图形和文本显示
	ldi R16,152
	xcall _write_order
	.dbline -2
	.dbline 285
; }
L55:
	.dbline 0 ; func end
	ret
	.dbfunc s str_hz _str_hz fI
;           lrow -> y+6
;             aa -> y+4
;             zk -> y+0
;           lcol -> R22,R23
;       dis_code -> R12
;             pt -> y+11
;              i -> R14
;              w -> R10
;              q -> y+10
;       address1 -> y+8
;            str -> R20,R21
;            col -> R10
;            row -> R12
	.even
_str_hz::
	xcall push_gset5
	mov R10,R18
	mov R12,R16
	sbiw R28,13
	ldd R20,y+23
	ldd R21,y+24
	.dbline -1
	.dbline 289
; 
; //显示汉字串及大ASCII串
; void str_hz(byte row,byte col,byte *str)
; {
	.dbline 296
;   byte q,w,i,dis_code;
;   int address1,lrow,lcol;
;   byte *pt;
;   unsigned int aa;
;    long zk;
;   			
;   lrow=(row)%80;             //设置行
	ldi R18,80
	ldi R19,0
	mov R16,R12
	clr R17
	xcall mod16s
	std y+6,R16
	std y+7,R17
	.dbline 297
;   lcol=(col*8)%160;		//列			
	ldi R18,160
	ldi R19,0
	mov R16,R10
	clr R17
	lsl R16
	rol R17
	lsl R16
	rol R17
	lsl R16
	rol R17
	xcall mod16s
	movw R22,R16
	.dbline 298
;   for(;*str;)
	xjmp L60
L57:
	.dbline 299
;   {                   //如果*str=0,则退出循环    
	.dbline 300
;       if(*str<160)	        //如果是ASC码字符,<A0H
	movw R30,R20
	ldd R24,z+0
	cpi R24,160
	brlo X3
	xjmp L61
X3:
	.dbline 301
;       {
	.dbline 302
;     	 q=(*str++);
	movw R2,R20
	movw R24,R2
	adiw R24,1
	movw R20,R24
	movw R30,R2
	ldd R2,z+0
	std y+10,R2
	.dbline 303
; 	     if(q==13)	//处理回车符
	ldd R24,y+10
	cpi R24,13
	brne L63
	.dbline 304
; 		 {
	.dbline 305
; 		  lrow+=16;        //换两行
	ldd R24,y+6
	ldd R25,y+7
	adiw R24,16
	std y+6,R24
	std y+7,R25
	.dbline 306
; 		  lcol=0;         //列的开始
	clr R22
	clr R23
	.dbline 307
; 		  continue;
	xjmp L58
L63:
	.dbline 309
; 		 }
; 	     if(q<0x20) continue;                //为不可见字符,继续循环	     
	ldd R24,y+10
	cpi R24,32
	brsh L65
	.dbline 309
	xjmp L58
L65:
	.dbline 310
; 	     zk=q*16l+0x100l+0x800l;	   	     
	ldi R24,4
	ldi R25,0
	ldd R2,y+10
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	ldi R16,<L67
	ldi R17,>L67
	xcall lpm32
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	ldi R16,<L68
	ldi R17,>L68
	xcall lpm32
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 311
; 	     lib_addr.l=zk<<2;	    
	ldi R24,2
	ldi R25,0
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	sts _lib_addr+1,R17
	sts _lib_addr,R16
	sts _lib_addr+2+1,R19
	sts _lib_addr+2,R18
	.dbline 312
; 	     PORTF=lib_addr.bytes.a2 & 0x0f;	
	lds R24,_lib_addr+2
	andi R24,15
	sts 98,R24
	.dbline 313
; 	     aa=zk;
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	std y+4,R2
	std y+5,R3
	.dbline 314
; 	     aa=(aa & 0x3fff)|0xc000;		
	ldd R24,y+4
	ldd R25,y+5
	andi R25,63
	ori R25,192
	std y+4,R24
	std y+5,R25
	.dbline 315
; 	     pt=(byte *)aa;
	ldd R2,y+4
	ldd R3,y+5
	std y+11,R2
	std y+12,R3
	.dbline 316
; 	     address1=lrow;
	ldd R2,y+6
	ldd R3,y+7
	std y+8,R2
	std y+9,R3
	.dbline 317
;              address1=DIS_LEN*address1+lcol/8;
	ldi R18,8
	ldi R19,0
	movw R16,R22
	xcall div16s
	movw R2,R16
	ldi R18,5
	ldi R19,0
	ldd R16,y+8
	ldd R17,y+9
	xcall lsl16
	movw R4,R16
	add R4,R2
	adc R5,R3
	std y+8,R4
	std y+9,R5
	.dbline 318
;              address1=address1+START_ADDRESS;           //+图形地址偏移量           
	.dbline 319
	clr R14
	xjmp L73
L70:
	.dbline 319
	.dbline 320
	ldi R18,256
	ldi R19,1
	ldd R16,y+8
	ldd R17,y+9
	xcall div16s
	std y+10,R16
	.dbline 321
	ldi R18,256
	ldi R19,1
	ldd R16,y+8
	ldd R17,y+9
	xcall mod16s
	movw R10,R16
	.dbline 323
	mov R16,R10
	xcall _write_data
	.dbline 324
	ldd R16,y+10
	xcall _write_data
	.dbline 326
	ldi R16,36
	xcall _write_order
	.dbline 327
	ldd R30,y+11
	ldd R31,y+12
	ldd R16,z+0
	xcall _write_data
	.dbline 328
	ldi R16,192
	xcall _write_order
	.dbline 329
	ldd R24,y+11
	ldd R25,y+12
	adiw R24,1
	std y+11,R24
	std y+12,R25
	.dbline 330
	ldd R24,y+8
	ldd R25,y+9
	adiw R24,32
	std y+8,R24
	std y+9,R25
	.dbline 331
L71:
	.dbline 319
	inc R14
L73:
	.dbline 319
;              for(i=0;i<16;i++){		 
	mov R24,R14
	cpi R24,16
	brlo L70
	.dbline 332
;                 q=address1/0x100;           //地址高位
;                 w=address1%0x100;           //地址低位
; 		
;                 write_data(w);               //送低地址
;                 write_data(q);               //送高地址
;                 
; 		 write_order(0x24);           //设置显示RAM地址                      
;                  write_data(*pt);
;                  write_order(0x0c0);          //设置一次写数据指令代码  
;                 pt++;                      
;                address1=address1+DIS_LEN;    //地址调整到下一行
;              }
;           lcol=lcol+8;                    //
	subi R22,248  ; offset = 8
	sbci R23,255
	.dbline 333
;           if(lcol>=160)
	cpi R22,160
	ldi R30,0
	cpc R23,R30
	brge X4
	xjmp L58
X4:
	.dbline 334
; 		  {
	.dbline 335
; 		   lrow+=16;
	ldd R24,y+6
	ldd R25,y+7
	adiw R24,16
	std y+6,R24
	std y+7,R25
	.dbline 336
; 		   lcol=0;
	clr R22
	clr R23
	.dbline 337
; 		  }	
	.dbline 338
; 	      continue;
	xjmp L58
L61:
	.dbline 341
; 	  }
; 
;       q=(*str++)-160;
	movw R2,R20
	movw R24,R2
	adiw R24,1
	movw R20,R24
	movw R30,R2
	ldd R24,z+0
	subi R24,160
	std y+10,R24
	.dbline 342
; 	  if(*str==0) break;
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L76
	.dbline 342
	xjmp L59
L76:
	.dbline 343
; 	  w=(*str++)-161;
	movw R2,R20
	movw R24,R2
	adiw R24,1
	movw R20,R24
	movw R30,R2
	ldd R24,z+0
	subi R24,161
	mov R10,R24
	.dbline 344
; 	  if(q<=3) q--;
	ldi R24,3
	ldd R0,y+10
	cp R24,R0
	brlo L78
	.dbline 344
	dec R0
	std y+10,R0
	xjmp L79
L78:
	.dbline 345
; 	  else if(q==6) q-=3;
	ldd R24,y+10
	cpi R24,6
	brne L80
	.dbline 345
	subi R24,3
	std y+10,R24
	xjmp L81
L80:
	.dbline 346
; 	  else q-=12;	 
	ldd R24,y+10
	subi R24,12
	std y+10,R24
L81:
L79:
	.dbline 348
; 	//  zk=q;
; 	  zk=(q*94l+w)*32l+0x100l+0x800l+0x1000l;	 	 
	ldd R2,y+10
	clr R3
	clr R4
	clr R5
	ldi R16,<L82
	ldi R17,>L82
	xcall lpm32
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall mpy32s
	movw R2,R16
	movw R4,R18
	mov R6,R10
	clr R7
	clr R8
	clr R9
	add R2,R6
	adc R3,R7
	adc R4,R8
	adc R5,R9
	ldi R24,5
	ldi R25,0
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	movw R2,R16
	movw R4,R18
	ldi R16,<L67
	ldi R17,>L67
	xcall lpm32
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	ldi R16,<L68
	ldi R17,>L68
	xcall lpm32
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	ldi R16,<L83
	ldi R17,>L83
	xcall lpm32
	add R2,R16
	adc R3,R17
	adc R4,R18
	adc R5,R19
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 349
; 	   lib_addr.l=zk<<2;
	ldi R24,2
	ldi R25,0
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	sts _lib_addr+1,R17
	sts _lib_addr,R16
	sts _lib_addr+2+1,R19
	sts _lib_addr+2,R18
	.dbline 350
; 	   PORTF=lib_addr.bytes.a2 & 0x0f;	
	lds R24,_lib_addr+2
	andi R24,15
	sts 98,R24
	.dbline 351
; 	   aa=(zk & 0x3fff) | 0xc000;	  
	ldi R16,<L85
	ldi R17,>L85
	xcall lpm16
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	and R2,R16
	and R3,R17
	ldi R16,<L86
	ldi R17,>L86
	xcall lpm16
	or R2,R16
	or R3,R17
	std y+4,R2
	std y+5,R3
	.dbline 352
; 	   pt=(byte *)aa;
	std y+11,R2
	std y+12,R3
	.dbline 355
;         
; //汉字定位,行
;       address1=lrow;
	ldd R2,y+6
	ldd R3,y+7
	std y+8,R2
	std y+9,R3
	.dbline 356
;       address1=DIS_LEN*address1+lcol/8;
	ldi R18,8
	ldi R19,0
	movw R16,R22
	xcall div16s
	movw R2,R16
	ldi R18,5
	ldi R19,0
	ldd R16,y+8
	ldd R17,y+9
	xcall lsl16
	movw R4,R16
	add R4,R2
	adc R5,R3
	std y+8,R4
	std y+9,R5
	.dbline 358
;     
;       if(lcol<145)
	cpi R22,145
	ldi R30,0
	cpc R23,R30
	brlt X5
	xjmp L87
X5:
	.dbline 359
; 	  {
	.dbline 360
;         for(i=0;i<16;i++)
	clr R14
	xjmp L92
L89:
	.dbline 361
	.dbline 362
	ldi R18,256
	ldi R19,1
	ldd R16,y+8
	ldd R17,y+9
	xcall div16s
	std y+10,R16
	.dbline 363
	ldi R18,256
	ldi R19,1
	ldd R16,y+8
	ldd R17,y+9
	xcall mod16s
	movw R10,R16
	.dbline 364

⌨️ 快捷键说明

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