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

📄 lcd.c

📁 本实例是关于pic单片机fyd12864的并口程序 希望大家喜欢
💻 C
字号:
#include<p18f452.h>
#include"delays.h"
/**
*   LCD.[R/W]        RC5         1=读   0=写
*   LCD.[R/S]        RC7         1=数据 0=指令
//*   LCD.[E]          RC6         1->0  写数据或指令  1=读数据或指令
*   LCD.[DATA]       PORTD
**/




#define   LCD_Data      PORTD
#define   DIR_Data	    TRISD
#define   DIR_Con	    TRISC
#define   LCD_RS	    PORTCbits.RC5    	// 命令或数据
#define   LCD_WR        PORTCbits.RC6       // 读写控制
#define   LCD_E		    PORTCbits.RC7     // 使能控制



/***********************************************************************
** 函数名称: 	 lcdbusywait()
** 功能描述:     等待液晶空闲
** 输 入: 	 无    
** 输 出:       状态   

***********************************************************************/
char lcdbusywait(void)							//等待LCD就绪
{   

    char Status;
    DIR_Data=0XFF;
	LCD_RS=0;
	LCD_WR=1;
	LCD_Data=0xFF;
	LCD_E=1;
	Status=LCD_Data;
	LCD_E=0;
	while(Status & 0x80)
	{
		
		LCD_E=1;
		Status=LCD_Data;
		LCD_E=0;
	}
	LCD_WR=0;
    DIR_Data=0X00;
	return Status;
}


/***********************************************************************
** 函数名称: 	writedatalcd( char lcd_data)
** 功能描述: 	写入一字节数据
** 输 入: 	    unsigned char lcd_data
** 输 出:             无

***********************************************************************/

void writedatalcd( char date) 
{   
 
 //   lcdbusywait();
    LCD_WR=0;
	LCD_RS= 1;
    Nop();
    Nop();
    LCD_E = 1;
    Nop();
    Nop();
    LCD_Data= date;
	LCD_E = 0;
    
    delays(20,2);  // delay for more than X uS	 
}

/***********************************************************************
** 函数名称: 	 writecmdlcd(char lcd_cmd)
** 功能描述:       send command  
** 输 入: 	      unsigned char LCD_Cmd
** 输 出:             无

***********************************************************************/
void writecmdlcd(char cmd)
{
//	lcdbusywait();
    LCD_WR=0;	
	LCD_RS = 0;
    Nop();
    Nop();
    LCD_E = 1;
    Nop();
    Nop();
    LCD_Data= cmd;
	LCD_E = 0;
    delays(20,2);  // delay for more than X uS	     
}
/*********************************************************************
** 函数名称: 	lcd_initial()
** 功能描述: 	LCD初始化
** 输 入: 	无
** 输 出:      无
** 备注  :
***********************************************************************/
void lcd_initial(void)
{
    DIR_Data = 0x00;

	DIR_Con = DIR_Con&0x1f;
	LCD_E = 0;
	LCD_WR = 0;
	LCD_RS = 0;
    
	writecmdlcd(0x3B);     //数据选择8位
        delays( 60,2 );  

	writecmdlcd(0x3B);     //数据选择8位
        delays( 60,2 );        
	
	writecmdlcd(0x0f);     // 显示开,光标开, 游标位置反白允许
        delays( 60,2 );       	

	writecmdlcd(0x01);     //清屏
	delays( 60,2 );      
	
}

/***********************************************************************
** 函数名称: 	lcd_set_cursor( char CurY,  char CurX)
** 功能描述: 	set position
** 输 入: 	 char CurY,  char CurX
** 输 出:      无
***********************************************************************/
void lcd_set_cursor( char CurY,  char CurX)
{   
	switch(CurY)
	  {
		  case 1:  writecmdlcd(0X80+CurX-1); 
		           break;    // 写入第一行CurX列的地址
		  case 2:  writecmdlcd(0X90+CurX-1);
		           break;    // 写入第二行CurX列的地址
		  case 3:  writecmdlcd(0X88+CurX-1);
		           break;    // 写入第三行CurX列的地址
		  case 4:  writecmdlcd(0X98+CurX-1);
		           break;    // 写入第四行CurX列的地址
		  default: break;
	   }
           
}


/***********************************************************************
** 函数名称: 	putslcd( char *Str)
** 功能描述: 	输出字符串
** 输 入: 	     *Str
** 输 出:           无
***********************************************************************/
void putslcd( char *Str)
{   
   char Str_Temp;
   while (1)
   {
	Str_Temp = *Str ;

		if (Str_Temp != 0x00 )
		   {
			writedatalcd(Str_Temp) ;
			Str ++ ;
		   }
		else
			return ;
   }
}

/***********************************************************************
** 函数名称: 	display_int
** 功能描述: 	在指定位置显示一个整数
** 输 入: 	int intdata   
** 输 出:     
***********************************************************************/
void display_int(int intdata)
{
     char i=0;
     char temp[5];
     char lenghth;
 
   if (intdata==0)
    {
     writedatalcd('0');
    }  

while (intdata>0)
    {
       temp[i]=intdata%10+48;
       intdata/=10;
       i++;
    }
	   
	lenghth = i;  
	   
    for (i=lenghth;i-- ;)
    {
	    writedatalcd(temp[i]);    
	}	   
	   
}

/***********************************************************************
** 函数名称: 	display_float
** 功能描述: 	在指定位置显示一个小数
** 输 入: 	int fltdata   
** 输 出:      
** 备注  :     显示四位小数
***********************************************************************/
void display_float(float fltdata)
{  
    float fltfrag;
    char temp[4];
    char i;
	
    fltfrag = fltdata -(int)fltdata;
	display_int((int)fltdata);
	
	writedatalcd('.');
	
	for (i=0 ;i<4 ;i++)
	{ 
	   fltfrag*=10;
       temp[i]=(int)(fltfrag)+48;
       fltfrag-=(int)fltfrag;

	}
	
	for (i=0 ; i<4; i++)
	{
       writedatalcd(temp[i]);
    }
}
/***********************************************************************
** 函数名称: 	display_float
** 功能描述: 	在指定位置显示一个小数
** 输 入: 	int fltdata   
** 输 出:      
** 备注  :     显示四位小数
***********************************************************************/
void display_float3bit(float fltdata)
{  
    float fltfrag;
    char temp[3];
    char i;
	
    fltfrag = fltdata -(int)fltdata;
	display_int((int)fltdata);
	
	writedatalcd('.');
	
	for (i=0 ;i<3 ;i++)
	{ 
	   fltfrag*=10;
       temp[i]=(int)(fltfrag)+48;
       fltfrag-=(int)fltfrag;

	}
	
	for (i=0 ; i<3; i++)
	{
       writedatalcd(temp[i]);
    }
}



/***********************************************************************
** 函数名称: 	 clearlcd(void)
** 功能描述:     清除液晶显示
** 输 入: 	 无    
** 输 出:       无   

***********************************************************************/
void clearlcd(void)
{

       writecmdlcd(0x01);     //清屏
       delays( 60,2 );      
	
}
/***********************************************************************
** 函数名称: 	 lcd_picture(void)
** 功能描述:     图片液晶显示
** 输 入: 	 无    
** 输 出:       无   

***********************************************************************/

void lcd_picture( const rom  char *puts )
{
     char i,j,k;
	 int bb=0;
  
	clearlcd();
	writecmdlcd(0x40);	                  //Set Display Start Line = com0
	for(i=0;i<=0x1F;i++)
	{  
       for(j=0;j<0x08;j++)
       {
         writecmdlcd(0x36);
    
	     writecmdlcd((0x80|i));	//Set Page Address
	     writecmdlcd((0x80|j));	//Set Column Address = 0

         writecmdlcd(0x32);
 
         for(k=0;k<2;k++)
            {
              writedatalcd(puts[bb]);

              bb++;
            }
		}

	}
	for(i=0;i<=0x1F;i++)
	{  
       for(j=0x08;j<0x10;j++)
       {
         writecmdlcd(0x36);

	     writecmdlcd((0x80|i));	//Set Page Address
	     writecmdlcd((0x80|j));	//Set Column Address = 0

         writecmdlcd(0x32);

           for(k=0;k<2;k++)
            {
              writedatalcd(puts[bb]);

              bb++;
            }
		}

	}
}




⌨️ 快捷键说明

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