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

📄 lcd.h

📁 LGM12864液晶显示的proteus仿真 包括温度显示,日历调整显示
💻 H
字号:
#ifndef _LCD_12864
#define _LCD_12864
/*****************************预定义**************************************/
#define uchar unsigned char
#define uint unsigned int
/***************************12864管脚配置****************************/
#define port P3
sbit busy=P3^7;
sbit cs1=P1^6;
sbit cs2=P1^7;
sbit  rs=P1^0;
sbit  rw=P1^1;
sbit   e=P1^2;
/********************************************************************************************
* 函数名称:Delay()
* 功    能:延迟时间=a*1ms
* 入口参数:
* 出口参数:无
*********************************************************************************************/
void Delay(uint a)
{
   uchar  i;
   while(a--)
   for(i=0;i<125;i++);
}
/********************************************************************************************
* 函数名称:Lcd_Display_On()
* 功    能:LCD显示开
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Display_On()
{  
   port=0x3f;
   rs=0;
   rw=0;
   e=1;
   e=0;  
}
/********************************************************************************************
* 函数名称:Lcd_Display_Off()
* 功    能:LCD显示关
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Display_Off()
{  
   port=0x3e;
   rs=0;
   rw=0;
   e=1;
   e=0;  
}
/********************************************************************************************
* 函数名称:Lcd_Set_X(uchar x)
* 功    能:LCD设置X坐标
* 入口参数:x 
* 出口参数:无
*********************************************************************************************/
void Lcd_Set_X(uchar x)
{  
   port=0xb8|x;
   rs=0;
   rw=0;
   e=1;
   e=0;  
}
/********************************************************************************************
* 函数名称:Lcd_Set_Y(uchar y)
* 功    能:LCD设置Y坐标
* 入口参数:y
* 出口参数:无
*********************************************************************************************/
void Lcd_Set_Y(uchar y)
{  
   port=0x40|y;
   rs=0;
   rw=0;
   e=1;
   e=0;  
}
/********************************************************************************************
* 函数名称:Lcd_Set_X_Y(uchar x, uchar y )
* 功    能:LCD设置x y坐标
* 入口参数:x y
* 出口参数:无
*********************************************************************************************/
void Lcd_Set_X_Y(uchar x, uchar y)
{  
   
   if( y<64 )
      { cs1=1; cs2=0; Lcd_Set_Y( y ); }
   else
      { cs1=0; cs2=1; Lcd_Set_Y( y-64 );  }
    Lcd_Set_X( x);
}
/********************************************************************************************
* 函数名称:Lcd_Write_Command()
* 功    能:写指令代码
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Command(uchar temp)
{  
   port=temp;
   rs=0;
   rw=0;
   e=1;
   e=0;  
}
/********************************************************************************************
* 函数名称:Lcd_Write_Data()
* 功    能:写数据
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Data(uchar temp)
{  
   port=temp;
   rs=1;
   rw=0;
   e=1;
   e=0;  
}
/****************************************************************************
* 名称:Lcd_character_16X8(void)
* 功能:显示16X8字符(字母)      
* 入口参数:x y data
* 出口参数:无
****************************************************************************/
void Lcd_Character_16X8(uchar x, uchar y, uchar code *point)
{
   uchar i , j,temp;
   temp=y;
   for( i=0; i<2; i++ )
   {
      x+=i;
	  y=temp;
      for( j=0;j<8;j++ )
      {
         Lcd_Set_X_Y( x, y ); y++;
         Lcd_Write_Data( point[ i*8 + j] );  
      } 
   }
}
/****************************************************************************
* 名称:Lcd_character_16*16(void)
* 功能:显示16*16字符(汉字)       
* 入口参数:x y data
* 出口参数:无
****************************************************************************/
void Lcd_Character_16X16(uchar x, uchar y, uchar code *point)
{
   uchar i,j,temp ;
   temp=y;
   for( i=0; i<2; i++ )
   {
      x+=i;
	  y=temp;
      for( j=0;j<16;j++ )
      {
         Lcd_Set_X_Y( x, y ); y++;
         Lcd_Write_Data( point[ i*16 + j] );  
      } 
   }
}
/*******************************************************************************************
* 函数名称:Lcd_Initial()
* 功    能:初始化LCD
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Initial()
{  
   cs1=1;cs2=1;
   Lcd_Display_Off();
   Lcd_Write_Command(0xb8);     //Page_Add
   Lcd_Write_Command(0x40);     //Col_Add
   Lcd_Write_Command(0xc0);     //Start_Line
   Lcd_Display_On();
}
/****************************************************************************
* 名称:Lcd_Clear(void)
* 功能:清屏        
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Lcd_Clear()
{
   uchar i,j;
   cs1=1;cs2=1;
   for(i=0;i<8;i++)
   {
      Lcd_Set_X( i );
      Lcd_Set_Y( 0 );
      for(j=0;j<64;j++)
         Lcd_Write_Data(0x00);
   }
}
/****************************************************************************
* 名称:Lcd_Clock()
* 功能:显示时间       
* 入口参数:无
* 出口参数:无                 
* 说明    : 时间数组 BCD 码形式
****************************************************************************/
void Lcd_Clock(uchar *point)
{
   uchar i=0;

                                             //显示   Time:   
   Lcd_Character_16X8(4,0,clock_logo[5]);  
   Lcd_Character_16X8(4,8,clock_logo[6]);
   Lcd_Character_16X8(4,16,clock_logo[7]);
   Lcd_Character_16X8(4,24,clock_logo[8]);
   Lcd_Character_16X8(4,32,clock_logo[9]);
    
   i= *point >> 4;
   Lcd_Character_16X8(6,48, letter_logo[i]);    //显示   sec的高位
   i= *point & 0x0f;
   Lcd_Character_16X8(6,56, letter_logo[i]);    //显示   sec的低位
   point++;

   Lcd_Character_16X8(6, 40 , letter_logo[10]);  //显示   :

   i= *point >> 4;
   Lcd_Character_16X8(6, 24, letter_logo[i]);    //显示   min的高位
   i= *point & 0x0f;
   Lcd_Character_16X8(6, 32, letter_logo[i]);    //显示   min的低位
   point++;

   Lcd_Character_16X8(6, 16 , letter_logo[10]);  //显示   :

   i= *point >> 4;
   Lcd_Character_16X8(6, 0 , letter_logo[i]);    //显示   hour的高位
   i= *point & 0x0f;
   Lcd_Character_16X8(6, 8 , letter_logo[i]);    //显示   hour的低位
   point++;

   
                                                
                                                 //显示   Data:
   Lcd_Character_16X8(0,0,clock_logo[0]);  
   Lcd_Character_16X8(0,8,clock_logo[1]);
   Lcd_Character_16X8(0,16,clock_logo[2]);
   Lcd_Character_16X8(0,24,clock_logo[3]);
   Lcd_Character_16X8(0,32,clock_logo[4]);
                                                 //显示   "year-month-day"
   i= *point >> 4;
   Lcd_Character_16X8(2, 48, letter_logo[i]);    //显示   day的高位
   i= *point & 0x0f;
   Lcd_Character_16X8(2, 56, letter_logo[i]);    //显示   day的低位  
   point++;
   
   Lcd_Character_16X8(2, 40, letter_logo[11]);   //显示   -
   
   i= *point >> 4 ;
   Lcd_Character_16X8(2, 24, letter_logo[i]);    //显示   month的高位
   i= *point & 0x0f;
   Lcd_Character_16X8(2, 32, letter_logo[i]);    //显示   month的低位
   point++;

   Lcd_Character_16X8(2, 16, letter_logo[11]);   //显示 

   
   i = ( *point ) & 0x0f;
   Lcd_Character_16X16(6, 104, week_logo[i]);    //显示   日 一 二 三 四 五 六   
   Lcd_Character_16X16(6, 88,  week_logo[8]);    //显示   期
   Lcd_Character_16X16(6, 72,  week_logo[7]);    //显示   星
   point++;

   i= *point >>  4;
   Lcd_Character_16X8(2, 0, letter_logo[i]);      //显示   year的高位
   i= *point & 0x0f;
   Lcd_Character_16X8(2, 8, letter_logo[i]);     //显示   year的低位
}
/****************************************************************************
* 名称:Lcd_Sensor()
* 功能:显示温度    
* 入口参数:无
* 出口参数:无                 
* 说明    : 
****************************************************************************/
void Lcd_Sensor(uchar *point)
{
   uchar temp;
   
                                               //显示  TEMP:
   Lcd_Character_16X8(0,64,sensor_logo[0]);  
   Lcd_Character_16X8(0,72,sensor_logo[1]);
   Lcd_Character_16X8(0,80,sensor_logo[2]);
   Lcd_Character_16X8(0,88,sensor_logo[3]);
   

   switch( *point & 0x0f )                    //查表 精确到 0.1  °C
   {
      case 0x00: temp = 0; break;
      case 0x01: temp = 0; break;
      case 0x02: temp = 1; break;
      case 0x03: temp = 2; break;
      case 0x04: temp = 2; break;
      case 0x05: temp = 3; break;
      case 0x06: temp = 4; break;
      case 0x07: temp = 4; break;
      case 0x08: temp = 5; break;
      case 0x09: temp = 6; break;
      case 0x0a: temp = 6; break;
      case 0x0b: temp = 7; break;
      case 0x0c: temp = 8; break;
      case 0x0d: temp = 8; break;
      case 0x0e: temp = 9; break;
      case 0x0f: temp = 9; break;
      default:  break;
   } 
   Lcd_Character_16X8( 2,112,sensor_logo[6] );
   Lcd_Character_16X8( 2,104,sensor_logo[5] );
   Lcd_Character_16X8( 2,96,letter_logo[temp] );  //  小数位
   Lcd_Character_16X8( 2,88,sensor_logo[4] );
   temp = ( *point )>>4;
   point++;
   temp |= ( *point )<<4;
   Lcd_Character_16X8( 2,80,letter_logo[ temp % 10 ] ); //个位
   Lcd_Character_16X8( 2,72,letter_logo[ temp /10 ] );  //十位
   
}
/********************************************************************************/
#endif

⌨️ 快捷键说明

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