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

📄 shipsysfunc.c

📁 用51单片机的一些接口函数
💻 C
字号:
void show_data(double  print,uchar hang,uchar lie,uchar wei);//第i行第j列开始显示,显示wei个数,格式为科学计数法或小数
void show_bfs(double print,uchar hang,uchar lie,uchar wei);//第i行第j列开始显示,显示wei个数,格式为百分数(0~1)
void write_data(uint datas,uchar i,uchar j);



void write_char (uchar  word_data[16],uchar  hang,uchar  lie )        //对LCD进行字符写入											
{//hang 1-4  ,lie1-16
	uchar  i;
	uchar lie1;
	if(hang<=4&&lie<=16)
	{
	if(lie<=8)
     	 for(i=0;i<16;i++)
	     {
			 if(i%2==0)
			 {
				 _nop_();
			      setlstartx(strat_xaddr+2*hang-2);//设置行1
		          setlstarty(strat_yaddr+8*lie-8+i/2);//设置列
		          lcdlwrite(word_data[i]);
			 }
			else
			{
				_nop_();
			    setlstartx(strat_xaddr+2*hang-1);//设置行1
		        setlstarty(strat_yaddr+8*lie-8+i/2);//设置列
		        lcdlwrite(word_data[i]);
			}
				_nop_();
		}

		else
     {
	     lie1=lie-8;
 	     for(i=0;i<16;i++)
	     {
			 if(i%2==0)
			 {
				 _nop_();

			      setrstartx(strat_xaddr+2*hang-2);//设置行1
		          setrstarty(strat_yaddr+8*lie1-8+i/2);//设置列
		          lcdrwrite(word_data[i]);
			 }
			else
			{
				_nop_();
			    setrstartx(strat_xaddr+2*hang-1);//设置行1
		        setrstarty(strat_yaddr+8*lie1-8+i/2);//设置列
		        lcdrwrite(word_data[i]);
			}
				_nop_();
  		
		}
	
	}
	}
	else
			_nop_();

}

/*            对LCD进行汉字字符串写入*/
void write_string(uchar  word_data2[],uchar  hang,uchar  lie,uchar  word_len)
{
	uchar    i,j,lie1;	
	uchar    index;
	uchar   buffer[16]; 
	index=(hang-1)*16 +(lie-1); 
	for (i=0;i<word_len;i++)//最多显示64个字符
	{	
		
		for(j=0;j<16;j++)
  	 		buffer[j]= word_data2[i*16+j];
	
		if((index+i)<64)//不超出显示范围
		{
			if(i+lie>16&&i+lie<=32)
			{   
			    lie1=i+lie-16;
				write_hanzi(buffer,hang+1,lie1);
			}
			else if(i+lie>32&&i+lie<=48)
			{   
			    lie1=i+lie-32;
				write_hanzi(buffer,hang+2,lie1);
			}
			else if(i+lie>48&&i+lie<=64)
			{   
			    lie1=i+lie-48;
				write_hanzi(buffer,hang+3,lie1);
			}
			else
			{
				lie1=i+lie;
			    write_hanzi(buffer,hang,lie1) ;
			}
		}
		else
	        break;	
	}
    
}
/*            对LCD进行汉字字符写入*/
void  write_hanzi(uchar  word_datas1[32], uchar  hang,uchar  lie )
{
uchar  i;
uchar  lie1;

	if(hang<=4&&lie<=8)
	   {
		if(lie<=4)
 
 	     for(i=0;i<32;i++)
	     {
			 if(i%2==0)
			 {
				 _nop_();
			      setlstartx(strat_xaddr+2*hang-2);//设置行1
		          setlstarty(strat_yaddr+16*lie-16+i/2);//设置列
		          lcdlwrite(word_datas1[i]);
			 }
			else
			{
				_nop_();
			    setlstartx(strat_xaddr+2*hang-1);//设置行1
		        setlstarty(strat_yaddr+16*lie-16+i/2);//设置列
		        lcdlwrite(word_datas1[i]);
			}
				_nop_();
		}
		else
		{
		 lie1=lie-4;
 	     for(i=0;i<32;i++)
	     {
			 if(i%2==0)
			 {
				 _nop_();
			      setrstartx(strat_xaddr+2*hang-2);//设置行1
		          setrstarty(strat_yaddr+16*lie1-16+i/2);//设置列
		          lcdrwrite(word_datas1[i]);
			 }
			else
			{
				_nop_();
			    setrstartx(strat_xaddr+2*hang-1);//设置行1
		        setrstarty(strat_yaddr+16*lie1-16+i/2);//设置列
		        lcdrwrite(word_datas1[i]);
			}
				_nop_();
  		
		}
	}
	}
	else
			_nop_();
}	




/*对LCD进行汉字字符串写入*/

void  write_chinese(uchar  word_datas2[],uchar  hang,uchar  lie,uchar  word_len)

{
	uchar    i,j,lie1;	
	uchar    index;
	uchar   buffer[32]; 
	index=(hang-1)*8 +(lie-1);  //第一个汉字的 index(qian mian kong chu de ge shu)
	for (i=0;i<word_len;i++)//最多显示32个汉字
	{	
		
		for(j=0;j<32;j++)//每个汉字有32个数据
  	   {
			
				buffer[j]= word_datas2[i*32+j];
		  	
		}
		if((index+i)<=32)//不超出显示范围
		{
			if(i+lie>8&&i+lie<=16)
			{   
			    lie1=i+lie-8;
				write_hanzi(buffer,hang+1,lie1);
			}
			else if(i+lie>16&&i+lie<=24)
			{   
			    lie1=i+lie-16;
				write_hanzi(buffer,hang+2,lie1);
			}
			else if(i+lie>24&&i+lie<=32)
			{   
			    lie1=i+lie-24;
				write_hanzi(buffer,hang+3,lie1);
			}
			else
			{
				lie1=i + lie;
			    write_hanzi(buffer,hang,lie1) ;
			}
		}
			else
	            break;	
	}
			
}

void write_datas(uint datas,uchar i,uchar j)//第i行第j列开始显示;注:data的值0~9之间
{
     if(datas<10)
     {
		 switch(datas)
		 {
		 case 0:
			 write_char(shuzi0,i,j);
			 break;
         case 1:
			 write_char(shuzi1,i,j);
			 break;
         case 2:
			 write_char(shuzi2,i,j);
			 break;
		 case 3:
			 write_char(shuzi3,i,j);
			 break;
		 case 4:
			 write_char(shuzi4,i,j);
			 break;
		 case 5:
			 write_char(shuzi5,i,j);
			 break;
         case 6:
			 write_char(shuzi6,i,j);
			 break;
         case 7:
			 write_char(shuzi7,i,j);
			 break;
		 case 8:
			 write_char(shuzi8,i,j);
			 break;
		 case 9:
			 write_char(shuzi9,i,j);
			 break;
		 }
	 }
     else 
		 _nop_();
}



void show_data(double print,uchar hang,uchar lie,uchar wei)
{
	 long printz;
	 bit biaozhi;
	 uint  m=0;
	 uint  counter=0;
	 biaozhi=0;
	 if(print>=10000||print<=0.0001)//科学计数法
     {   if(print>=10)
		 {
		 biaozhi=1;
	      for(;;)
		  {		      
              print=print/10; 
			  counter++;
			  if(print<10)
				  break;
			  else
				  _nop_();
		  }
		 }
         else if(print<1&&print>0)
		 {
		 for(;;)
		 {
		      print=print*10;
 			  counter++;
			  if(print>=1)
				  break;
			  else
				  _nop_();
		 }
		 }
	     else if(print>=1&&print<10)
		     biaozhi=1;
	     else
		     _nop_();
	 
	     for(m=0;m<=wei;m++)
		 {
		 if(m==1)
		     _nop_();	 
	     else
		 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_data(printz,hang,lie+m);
	         print=print*10;
		 }
		 }
	     write_string(dian,hang,lie+1);
	     write_string(space,hang,lie+wei+1);
	     write_string(exp,hang,lie+wei+2);
	     if(biaozhi==0)
		     write_string(fuhao,hang,lie+wei+3);
	     else
	         write_string(space,hang,lie+wei+3);
	     write_data(counter,hang,lie+wei+4);
	}
	else//小数表示
	{
		 if(print>=10)
		 {
			 for(;;)
			 {		      
              print=print/10; 
			  counter++;
			  if(print<10)
				  break;
			  else
				  _nop_();
			 }
		 }
	     for(m=0;m<=wei;m++)
		 {
			 if(m==counter+1&&m!=wei)
				write_string(dian,hang,lie+counter+1); 
			 else
			 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_data(printz,hang,lie+m);
	         print=print*10;
			 }
          }
	}
}
void show1(double print,uchar hang,uchar lie,uchar wei)//百分数
{
     long printz;
	 bit biaozhi;
	 uint  m=0;
	 uint  counter=0;
	 biaozhi=0;
	 if(print<1&&print>0)
     {
		 print=print*100;
		 if(print>=10)
		 {
              biaozhi=1;
			  print=print/10;
		 }
	     for(m=0;m<=wei;m++)
		 {
		 if(m==1&&biaozhi==0)
		     _nop_();
		 else if(m==2&&biaozhi==1)
		     _nop_();	
	     else
		 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_datas(printz,hang,lie+m);
	         print=print*10;
		 }
		 }
		 if(biaozhi==0)
	         write_char(dian,hang,lie+1);
		 else
			 write_char(dian,hang,lie+2);
	     write_char(baifenhao,hang,lie+wei+1);
	}
	else
		_nop_();

} 


/*void write_data(uint datas,uchar i,uchar j)//第i行第j列开始显示;注:data的值0~9之间
{
     if(datas<10)
     {
		 switch(datas)
		 {
		 case 0:
			 write_string(shuzi0,i,j);
			 break;
         case 1:
			 write_string(shuzi1,i,j);
			 break;
         case 2:
			 write_string(shuzi2,i,j);
			 break;
		 case 3:
			 write_string(shuzi3,i,j);
			 break;
		 case 4:
			 write_string(shuzi4,i,j);
			 break;
		 case 5:
			 write_string(shuzi5,i,j);
			 break;
         case 6:
			 write_string(shuzi6,i,j);
			 break;
         case 7:
			 write_string(shuzi7,i,j);
			 break;
		 case 8:
			 write_string(shuzi8,i,j);
			 break;
		 case 9:
			 write_string(shuzi9,i,j);
			 break;
		 }
	 }
     else 
		 _nop_();
}
*/
//数值的液晶显示
/*void show_data(double print,uchar hang,uchar lie,uchar wei)
{
	 long printz;
	 bit biaozhi;
	 uint  m=0;
	 uint  counter=0;
	 biaozhi=0;
	 if(print>=10000||print<=0.0001)//科学计数法
     {   if(print>=10)
		 {
		 biaozhi=1;
	      for(;;)
		  {		      
              print=print/10; 
			  counter++;
			  if(print<10)
				  break;
			  else
				  _nop_();
		  }
		 }
         else if(print<1&&print>0)
		 {
		 for(;;)
		 {
		      print=print*10;
 			  counter++;
			  if(print>=1)
				  break;
			  else
				  _nop_();
		 }
		 }
	     else if(print>=1&&print<10)
		     biaozhi=1;
	     else
		     _nop_();
	 
	     for(m=0;m<=wei;m++)
		 {
		 if(m==1)
		     _nop_();	 
	     else
		 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_data(printz,hang,lie+m);
	         print=print*10;
		 }
		 }
	     write_string(dian,hang,lie+1);
	     write_string(space,hang,lie+wei+1);
	     write_string(exp,hang,lie+wei+2);
	     if(biaozhi==0)
		     write_string(fuhao,hang,lie+wei+3);
	     else
	         write_string(space,hang,lie+wei+3);
	     write_data(counter,hang,lie+wei+4);
	}
	else//小数表示
	{
		 if(print>=10)
		 {
			 for(;;)
			 {		      
              print=print/10; 
			  counter++;
			  if(print<10)
				  break;
			  else
				  _nop_();
			 }
		 }
	     for(m=0;m<=wei;m++)
		 {
			 if(m==counter+1&&m!=wei)
				write_string(dian,hang,lie+counter+1); 
			 else
			 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_data(printz,hang,lie+m);
	         print=print*10;
			 }
          }
	}
}
*/
/*void show_bfs(double print,uchar hang,uchar lie,uchar wei)//百分数(0~1)
{
     long printz;
	 bit biaozhi;
	 uint  m=0;
	 uint  counter=0;
	 biaozhi=0;
	 if(print<1&&print>0)
     {
		 print=print*100;
		 if(print>=10)
		 {
              biaozhi=1;
			  print=print/10;
		 }
	     for(m=0;m<=wei;m++)
		 {
		 if(m==1&&biaozhi==0)
		     _nop_();
		 else if(m==2&&biaozhi==1)
		     _nop_();	
	     else
		 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_data(printz,hang,lie+m);
	         print=print*10;
		 }
		 }
		 if(biaozhi==0)
	         write_string(dian,hang,lie+1);
		 else
			 write_string(dian,hang,lie+2);
	     write_string(baifenhao,hang,lie+wei+1);
	}
	else
		_nop_();

} 
*/

//数值的液晶显示
void show_data(double print,uchar hang,uchar lie,uchar wei,bit key_dot)
{
	 long printz;
	 bit biaozhi;
	 uint  m=0;
	 uint  counter=0;
	 biaozhi=0;
	 if(print>=1000||print<=0.001)//科学计数法
     {   if(print>=10)
		 {
		 biaozhi=1;
	      for(;;)
		  {		      
              print=print/10; 
			  counter++;
			  if(print<10)
				  break;
			  else
				  _nop_();
		  }
		 }
         else if(print<1&&print>0)
		 {
		 for(;;)
		 {
		      print=print*10;
 			  counter++;
			  if(print>=1)
				  break;
			  else
				  _nop_();
		 }
		 }
	     else if(print>=1&&print<10)
		     biaozhi=1;
	     else
		     _nop_();
	 
	     for(m=0;m<=wei;m++)
		 {
		 if(m==1)
		     _nop_();	 
	     else
		 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_data(printz,hang,lie+m,key_dot);
	         print=print*10;
		 }
		 }
     	 if(key_dot==0)
	     {
 			 write_string(dian,hang,lie+1);
	     	 write_string(space,hang,lie+wei+1);
	     	 write_string(exp,hang,lie+wei+2);
	     	 if(biaozhi==0)
		     	 write_string(fuhao,hang,lie+wei+3);
	     	 else
	         	 write_string(space,hang,lie+wei+3);
         }
		 else
		 {
             write_string2(dian2,hang,lie+1);
	     	 write_string2(space2,hang,lie+wei+1);
	     	 write_string2(exp2,hang,lie+wei+2);
	     	 if(biaozhi==0)
		     	 write_string2(fuhao2,hang,lie+wei+3);
	     	 else
	         	 write_string2(space2,hang,lie+wei+3);
	         	
		 }
		 write_data(counter,hang,lie+wei+4,key_dot);
	}
	else//小数表示
	{
		 if(print>=10)
		 {
			 for(;;)
			 {		      
              print=print/10; 
			  counter++;
			  if(print<10)
				  break;
			  else
				  _nop_();
			 }
		 }
	     for(m=0;m<wei;m++)
		 {
			 if(m==counter+1&&m!=wei-1)
             {
                 if(key_dot==0)
			 	 		write_string(dian,hang,lie+counter+1);
                 else
						write_string2(dian2,hang,lie+counter+1);
             }
			 else if(m==counter+1&&m==wei-1)
			 	 _nop_();
			 else
			 {
			 printz=(long)(print);
			 printz=printz%10;
			 write_data(printz,hang,lie+m,key_dot);
	         print=print*10;
			 }
             
		 }
	}
}


uint read_ad(void)
{//1549
    uchar i;
	uint ad_rec=0x0000;
	ad_cs=0;
	delay(10);
	for(i=0;i<10;i++)
	{
		ad_clk=0;
		delay(2);
		if(ad_in==1)
			ad_rec++;
		else
			_nop_();
		if(i<9)
			ad_rec=ad_rec<<1;
		delay(2);
		ad_clk=1;

	}
	ad_clk=0;
	ad_cs=1;
	
	return ad_rec;	
}
void da_write(uint da_data)
{//5618
	uchar i;
	//uint DA_DATA = da_data << 4; //将数据有效位移至高10位存储。
	uint DA_DATA = da_data+49152;
	da_cs = 0;
	for(i=0;i<=15;i++)
	{
		da_clk = 0;
		if((da_data & 0x8000) == 0x8000)
		{
			da_out = 1;
		}
		else
		{
			da_out = 0;
		}
		da_clk = 1;
		da_data = da_data << 1;
	}
	da_clk = 0;
	da_cs = 1; 
}

⌨️ 快捷键说明

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