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

📄 lcd.c

📁 基于c8051f020的应用
💻 C
📖 第 1 页 / 共 2 页
字号:
   	  {hz_temp[i] =~(*(ptr + i));}
      if(fx == 1) 
   	  {hz_temp[i] =*(ptr + i);} 
	  k = hz_temp[i];
	}

   for (i = 0; i < 8;i++)
    {
	  hzdata[i] = 0;	
	  j = i;
      hzdata[i] = (((hz_temp[0] << j) & 0x80) >>7) | (((hz_temp[1] << j) & 0x80) >> 6);
      hzdata[i] |= (((hz_temp[2] << j) & 0x80) >> 5)  | (((hz_temp[3] << j) & 0x80) >> 4);
      hzdata[i] |= (((hz_temp[4] << j) & 0x80) >> 3)  | (((hz_temp[5] << j) & 0x80) >> 2);
      hzdata[i] |= (((hz_temp[6] << j) & 0x80) >> 1)  | ((hz_temp[7] << j) & 0x80) ;
	}
	k = page1 >> 3;

    if(k > 7) k &= 0x07 ;
	j = page1 & 0x07;
	if(j == 0) {ii = 0; ij = 0xf0;}
	else if(j == 1) {ii = 1; ij = 0xe1;}
	else if(j == 2) {ii = 0x03; ij = 0xc3;}
	else if(j == 3) {ii = 0x07; ij = 0x87;}
	else if(j == 4) {ii = 0x0f; ij = 0x0f;}
	else if(j == 5) {ii = 0x1f; ij = 0xf7;}
	else if(j == 6) {ii = 0x3f; ij = 0xfc;}
	else if(j == 7) {ii = 0x7f; ij = 0xf8;}
	if(val)// 清除原位置内容
	{
		for(i = 0; i < 8; i++)
		{

			st_data = disp_ram[k][column1 + i-2 ];
		   	disp_ram[k][column1 + i - 2] = (st_data & ii) | (hzdata[i] << j) ;
		   	if(k < 7)
		   	{
	    		st_data = disp_ram[k+1][column1+i-2];
	 			disp_ram[k+1][column1+i-2] = (st_data & ~ii) | (hzdata[i] >> (8-j));
	  		}
	  		else
			{
			    st_data = disp_ram[0][column1+i-2];
			    disp_ram[0][column1+i-2] = (st_data & ~ii) | (hzdata[i] >> (8-j));
			}
  		}
	}
	
	else//保留原位置内容
	{
		for(i = 0; i < 8; i++)
		{
			st_data = disp_ram[k][column1 + i-2 ];
		   	disp_ram[k][column1 + i - 2] = st_data | (hzdata[i] << j) ;

		   	if(k < 7)
		   	{
	    		st_data = disp_ram[k+1][column1+i-2];
		  		disp_ram[k+1][column1+i-2] = st_data  | (hzdata[i] >> (8-j));
	  		}
	  		else
			{
			    st_data = disp_ram[0][column1+i-2];
	  			disp_ram[0][column1+i-2] = st_data   | (hzdata[i] >> (8-j));
			}
  		}
	}

}
//**************************************************************************************************************************
//显示12*12汉字,思路是先放前面的12个字符,这将会分两页来完成,写每页的时候先把要显示的区域清空,
//再写上要写的内容。再写后面的12个字符,这将会出现在第二和第三页上,也是先把要显示的区域清空?//写第二页的的时候要注意保留写前12个字符时的内容,所以清空第二页的时候有可能是保留上下两头的数据,
void display_hz1212(unsigned char* hz_idptr,unsigned char page,unsigned char column)
{
	unsigned  char xdata i,j,k,st_data;
	unsigned  char xdata ii,ij,jj;
	unsigned  char xdata hzdata[24];
	unsigned  char xdata page1,column1;
	
	page1 = page;
	column1 = column;
	if(column1 > 117) column1 = 2;
	
	for(i = 0;i < 24;i ++)
	{	
	 	hzdata[i] = *hz_idptr ++;
	
	}
	k = page1/8;//传入的page1是行地址,k为实际的页地址
	if(k > 7) k = (k % 8);
	j = page1%8;//j为除以8后的数,表示离标准的页地址中的第一行的距离
	if(j == 0) {ii = 0; ij = 0xf0;jj = 0xFF;}
	else if(j == 1) {ii = 1; ij = 0xe1;jj = 0xFF;}//当要显示的输出现在页的第1行(之前是第0行),需要把之后的7行都清空
	else if(j == 2) {ii = 0x03; ij = 0xc3;jj = 0xFF;}//ii表示上面的第一页需要与上(清空)的数。ij表示下面的第三页需要与上(清空)的数
	else if(j == 3) {ii = 0x07; ij = 0x87;jj = 0xFF;}
	else if(j == 4) {ii = 0x0f; ij = 0x0f;jj = 0xFF;}
	else if(j == 5) {ii = 0x1f; ij = 0xf7;jj = 0xFE;}
	else if(j == 6) {ii = 0x3f; ij = 0xfc;jj = 0xFC;}
	else if(j == 7) {ii = 0x7f; ij = 0xf8;jj = 0xF8;}
	
	for(i = 0; i < 12; i++)//送前12个数
	{
		st_data = disp_ram[k][column1+i-2];//先取出要覆盖的页所在的数值然后并上要显示的数值
		//当column=0时,存入disp_ram[0][126]中,当column=1时,存入disp_ram[0][127]中,
		disp_ram[k][column1+i-2] = (st_data & ii) | (hzdata[i] << j) ;
		if(k < 7)
		{
			st_data = disp_ram[k+1][column1+i-2];//头一页不够显示上8个BIT时,下一页接着显示
			disp_ram[k+1][column1+i-2] = (st_data & ~ii) | (hzdata[i] >> (8-j));
		}
		else//当要从最后一页开始显示时,放不下,回到第一页开始显示
		{
			st_data = disp_ram[0][column1+i-2];
			disp_ram[0][column1+i-2] = (st_data & ~ii) | (hzdata[i] >> (8-j));
		}
		
	}
	k ++;//送后16个数,要么只在第二页,要么在第二页第三页都有
	if(k > 7) k = 0;
	for(i = 0; i < 12; i++)
	{
		st_data = disp_ram[k][column1+i-2];//如果从BD4之前的行开始显示,跨越的页数不会超过3
		if(j <= 4) disp_ram[k][column1+i-2] = (st_data & ij) | (hzdata[i+12] << j) ;
		//如果从BD4之后的行开始显示,跨越的页数为3
		else disp_ram[k][column1+i-2] = (st_data & ii) | (hzdata[i+12] << j) ;	
			if(j >= 5)
		{
			if(k < 7)
				{//开始处理第三页内容
				 st_data = disp_ram[k+1][column1+i-2];
				 disp_ram[k+1][column1+i-2] = (st_data & jj) | (hzdata[i+12] >> (8-j));
	
				}
				else
				{
				 st_data = disp_ram[0][column1+i-2];
				 disp_ram[0][column1+i-2] = (st_data & jj) | (hzdata[i+12] >> (8-j));
						
		   		}
		 }
	 }
}
//**************************************************************************************************************************
//显示汉字串,入口为欲显示字符代码串指针,显示列值,行值,间隔
void disp_chn_str(unsigned char *addr_da,  unsigned  char disp_y,unsigned  char disp_x,unsigned char x_step,unsigned char zishu)
{  
	unsigned char ia;
	unsigned int int_chn;
	unsigned int chn_aint;
	unsigned char  block_addr;
	unsigned char * ptr;
 
	ia = *addr_da++;
	while((ia)&&(zishu))
	{
		if(ia & 0x80)
		{
			*((char*)(&int_chn)) = ia;
			*(((char*)(&int_chn)) + 1) = *addr_da++;
		}
		else
		{
			*((char*)(&int_chn)) = ia;
			*(((char*)(&int_chn)) + 1) = 0x30;
		}
		ia = *addr_da++;
		for(block_addr = 0; block_addr < 236; block_addr++)
		{
			*((char*)(&chn_aint)) = hz_lib[block_addr][0];
			*(((char*)(&chn_aint)) + 1) = hz_lib[block_addr][1];
			if(chn_aint == int_chn)
			{ptr = &hz_lib[block_addr][2];	break; }	
		}
		display_hz1212(ptr, disp_y, disp_x);
		disp_x += x_step;
		if(zishu != 1)
		{zishu -= 2;}
	}
}
//**************************************************************************************************************************
void LCD_SHOW_TIME(void)
{
	LCD_DispStr(Clock_Date_Str,TimeShowAddrY1,TimeShowAddrX);
	LCD_DispStr(Clock_Time_Str,TimeShowAddrY2,TimeShowAddrX);
}
/*
//**************************************************************************************************************************
void LCD_SHOW_ADC(void)
{
	xdata unsigned char i;
	xdata float tempf;

	for(i=0;i<7;i++)
	{
		tempf=(float)(RTUaddress4[i*2+12]*256 + RTUaddress4[i*2+13])*2500/4095;
		sprintf(Str_Buffer,"AI%f",(float)(i+1));
		LCD_DispStr(Str_Buffer,i*8,72);
		sprintf(Str_Buffer,":%4.3f:",tempf/1000);
		LCD_DispStr(Str_Buffer,i*8,90);
	}
}
*/
/*
//**************************************************************************************************************************
void LCD_SHOW_DAC(void)
{
	sprintf(Str_Buffer,"AO1:%4.3fV",(float)(RTUaddress4[28]*256 + RTUaddress4[29])/1000);
	LCD_DispStr(Str_Buffer,0,5);
	sprintf(Str_Buffer,"AO2:%4.3fV",(float)(RTUaddress4[30]*256 + RTUaddress4[31])/1000);
	LCD_DispStr(Str_Buffer,8,5);
}
/*
/*
//**************************************************************************************************************************
void LCD_SHOW_DI(void)
{
	//sprintf(DI_Data,"DI:%8.0b",RTUaddress4[9]);
	DI_Data[3] =((RTUaddress4[9] & 0x80)/0x80 | 0x30);
	DI_Data[4] =((RTUaddress4[9] & 0x40)/0x40 | 0x30);
	DI_Data[5] =((RTUaddress4[9] & 0x20)/0x20 | 0x30);
	DI_Data[6] =((RTUaddress4[9] & 0x10)/0x10 | 0x30);
	DI_Data[7] = 0x20;
	DI_Data[8] =((RTUaddress4[9] & 0x08)/0x08 | 0x30);
	DI_Data[9] =((RTUaddress4[9] & 0x04)/0x04 | 0x30);
	DI_Data[10]=((RTUaddress4[9] & 0x02)/0x02 | 0x30);
	DI_Data[11]=((RTUaddress4[9] & 0x01)/0x01 | 0x30);
	LCD_DispStr(DI_Data,48,5);
}
*/
//**************************************************************************************************************************
void LCD_SHOW_BatVol(void)
{
	xdata unsigned int temp;

	temp=RTUaddress4[10]*256 + RTUaddress4[11];
	temp=(unsigned int)((float)temp/4095*2500*4.378);
	sprintf(Str_Buffer,"%3.2fV",(float)temp/1000);
	LCD_DispStr(Str_Buffer,52,95);
}
//**************************************************************************************************************************
void LCD_SHOW_WellSaveStation(void)
{
	sprintf(Str_Buffer,"W:%02.0f",(float)NowWellNum);
	LCD_DispStr(Str_Buffer,52,60);
	Display_Data();
}
//**************************************************************************************************************************
void LCD_SHOW_InstantaneousSpeed(void)
{
	sprintf(Str_Buffer,"S:%4.1fc/m  ",InstantaneousSpeed);
	LCD_DispStr(Str_Buffer,52,10);
	Display_Data();
}
/*
//**************************************************************************************************************************
void LCD_SHOW_KEY(unsigned char keybutton)
{
	sprintf(Str_Buffer,"%03.0f",(float)keybutton);
	LCD_DispStr(Str_Buffer,32,5);
}
*/
//**************************************************************************************************************************
// The End
//**************************************************************************************************************************

⌨️ 快捷键说明

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