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

📄 display.c

📁 mb90f387s驱动240128液晶程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    		fnDataW(afill);				// 写数据
    		
    		
    	}
    	fnCmd(LC_AUT_OVR);				// 自动写结束
    	var.u.locat.word += 30;
    }
	return(0);
}
unsigned char lcd_cls(unsigned char lcdx,unsigned char lcdy,unsigned char kuan,unsigned char gao)
{
    unsigned char i,j;
    //unsigned int lcdadd;
    var.u.locat.word = lcdy * 30 + lcdx;
    	
    for(i = 0;i < gao;i++){
    	fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]);	// 置地址指针
    	fnCmd(LC_AUT_WR);				// 自动写
    	for(j = 0;j < kuan;j++){
    		fnDataW(0x00);				// 写数据
    		
    		
    	}
    	fnCmd(LC_AUT_OVR);				// 自动写结束
    	var.u.locat.word += 30;
    }
	return(0);
}
void lcd_sxian(unsigned char data,unsigned char len)
{
    unsigned char i;
    
    for(i = 0;i < len;i++){
    	fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]);	// 置地址指针
    	//fnCmd(LC_NOC_WR);				//  数据一次写,地址不变
    	fnCmd(LC_AUT_WR);				// 自动写
    	fnDataW(data);				// 写数据
    	fnCmd(LC_AUT_OVR);				// 自动写结束
    	var.u.locat.word += LCDKUAN;
    }

}
void disp_bmps()
{
	unsigned char i,j;
	for(i = 0;i < var.u.gao;i++){
    	fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]);	// 置地址指针
      	fnCmd(LC_AUT_WR);				// 自动写
    	for(j = 0;j < var.u.kuan;j++){
    		fnDataW(*var.u.addr);				// 写数据
    		var.u.addr++;
				    
		}
		fnCmd(LC_AUT_OVR);				// 自动写结束
    	var.u.locat.word += LCDKUAN;
                
	}
}
void disp_bmph()
{
    unsigned char i,j,*ptr;
    var.u.len = var.u.gao / 8;
	LCMRD = 1;
	LCMWR = 1;
	LCMDIR = 0xff;
  	for(i = 0;i < var.u.kuan;i++){
    	ptr = var.u.addr + var.u.kuan - 1 - i;
       	for(j = 0;j < 128;j++){
    		var.u.movea.byte[j] = *ptr;
    		ptr += var.u.kuan;
    	}
    	writeh2s8();
    }
}
void disp_str(unsigned char* ptr)
{
	unsigned char i,j,k,n;
	if(stc.flash.bit.dir){
    	for(i = 0;i < var.u.len;i++){
    		var.u.addr = ZK816_ADDR;
    		j =  *(ptr + i);
    		var.u.addr += j * 16;
    		for(j = 0;j < 8;j++){
    		    fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]);	// 置地址指针
                fnCmd(LC_AUT_WR);				// 自动写
    			for(k = 0;k < 2;k++){
    				fnDataW(*var.u.addr);				// 写数据
    				var.u.addr++;
				    
				}
				fnCmd(LC_AUT_OVR);				// 自动写结束
                var.u.locat.word += LCDKUAN;
                
            }
        }
    }else{
    	for(i = 0;i < 2;i++){
            
    	    n = 0;
    	    for(j = 0;j < var.u.len;j++){
    	    	var.u.addr = ZK816_ADDR + 1 - i;
    	    	k = *(ptr + j);
    	    	var.u.addr += k * 16;
                for(k = 0;k < 8;k++){
    				var.u.movea.byte[n] = *(var.u.addr + (k * 2));
    				n++;
    			}
    			
    	    }
    	    writeh2s8();
    	}
    }
}
void disp_bmpb(unsigned char * ptr)

{
	unsigned char i,j,abuff[16];
	union{
    	unsigned char *	ptrb;
		unsigned char 	byte[2];
		//unsigned int 	word;
	}bmp;
	LCMCE = 0;
	LCMRD = 1;
	LCMWR = 1;
	LCMDIR = 0xff;
	var.u.kuan = (*(ptr + 5)) / 8;
	var.u.kuan %= LCDKUAN;
	var.u.gao = (*(ptr + 4));
	var.u.gao %= LCDGAO;
	var.u.len = var.u.gao / 8;
	//var.u.len %= 16;
	bmp.byte[0] = (*(ptr + 7));
 	bmp.byte[1] = (*(ptr + 6));
	var.u.addr = bmp.ptrb;
	if(var.u.kuan == 0xff){
		;
	}else if(var.u.kuan){//图像
		if(stc.flash.bit.dir){
     		var.u.locat.word = (*(ptr + 3)) * LCDKUAN + ((*(ptr + 2)) / 8);
     		for(i = 0;i < var.u.gao;i++){
    			fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]);	// 置地址指针
      			fnCmd(LC_AUT_WR);				// 自动写
    			for(j = 0;j < var.u.kuan;j++){
    				fnDataW(*var.u.addr);				// 写数据
    				var.u.addr++;
				    
				}
				fnCmd(LC_AUT_OVR);				// 自动写结束
    			var.u.locat.word += LCDKUAN;
    		}
 		}else{
 			for(i = 0;i < var.u.kuan;i++){
    			ptr = var.u.addr + var.u.kuan - 1 - i;
       			for(j = 0;j < 128;j++){
    				var.u.movea.byte[j] = *ptr;
    				ptr += var.u.kuan;
    			}
    			writeh2s8();
    		}
 		}
 	}else{//字符串
 				
 		for(i = 0;i < var.u.len;i++){
 			bmp.byte[1] = *var.u.addr;
 			if(bmp.byte[1] == 0xff){//立即数
 				abuff[i] =  *(var.u.addr + 1);
 			}else{
 				bmp.byte[0] = *(var.u.addr + 1);
 				abuff[i] =  *bmp.ptrb;
 			}
 			var.u.addr += 2;
 		}
 		disp_str(abuff);
 	}
 	LCMCE = 1;
 	
}
void disp_bmpbb(unsigned char * ptr)

{
	unsigned char i,j;
	union{
    	unsigned char *	ptrb;
		unsigned char 	byte[2];
		//unsigned int 	word;
	}bmp;
	LCMCE = 0;
	LCMRD = 1;
	LCMWR = 1;
	LCMDIR = 0xff;
	
	bmp.byte[0] = (*(ptr + 7));
 	bmp.byte[1] = (*(ptr + 6));
 	if(bmp.byte[1]){
		var.u.addr = bmp.ptrb;
		var.u.kuan = (*(ptr + 5)) / 8;
		var.u.kuan %= LCDKUAN;
		var.u.gao = (*(ptr + 4));
		var.u.gao %= LCDGAO;
	
		var.u.len = var.u.gao / 8;
		var.u.len %= 16;
		if(stc.flash.bit.dir){
    		var.u.locat.word = (*(ptr + 3)) * LCDKUAN + ((*(ptr + 2)) / 8);
    		for(i = 0;i < var.u.gao;i++){
    			fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]);	// 置地址指针
      	  		fnCmd(LC_AUT_WR);				// 自动写
    			for(j = 0;j < var.u.kuan;j++){
    				fnDataW(*var.u.addr);				// 写数据
    				var.u.addr++;
					    
				}
				fnCmd(LC_AUT_OVR);				// 自动写结束
    			var.u.locat.word += LCDKUAN;
  			}
  		}else{
  			var.u.locat.word = (*(ptr + 1)) * LCDKUAN + ((*(ptr + 0)) / 8);
    		for(i = 0;i < var.u.kuan;i++){
    	  		ptr = var.u.addr + var.u.kuan - 1 - i;
    			for(j = 0;j < 128;j++){
    				var.u.movea.byte[j] = *ptr;
    				ptr += var.u.kuan;
    			}
    			writeh2s8();
    		}
    	}
    }else{
  		if(stc.flash.bit.dir){
  			var.u.locat.word = (*(ptr + 3)) * LCDKUAN + ((*(ptr + 2)) / 8);
  			var.u.kuan = (*(ptr + 5)) / 8;
			var.u.kuan %= LCDKUAN;
			var.u.gao = (*(ptr + 4));
			var.u.gao %= LCDGAO;
		}else{
			var.u.locat.word = (*(ptr + 1)) * LCDKUAN + ((*(ptr + 0)) / 8);
			var.u.kuan = (*(ptr + 4)) / 8;
			var.u.kuan %= LCDKUAN;
			var.u.gao = (*(ptr + 5));
			var.u.gao %= LCDGAO;
		}
		for(i = 0;i < var.u.gao;i++){
    		fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]);	// 置地址指针
    		fnCmd(LC_AUT_WR);				// 自动写
    		for(j = 0;j < var.u.kuan;j++){
    			fnDataW(bmp.byte[0]);				// 写数据
    		}
    		fnCmd(LC_AUT_OVR);				// 自动写结束
    		var.u.locat.word += LCDKUAN;
  		}
  		
 	}   	
 	    	
 	LCMCE = 1;
 	
}
void get_str(unsigned char * asrc,unsigned char * adst,unsigned char len)
{
	unsigned char i,j,k;
	union{
    	
		unsigned char 	byte[2];
		unsigned char 	*ptr;
	}u;
	for(i = 0;i < len;){
		u.byte[0] = * asrc;
		asrc++;
		u.byte[1] = * asrc;
		asrc++;
		if(u.byte[1] == 0){//立即数
			adst[i] = u.byte[0];
			i++;
		}else if(u.byte[1] == 0xfc){//从起始地址取j个字符
			j = u.byte[0];
			u.byte[0] = * asrc;
			asrc++;
			u.byte[1] = * asrc;
			asrc++;
			for(k = 0;(k < j) && (i < len);k++){
				adst[i] = *(u.ptr + k);
				i++;
			}
		}else if(u.byte[1] == 0xfd){//从起始地址取jX2个压缩字符
			j = u.byte[0];
			u.byte[0] = * asrc;
			asrc++;
			u.byte[1] = * asrc;
			asrc++;
			for(k = 0;(k < j) && (i < len);k++){
				adst[i] = *(u.ptr + k) >> 4;
				i++;
				adst[i] = *(u.ptr + k) & 0x0f;
				i++;
			}
		}else{
			adst[i] = *u.ptr >> 4;
			i++;
			adst[i] = *u.ptr & 0x0f;
			i++;
		}
	}
}
void disp_bmp(unsigned char * ptr)

{
	unsigned char i,j,k,n;
	unsigned int 	aword;
	union{
    	
		unsigned char 	byte[32];
		struct{
			unsigned char c0;
			unsigned char c1;
			unsigned char x;
			unsigned char y;
			unsigned char kuan;
			unsigned char gao;
			unsigned char *ptro;
			unsigned char *ptrb;
			unsigned int aword;
			unsigned char byte[16];
		}bit;
	}bmp;
	
	bmp.bit.c0 = *ptr;
	/*
	if(stc.flash.bit.dir){
		ptr += 2;
	
	}else{
		ptr += 10;
		
    }
	for(i = 0;i < 10;i++){
		bmp.byte[i + 2] = *(ptr + i);
	}
	LCMCE = 0;
	var.u.locat.word = bmp.bit.y * LCDKUAN + (bmp.bit.x / 8);
 	var.u.kuan = bmp.bit.kuan / 8;
	var.u.kuan %= (LCDKUAN + 1);
	var.u.gao = bmp.bit.gao;
	var.u.gao %= (LCDGAO + 1);
	//var.u.len = var.u.gao / 8;
	//var.u.len %= 16;
	if((unsigned int)bmp.bit.ptro == 0){
		aword = 0;
	}else{
		aword = *bmp.bit.ptro;
	}
	aword *= var.u.kuan;
	aword *= var.u.gao;
	var.u.addr = bmp.bit.ptrb + aword;
	*/
	if(bmp.bit.c0 == 0){//清屏
		if(stc.flash.bit.dir){
			ptr += 2;
	
		}else{
			ptr += 10;
		
    	}
		for(i = 0;i < 10;i++){
			bmp.byte[i + 2] = *(ptr + i);
		}
		LCMCE = 0;
		var.u.locat.word = bmp.bit.y * LCDKUAN + (bmp.bit.x / 8);
 	 	var.u.kuan = bmp.bit.kuan / 8;
		var.u.kuan %= (LCDKUAN + 1);
		var.u.gao = bmp.bit.gao;
		var.u.gao %= (LCDGAO + 1);
		//var.u.len = var.u.gao / 8;
		//var.u.len %= 16;
		if((unsigned int)bmp.bit.ptro == 0){

⌨️ 快捷键说明

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