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

📄 spilcd.c

📁 此程序为遥控器接收程序,以通过测试,可放心使用,我是参照网上资料修改的,单片机是NEC78f0547,希望对个需要的人有所帮助
💻 C
📖 第 1 页 / 共 2 页
字号:
0x00,0x00,0x00,
/*--  文字:  g  --*/
0x00,0x00,0x00,
/*--  文字:  h  --*/
0x00,0x00,0x00,
/*--  文字:  i  --*/
0x00,0x00,0x00,
/*--  文字:  j  --*/
0x00,0x00,0x00,
/*--  文字:  k  --*/
0x00,0x00,0x00,
/*--  文字:  l  --*/
0x00,0x00,0x00,
/*--  文字:  m  --*/
0x00,0x00,0x00,
/*--  文字:  n  --*/
0x00,0x00,0x00,
/*--  文字:  o  --*/
0x00,0x00,0x00,
/*--  文字:  p  --*/
0x00,0x00,0x00,
/*--  文字:  q  --*/
0x00,0x00,0x00,
/*--  文字:  r  --*/
0x00,0x00,0x00,
/*--  文字:  s  --*/
0x00,0x00,0x00,
/*--  文字:  t  --*/
0x00,0x00,0x00,
/*--  文字:  u  --*/
0x00,0x00,0x00,
/*--  文字:  v  --*/
0x00,0x00,0x00,
/*--  文字:  w  --*/
0x00,0x00,0x00,
/*--  文字:  x  --*/
0x00,0x00,0x00,
/*--  文字:  y  --*/
0x00,0x00,0x00,
/*--  文字:  z  --*/
0x00,0x00,0x00,
/*--  文字:  {  --*/
0x00,0x00,0x00,
/*--  文字:  |  --*/
0x00,0x00,0x00,
/*--  文字:  }  --*/
0x00,0x00,0x00,
/*--  文字:  ~  --*/
0x00,0x00,0x00,
};
/*
*********************************************************************************************
start_coordinate:char start coordinate
val:it will be display char
*********************************************************************************************
*/
void bitchar_value(UINT8 start_coordinate, UINT8 val)
{
	if(val>0x1f)
	{
		switch(start_coordinate)
		{
		  
	   	/*第1个字符位置*/
	   	case 1:  
			   	n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
			   	n.TempData[3]=0x00;
			   	n.x=n.x<<4;
			   	LCDchar.char_num[0]&=0x0f;
			   	LCDchar.char_num[0]|=n.TempData[0];
			   	LCDchar.char_num[1]=n.TempData[1];
			   	LCDchar.char_num[2]&=0xfc;
			   	LCDchar.char_num[2]|=n.TempData[2];
	    	 break ; 
	    	 
	    	 
	   	/*第2个字符位置*/
	   	case 2:
			    n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
			   	n.TempData[3]=0x00;
			   	n.x=n.x<<3;
			   	LCDchar.char_num[2]&=0x07;
			   	LCDchar.char_num[2]|=n.TempData[0];
			   	LCDchar.char_num[3]=n.TempData[1];
			   	LCDchar.char_num[4]&=0xfc;
			   	LCDchar.char_num[4]|=n.TempData[2]; 
			   	break ;
	   	
	   	
	   	/*第3个字符位置*/
	   	case 3: 
			   	n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
			   	n.TempData[3]=0x00;
			   	n.x=n.x<<2;
			   	LCDchar.char_num[4]&=0x03;
			   	LCDchar.char_num[4]|=n.TempData[0];
			   	LCDchar.char_num[5] =n.TempData[1]; 
			   	break ; 
			   	
			   			
	   	/*第4个字符位置*/
	   	case 4:	
			  	n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=ASC_MSK[(val-0x1f)*3+2];
			   	n.TempData[3]=0x00;
			   	n.x=n.x<<1;
			  	LCDchar.char_num[6]&=0x01;
			   	LCDchar.char_num[6]|=n.TempData[0];
			   	LCDchar.char_num[7]&=0x80;
			   	LCDchar.char_num[7]|=n.TempData[1]; 
			   	break ; 
			   	
			   	
	   	/*第5个字符位置*/
	   	case 5: 
			  	n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=0x00;
			   	n.TempData[3]=0x00;
			   	LCDchar.char_num[8]=n.TempData[0];
			   	LCDchar.char_num[9]&=0xc0;
			   	LCDchar.char_num[9]|=n.TempData[1];
			    LCDchar.char_num[9]=n.TempData[1];
			    break ;	
			    
			    
	   	/*第6个字符位置*/
	   	case 6: 
			  	n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=0x00;
			   	n.TempData[3]=0x00;
			   	n.TempData[3]=n.TempData[0]&0x01;
			   	n.TempData[3]<<=7;
			   	LCDchar.char_num[9]&=0x7f;
			   	LCDchar.char_num[9]|=n.TempData[3]; 
			   	n.x=n.x>>1;  	
			   	LCDchar.char_num[10]=n.TempData[0];
			   	LCDchar.char_num[11]&=0xe0;
			   	LCDchar.char_num[11]|=n.TempData[1];
	   	    break ;	
	   	
	   	   
	   	/*第7个字符位置*/
	   	case 7: 
			  	n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=0x00;
			   	n.TempData[3]=0x00;
			   	n.TempData[3]=n.TempData[0]&0x03;
			   	n.TempData[3]=n.TempData[3]<<6;
			   	LCDchar.char_num[11]&=0x3f;
			  	LCDchar.char_num[11]|=n.TempData[3];  	
			   	n.x=n.x>>2;  	
			  	LCDchar.char_num[12]=n.TempData[0];
			   	LCDchar.char_num[13]&=0xf0;
			  	LCDchar.char_num[13]|=n.TempData[1];
			  	break ;	
			  	
			  	
	   	/*第8个字符位置*/
	   	case 8: 
			   	n.TempData[0]=ASC_MSK[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSK[(val-0x1f)*3+1];
			   	n.TempData[2]=0x00;
			   	n.TempData[3]=0x00;
			   	n.TempData[3]=n.TempData[0]&0x07;
			   	n.TempData[3]=n.TempData[3]<<5;
			   	LCDchar.char_num[13]&=0x1f;
			   	LCDchar.char_num[13]|=n.TempData[3]; 
			   	n.x=n.x>>3;  	
			  	LCDchar.char_num[14]=n.TempData[0];
			   	LCDchar.char_num[15]&=0xf8;
			  	LCDchar.char_num[15]|=n.TempData[1];
			  	break ;	  	
			  	
			  			
	   	/*第9个字符位置小字*/
	   	case 9: 
			  	n.TempData[0]=ASC_MSKsmall[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSKsmall[(val-0x1f)*3+1];
			   	n.TempData[2]=0x00;
			   	n.TempData[3]=0x00;
			   	n.TempData[3]=n.TempData[0]&0x01;
			   	n.TempData[3]=n.TempData[3]<<7;
			   	LCDchar.char_num[15]&=0x7f;
			   	LCDchar.char_num[15]|=n.TempData[3]; 
			   	n.x=n.x>>1; 
			   	n.TempData[2]=LCDchar.char_num[16]&0x60; 	
			  	LCDchar.char_num[16]=n.TempData[0]|n.TempData[2];  
			  	break ;  	
	   	/*第10个字符位置小字*/ 
	   	case 10:
			  	n.TempData[0]=ASC_MSKsmalltwo[(val-0x1f)*3+0];
			   	n.TempData[1]=ASC_MSKsmalltwo[(val-0x1f)*3+1];
			   	n.TempData[2]=0x00;
			   	n.TempData[3]=0x00;
			   	n.TempData[3]=n.TempData[0]&0x03;
			   	n.TempData[3]=n.TempData[3]<<5;
			   	LCDchar.char_num[16]&=0x9f;
			   	LCDchar.char_num[16]|=n.TempData[3]; 
			   	n.x=n.x>>3; 	
			   	LCDchar.char_num[17]&=0xe0;
			  	LCDchar.char_num[17]|=n.TempData[0]; 
			  	break ;	
			default :
			    break;
		}   		 	
	}
}
/*
*********************************************************************************************
*********************************************************************************************
*/
void delay(void)
{
	unsigned char i=0;
	for(i=0;i<50;i++)
	{
		;
	}
}
/*
*********************************************************************************************
*********************************************************************************************
*/
void lcd7528init(void)
{
  PM0.4=0;//CLK OUT MODE  
  PM0.3=0;
  PM0.5=0;
	CLR_CS;
	SET_LCDSCLK;
	SET_LCDDATA;
}
/*
*********************************************************************************************
function:单字节写
*********************************************************************************************
*/
void WriteByte7528( unsigned char bytedata)
{
 unsigned char i,val=0;
 
   val=bytedata;
   SET_LCDSCLK;
   for (i=0; i<8; i++)
	{
    CLR_LCDSCLK;
    delay();
    if(val & 0x01)
    SET_LCDDATA;
    else
    CLR_LCDDATA;
    delay();
    SET_LCDSCLK;
    delay();
    val >>=1;
  }
}
/*
*********************************************************************************************
FUNCTION:LCD 数据
*********************************************************************************************
*/
void LCD_SENDDATA(void)
{
 unsigned char i;
		CLR_CS;
		delay();
		WriteByte7528(0x41);
		SET_CS ;
		delay();
		delay();
	for (i=0; i<20; i++)
	{
	WriteByte7528(LCDchar.char_num[i]);
	}

		CLR_LCDSCLK;
		delay();
		SET_LCDSCLK;
		delay();
		delay();
		CLR_CS;		
}
/*
*********************************************************************************************
Function:char display
start_coordinate:char start coordinate
fmt:char string   
num:1~10
*********************************************************************************************
*/
void eprintf(UINT8 start_coordinate,char *fmt,...)
{
	UINT8 i,uLen;
	va_list arg_ptr;
	char  c1,c2;
	uLen=0;
	va_start(arg_ptr,fmt);
	uLen = (unsigned char)vsprintf(display, fmt, arg_ptr) ;
	va_end(arg_ptr);
	if(start_coordinate>10)
	{
	start_coordinate=0;
	}	
	c2=start_coordinate+uLen;
	if(c2<=11)
	{
		while(i<uLen)
		{
			c1 = display[i];
			if(c1 >= 0)
			{	
	     bitchar_value(start_coordinate,c1);
	    
			}
			start_coordinate++;
			i++;
		}	
		LCD_SENDDATA();
  }
}
/*
*********************************************************************************************
*********************************************************************************************
*/
void clearchar(void)
{
	UINT8 i;
		CLR_CS;
		delay();
		WriteByte7528(0x41);
		SET_CS ;
		delay();
		delay();
		for(i=0;i<19;i++)
		{
			LCDchar.char_num[i]=0x00;	
			WriteByte7528(LCDchar.char_num[i]);
		}
		CLR_LCDSCLK;
		delay();
		SET_LCDSCLK;
		delay();
		delay();
		CLR_CS;		
}
/*
*********************************************************************************************
function:specialties char display
num:specialties char display coordinate  1~10
*********************************************************************************************
*/
void spec_char_display(UINT8 num,UINT8 fit)
{
	UINT8 tempdata=0;
	switch(num)
	{
		case 1:
		    if(fit)
		    {
		    	tempdata=LCDchar.char_num[0];
		    	tempdata|=0x0f;
		    	LCDchar.char_num[0]=tempdata;
			    tempdata=LCDchar.char_num[4];
		    	tempdata|=0x02;	    	
		    	LCDchar.char_num[4]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[0];
		    	tempdata&=0xf0;
		    	LCDchar.char_num[0]=tempdata;
			    tempdata=LCDchar.char_num[4];
		    	tempdata&=0xfd;	    	
		      LCDchar.char_num[4]=tempdata;	
		    	LCD_SENDDATA();		    	
		    }
		 break;	
		case 2:
		    if(fit)
		    {
			    tempdata=LCDchar.char_num[2];
		    	tempdata|=0x04;	    	
		    	LCDchar.char_num[2]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[2];
		    	tempdata&=0xfb;
		    	LCDchar.char_num[2]=tempdata;
		    	LCD_SENDDATA();		    	
		    }		
		 break;	
		case 3:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[7];
		    	tempdata|=0x80;	    	
		    	LCDchar.char_num[7]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[7];
		    	tempdata&=0x7f;
		    	LCDchar.char_num[7]=tempdata;
		    	LCD_SENDDATA();		    	
		    }	
		 break;	
		case 4:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[9];
		    	tempdata|=0x40;	    	
		    	LCDchar.char_num[9]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[9];
		    	tempdata&=0xbf;
		    	LCDchar.char_num[9]=tempdata;
		    	LCD_SENDDATA();		    	
		    }			    	
		 break;	
		case 5:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[11];
		    	tempdata|=0x20;	    	
		    	LCDchar.char_num[11]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[11];
		    	tempdata&=0xdf;
		    	LCDchar.char_num[11]=tempdata;
		    	LCD_SENDDATA();		    	
		    }			
		 break;	
		case 6:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[13];
		    	tempdata|=0x10;	    	
		    	LCDchar.char_num[13]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[13];
		    	tempdata&=0xef;
		    	LCDchar.char_num[13]=tempdata;
		    	LCD_SENDDATA();		    	
		    }				
		 break;	
		case 7:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[15];
		    	tempdata|=0x08;	    	
		    	LCDchar.char_num[15]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[15];
		    	tempdata&=0xf7;
		    	LCDchar.char_num[15]=tempdata;
		    	LCD_SENDDATA();		    	
		    }				
		 break;	
		case 8:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[15];
		    	tempdata|=0x10;	    	
		    	LCDchar.char_num[15]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[15];
		    	tempdata&=0xef;
		    	LCDchar.char_num[15]=tempdata;
		    	LCD_SENDDATA();		    	
		    }				
		 break;	
		case 9:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[15];
		    	tempdata|=0x20;	    	
		    	LCDchar.char_num[15]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[15];
		    	tempdata&=0xdf;
		    	LCDchar.char_num[15]=tempdata;
		    	LCD_SENDDATA();		    	
		    }			
		 break;	
		case 10:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[15];
		    	tempdata|=0x40;	    	
		    	LCDchar.char_num[15]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[15];
		    	tempdata&=0xbf;
		    	LCDchar.char_num[15]=tempdata;
		    	LCD_SENDDATA();		    	
		    }			
		 break;	
		case 11:
				if(fit)
		    {
			    tempdata=LCDchar.char_num[17];
		    	tempdata|=0x20;	    	
		    	LCDchar.char_num[17]=tempdata;	
		    	LCD_SENDDATA();
		    }
		    else
		    {
		    	tempdata=LCDchar.char_num[17];
		    	tempdata&=0xdf;
		    	LCDchar.char_num[17]=tempdata;
		    	LCD_SENDDATA();		    	
		    }				
		 break;	
		default :
		 break;	
	}
}





⌨️ 快捷键说明

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