📄 lcd.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 + -