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

📄 disp.c

📁 基于AVR的一种程序,智能控制器,可用于低压无功补偿部分,
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "public.h"
#include "disp.H"
#include "p_main.H"


/*地址线:A1为CS1;A2为CS2;A3为D/I;A3为HIGH则为数据;A3为低则为命令;*/
ioport unsigned int port8001;
ioport unsigned int port8002;
ioport unsigned int port8005;
ioport unsigned int port8006;
#define LCD_CODE1    port8002 
#define LCD_CODE2	 	 port8001
#define LCD_DATA1		 port8006
#define LCD_DATA2		 port8005


void Delay(unsigned int time)
{
	while(time--);
}

void Lw(unsigned int x,unsigned int y,unsigned int dd)
{
	unsigned int temp=0;
	if(y<64)
		{
			temp=x|0x0b8;
			LCD_CODE1=temp;
			Delay(8);
			temp=y|0x40;
			LCD_CODE1=temp;
			Delay(8);
			LCD_DATA1=dd;
			Delay(8);
		}
		else
			{
				temp=x|0x0b8;
				LCD_CODE2=temp;
				Delay(8);
				temp=(y-64)|0x40;
				LCD_CODE2=temp;
				Delay(8);
				LCD_DATA2=dd;
				Delay(8);
			}
}

void	Lcd_Init(void)
{
	unsigned int x,y;
	LCD_CODE1=0X3F;
	Delay(8);
	LCD_CODE1=0X0C0;
	Delay(8);
	LCD_CODE2=0X3F;
	Delay(8);
	LCD_CODE2=0X0C0;
	Delay(8);
	for(x=0;x<8;x++)
	 {
	 	for(y=0;y<128;y++)
	 	 {
	 	   Lw(x,y,0x00);
	 	   Delay(8);
	 	 }
	 }	
}

void Wr_Cchar(uint x,uint y,uint color,uint *pp)
{
	unsigned int j,dd;	
	 for(j=0;j<6;j++)
	  {
	  	dd=*(pp+j);
	  	if(color==1)dd=0x0ffff-dd;           /*等于一反显*/
	  	Lw(x,(y+j),dd);Delay(8);	  	
	  }
}

/************************************************************/
/*函数功能:整形数据转成字符,显示*/
/*入口参数:X地址 Y地址 小数点位数 整数位数 整形数据*/
/*出口参数:无 */
/*字符:6*8 */
/*作者:刘勇 */
/************************************************************/
void Pr_IntToChar(uint  x_addr,uint y_addr,uint dian,uint zheng,uint color,uint dd)
{
	uint i,j,temp;
	uint bcd_wei[5];
	bcd_wei[0]=dd%10;
	bcd_wei[1]=dd/10%10;
	bcd_wei[2]=dd/100%10;
	bcd_wei[3]=dd/1000%10;
	bcd_wei[4]=dd/10000;
	
	if(zheng==0)                                                   /*整数*/
		{
			Wr_Cchar(x_addr,y_addr,color,&chin_6[0]);
		}
		else
			{
				j=zheng+dian-1;
				for(i=0;i<zheng;i++,j--)				
					Wr_Cchar(x_addr,(y_addr+6*i),color,&chin_6[bcd_wei[j]*6]);				
			}
	
	if(dian!=0)
		{
			temp=zheng*6;
			Wr_Cchar(x_addr,(temp+y_addr),color,&chin_6[0x0a2]);          /*小数点*/		
			temp=(zheng+1)*6;
			j=dian-1;	
			for(i=0;i<dian;i++,j--)	
			Wr_Cchar(x_addr,(temp+6*i+y_addr),color,&chin_6[bcd_wei[j]*6]);		
		}
}

/****************************************************/
/*函数功能:显示8*8的字符数据*/
/*入口参数:X地址 Y地址 整形数据*/
/*出口参数:无*/
/*字符:8*8 */
/*作者:刘勇 */
/****************************************************/

void Wr_Cch8(uint x,uint y,uint color,uint *pp)
{
	unsigned int j,dd;	
	 for(j=0;j<8;j++)
	  {
	  	dd=*(pp+j);
	  	if(color==1)dd=0x0ffff-dd;           /*等于一反显*/
	  	Lw(x,(y+j),dd);Delay(2);	  	
	  }
}

/****************************************************/
/*函数功能:显示6*12的字符数据*/
/*入口参数:X地址 Y地址 整形数据*/
/*出口参数:无*/
/*字符:6*12 */
/*作者:刘勇 */
/****************************************************/

void Wr_Cch12(unsigned int x,unsigned int y,uint color,unsigned int *pp)
{
	unsigned int j,dd;
	
	 for(j=0;j<12;j++)
	  {
	  	dd=*(pp+j);
	  	if(j<6)
	  		 {
	  		  if(color==1){dd=0x0ffff-dd;dd&=0x0f0;}
	  		 	Lw(x,(y+j),dd);
	  		 	Delay(2);
	  		 }
	  		else 
	  			{
	  				if(color==1){dd&=0x0ff;dd=0x0ff-dd;}
	  				Lw((x+1),(y+j-6),dd);
	  				Delay(2);
	  			}
	  }	
}

/************************************************************/
/*函数功能:整形数据转成字符,显示*/
/*入口参数:X地址 Y地址 小数点位数 整数位数 字符下横线标志 整形数据*/
/*出口参数:无 */
/*字符:6*12 */
/*作者:刘勇 */
/************************************************************/
void Pr_IntTo12(uint x_addr,uint y_addr,uint dian,uint zheng,uint key,uint dd)
{
	uint i,j,temp;
	uint bcd_wei[5];
	bcd_wei[0]=dd%10;
	bcd_wei[1]=dd/10%10;
	bcd_wei[2]=dd/100%10;
	bcd_wei[3]=dd/1000%10;
	bcd_wei[4]=dd/10000;	
	
	if(zheng==0)                                                   /*整数*/
		{
			if(p_key==key)
	 	 		{
	 	 		 if(enter_flag==1)Wr_Cch12(x_addr,y_addr,1,&chin_13[0]);			
	 	 			 else Wr_Cch12(x_addr,y_addr,1,&chin_12[0]);				 	 							
	 	 		}
	 	 		else Wr_Cch12(x_addr,y_addr,0,&chin_12[0]);			
		}
		else
			{
				j=zheng+dian-1;
				for(i=0;i<zheng;i++,j--)				
				{
					if(p_key==key)
	 	 				{
	 	 					if(enter_flag==1)Wr_Cch12(x_addr,(y_addr+6*i),1,&chin_13[bcd_wei[j]*12]);			
	 	 						else Wr_Cch12(x_addr,(y_addr+6*i),1,&chin_12[bcd_wei[j]*12]);				 	 							
	 	 				}
	 	 				else Wr_Cch12(x_addr,(y_addr+6*i),0,&chin_12[bcd_wei[j]*12]);
				}					
			}
	
	if(dian!=0)
		{
			temp=zheng*6;
			if(p_key==key)                    /*小数点*/		
	 	 		{
	 	 		 if(enter_flag==1)Wr_Cch12(x_addr,(temp+y_addr),1,&chin_13[0x78]);	 	 		 	
	 	 			 else Wr_Cch12(x_addr,(temp+y_addr),1,&chin_12[0x78]);	 	 		 	
	 	 		}
	 	 		else Wr_Cch12(x_addr,(temp+y_addr),0,&chin_12[0x78]);	 	 		 	
	 	 			
			temp=(zheng+1)*6;
			j=dian-1;	
			for(i=0;i<dian;i++,j--)	                            /*小数*/
			{
				if(p_key==key)
	 	 				{
	 	 					if(enter_flag==1)Wr_Cch12(x_addr,(temp+y_addr+6*i),1,&chin_13[bcd_wei[j]*12]);			
	 	 						else Wr_Cch12(x_addr,(temp+y_addr+6*i),1,&chin_12[bcd_wei[j]*12]);				 	 							
	 	 				}
	 	 				else Wr_Cch12(x_addr,(temp+y_addr+6*i),0,&chin_12[bcd_wei[j]*12]);
			}		
		}
}

/****************************************************/
/*函数功能:显示12*12的汉字数据*/
/*入口参数:X地址 Y地址 整形数据*/
/*出口参数:无*/
/*汉字:12*12 */
/*作者:刘勇 */
/****************************************************/

void Wr_Chinese(unsigned int x,unsigned int y,uint color,unsigned int *pp)
{
	unsigned int j,dd;
	
	 for(j=0;j<24;j++)
	  {
	  	dd=*(pp+j);
	  	if(j<12)
	  		 {
	  		  if(color==1){dd=0x0ffff-dd;dd&=0x0f0;}
	  		 	Lw(x,(y+j),dd);
	  		 	Delay(2);
	  		 }
	  		else 
	  			{
	  				if(color==1){dd&=0x0ff;dd=0x0ff-dd;}
	  				Lw((x+1),(y+j-12),dd);
	  				Delay(2);
	  			}
	  }	
}

void P_Screen1(void)
{
	uint i,m;
			
	for(i=0;i<12;i++)
	{
		m=scr1_data[i];
		Wr_Chinese(scr1_site1[i],scr1_site2[i],0,&chin_24[m]);           
	}
	
	switch(p_key)
	{
		case 0:
			for(i=0;i<4;i++)
			{
				m=scr1_data[i];
				Wr_Chinese(scr1_site1[i],scr1_site2[i],1,&chin_24[m]);           
			}			
		break;
		case 1:			
			for(i=4;i<8;i++)
			{
				m=scr1_data[i];
				Wr_Chinese(scr1_site1[i],scr1_site2[i],1,&chin_24[m]);           
			}
		break;
		case 2:			
			for(i=8;i<12;i++)
			{
				m=scr1_data[i];
				Wr_Chinese(scr1_site1[i],scr1_site2[i],1,&chin_24[m]);           
			}
		break;	
		default: break;	
	}
}


void P_Screen2(void)
{
	uint i,m,st_out;	
	st_out=0x0001;
	for(i=0;i<18;i++)
	{
		m=scr2_data[i];
		Wr_Cchar(scr2_site1[i],scr2_site2[i],0,&chin_6[m]);
	}
	for(i=0;i<3;i++)	
	Pr_IntToChar((i+3),14,2,3,0,up1_data.avr_u[i]);	
	for(i=0;i<3;i++)
	Pr_IntToChar((i+3),56,1,3,0,up1_data.avr_i[i]);	
	for(i=0;i<3;i++)
	{
		if(cos_flag[i]==1)Wr_Cchar((i+3),92,0,&chin_6[0x0d8]);
			else Wr_Cchar((i+3),92,0,&chin_6[0x0de]);		
		Pr_IntToChar((i+3),98,3,1,0,up1_data.avr_c[i]);		
  }
  
  if(tou_flag[0]==1||tou_flag[1]==1||tou_flag[2]==1||tou_flag[3]==1)      /*投切标志*/
  	Wr_Cch8(7,6,0,&chin_8[0x30]);
  	else if(qie_flag[0]==1||qie_flag[1]==1||qie_flag[2]==1||qie_flag[3]==1)
  		Wr_Cch8(7,6,0,&chin_8[0x38]);
  		else
  			Wr_Cch8(7,6,0,&chin_8[0x40]);
  
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,20,1,&chin_6[0x06]);      /*1*/
  	else Wr_Cchar(7,20,0,&chin_6[0x06]);
 	
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,28,1,&chin_6[0x0c]);      /*2*/
  	else Wr_Cchar(7,28,0,&chin_6[0x0c]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,36,1,&chin_6[0x12]);     /*3*/
  	else Wr_Cchar(7,36,0,&chin_6[0x12]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,44,1,&chin_6[0x18]);      /*4*/
  	else Wr_Cchar(7,44,0,&chin_6[0x18]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,52,1,&chin_6[0x1e]);     /*5*/
  	else Wr_Cchar(7,52,0,&chin_6[0x1e]);
  		
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,60,1,&chin_6[0x24]);     /*6*/
  	else Wr_Cchar(7,60,0,&chin_6[0x24]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,68,1,&chin_6[0x2a]);     /*7*/
  	else Wr_Cchar(7,68,0,&chin_6[0x2a]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,76,1,&chin_6[0x30]);     /*8*/
  	else Wr_Cchar(7,76,0,&chin_6[0x30]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cchar(7,84,1,&chin_6[0x36]);     /*9*/
  	else Wr_Cchar(7,84,0,&chin_6[0x36]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cch8(7,92,1,&chin_8[0x00]);      /*10*/
  	else Wr_Cch8(7,92,0,&chin_8[0x00]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cch8(7,102,1,&chin_8[0x08]);     /*11*/
  	else Wr_Cch8(7,102,0,&chin_8[0x08]);
  
  st_out<<=1;
  if((st_out&up1_data.c_status)>0)Wr_Cch8(7,113,1,&chin_8[0x10]);     /*12*/
  	else Wr_Cch8(7,113,0,&chin_8[0x10]);
  
}

void P_Screen3(void)
{
	uint i,m;	
	for(i=0;i<17;i++)
	{
		m=scr3_data[i];
		Wr_Cchar(scr3_site1[i],scr3_site2[i],0,&chin_6[m]);
	}	
	for(i=0;i<3;i++)
	{
		if(p_flag[i]==1)Wr_Cchar((i+3),22,0,&chin_6[0x0d8]);
			else Wr_Cchar((i+3),22,0,&chin_6[0x0de]);
		Pr_IntToChar((i+3),28,1,3,0,up1_data.avr_p[i]);		
  }
	for(i=0;i<3;i++)
	{
		if(q_flag[i]==1)Wr_Cchar((i+3),75,0,&chin_6[0x0d8]);
			else Wr_Cchar((i+3),75,0,&chin_6[0x0de]);
		Pr_IntToChar((i+3),81,1,3,0,up1_data.avr_q[i]);		
	}	
	Wr_Chinese(6,0,0,&chin_24[0x108]);             /*频*/
	Wr_Chinese(6,12,0,&chin_24[0x120]);            /*率*/
	Pr_IntToChar(7,60,2,2,0,up1_data.avr_f);	
}

void P_Screen4(void)
{
	uint i,m;	
	
	for(i=0;i<18;i++)
	{
		m=scr4_data[i];
		Wr_Cch12(scr4_site1[i],scr4_site2[i],0,&chin_12[m]);		
	}				
	
	for(i=0;i<6;i++)
	{
		m=scr4_data1[i];
		Wr_Chinese(scr4_site3[i],scr4_site4[i],0,&chin_24[m]);             
	}
		
	Pr_IntTo12(3,34,0,2,9,set_yg[3]);
	Pr_IntTo12(3,46,0,2,9,set_yg[2]);
	Pr_IntTo12(3,58,0,2,9,set_yg[1]);
	Wr_Cch12(3,70,0,&chin_12[0x78]);	 	 		 	
	Pr_IntTo12(3,76,0,2,9,set_yg[0]);
	
	
	Pr_IntTo12(5,34,0,2,9,set_wg[3]);
	Pr_IntTo12(5,46,0,2,9,set_wg[2]);
	Pr_IntTo12(5,58,0,2,9,set_wg[1]);
	Wr_Cch12(5,70,0,&chin_12[0x78]);	 	 		 	
	Pr_IntTo12(5,76,0,2,9,set_wg[0]);
	
	
	Pr_IntTo12(0,44,0,2,9,p_year);
	Pr_IntTo12(0,62,0,2,9,p_month);
	Pr_IntTo12(0,80,0,2,9,p_day);
	Pr_IntTo12(0,98,0,2,9,p_hour);
	Pr_IntTo12(0,116,0,2,9,p_minute);
	Pr_IntToChar(2,116,0,2,0,p_second);	
		
}

void P_Screen5(void)
{
	uint i,m;	
	for(i=0;i<20;i++)
	{
		m=scr5_data[i];
		Wr_Cchar(scr5_site1[i],scr5_site2[i],0,&chin_6[m]);
	}
	
	for(i=0;i<3;i++)
	Pr_IntToChar((i+3),24,1,2,0,up2_data.avr_zxb[i]);	
	for(i=0;i<3;i++)
	Pr_IntToChar((i+3),86,1,2,0,up2_data.avr_zxb[i+3]);	
}

void P_Screen6(void)
{
	uint i,m;	
	for(i=0;i<14;i++)
	{
		m=scr6_data[i];
		Wr_Cchar(scr6_site1[i],scr6_site2[i],0,&chin_6[m]);
	}
	Wr_Cch8(5,0,0,&chin_8[0x08]);

⌨️ 快捷键说明

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