怎么把12864F-1改成12864B的显示程序#ifndef _LCD_12864
#define _LCD_12864
/*****************************预定义**************************************/
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RST=P0^1;
sbit LCD_SC =P0^4;
sbit LCD_SI =P0^3;
sbit LCD_CS =P0^0;
sbit LCD_A0 =P0^2;
uchar code dis_col=128,dis_page=8;
uchar Simula
tion=1; //实物制作时请设置0,
仿真测试时请设置1
/***************************12864管脚配置****************************/
/********************************************************************************************
* 函数名称:delayx()
* 功 能:延迟时间=a*1ms
* 入口参数:
* 出口参数:无
*********************************************************************************************/
void delayx(unsigned int ms)
{
unsigned char j;
while(ms--)
{
for(j = 0; j < 120; j++);
}
}
void LCD_Reset(void)
{
//delayx(50);//delay_ms(10);
LCD_RST=0; //复位
delayx(50);//delay_ms(10); //延时 1ms
LCD_RST=1;
delayx(50);//delay_ms(10);
}
//*******************************************************************
//送一个字节程序
//*******************************************************************
void SendBit(uchar dat,uchar bitcnt)
{
uchar i;
for(i=0;i<bitcnt;i++)
{
LCD_SC=0;
if(( dat & 0x80 ) == 0)
LCD_SI=0;
else
LCD_SI=1;
LCD_SC=1;
dat=dat<<1;
}
}
/********************************************************************************************
* 函数名称:Lcd_Write_Command()
* 功 能:写指令代码
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Command(uchar ctrlcode)
{
LCD_CS=0;
LCD_A0=0;
SendBit(ctrlcode,8);
LCD_CS=1;
}
/********************************************************************************************
* 函数名称:Lcd_Write_Byte()
* 功 能:写数据
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Byte(uchar dispdata)
{
LCD_CS=0;
LCD_A0=1;
SendBit(dispdata,8);
LCD_CS=1;
}
/********************************************************************************************
* 函数名称:Lcd_Set_X_Y(uchar x, uchar y )
* 功 能:LCD设置x y坐标
* 入口参数:x y
* 出口参数:无
*********************************************************************************************/
void Lcd_Set_X_Y(uchar x, uchar y)
{
Lcd_Write_Command(x|0xB0); // row address LSB
Lcd_Write_Command(y>>4|0x10); // column address MSB
Lcd_Write_Command(y&0x0F|0x00); // column address LSB
}
/****************************************************************************
*名称:Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )
*功能:显示16X8字符(字母)
*入口参数:
*出口参数:
*说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
****************************************************************************/
void Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point )
{
uchar i , j,temp;
temp=y;
if( bit_flag )
{
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_Byte( point[ i*8 + j] );
}
}
}
else
{
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_Byte( ~point[ i * 8 + j ] );
}
}
}
}
/****************************************************************************
* 名称:Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
* 功能:显示16*16字符(汉字)
* 入口参数:x y data
* 出口参数:无
*说明:bit_flag = 1 正常显示 bit_flag = 0 黑白反相显示
****************************************************************************/
void Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point )
{
uchar i,j,temp ;
temp=y;
if( bit_flag )
{
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_Byte( point[ i*16 + j] );
}
}
}
else
{
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_Byte( ~ point[ i * 16 + j ] );
}
}
}
}
/****************************************************************************
* 名称:Lcd_Clear(void)
* 功能:清屏
* 入口参数:无
* 出口参数:无
****************************************************************************/
void Lcd_Clear()
{
uchar x,y;
for(x=0;x<dis_page;x++) //写dis_page页数据
{
Lcd_Set_X_Y(x,0);
for(y=0;y<132;y++) //写132列显示数据
Lcd_Write_Byte(0x00); //写显示数据0x00
}
}
/*******************************************************************************************
* 函数名称:Lcd_Initial()
* 功 能:初始化LCD
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Initial()
{
delayx(50);//delay_ms(50);
Lcd_Write_Command(0xE2);
delayx(50);//delay_ms(50);
Lcd_Write_Command(0xAE); // set display OFF
Lcd_Write_Command(0xA2); // set 1/9 Bias
if(Simulation==0)
{
Lcd_Write_Command(0xA0); // set ADC=1, SEG output normal direction
Lcd_Write_Command(0xC8); // set SHL=1, COM output reverse direction
}
else
{
{
Lcd_Write_Command(0xA1); // set ADC=1, SEG output normal direction
Lcd_Write_Command(0xC0); // set SHL=1, COM output reverse direction
}
}
Lcd_Write_Command(0xF8); // set booster ratio
Lcd_Write_Command(0x00); // set 00: 2x,3x,4x, 01:5x
Lcd_Write_Command(0x25); // set 1+Rb/Ra(101),5.5
Lcd_Write_Command(0x81); // Electronic volume mode set
Lcd_Write_Command(0x13);/////////////////CH12864F液晶的
电源设置//Lcd_Write_Command(0x24);
Lcd_Write_Command(0x2C); // set voltage converter(VC) on
Lcd_Write_Command(0x2E); // set voltage converter(VC&CR) on
Lcd_Write_Command(0x2F); // set VC & VR & voltage follower on
Lcd_Write_Command(0xAF); // set display ON
Lcd_Write_Command(0x40); //set Start Line
Lcd_Clear();
}
/****************************************************************************
* 名称:Lcd_Time(uchar * clock_time )
* 功能:显示时间
* 入口参数:无
* 出口参数:无
* 说明 : 时间数组 BCD 码形式
****************************************************************************/
void Lcd_Time(uchar * clock_time )
{
uchar i=0;
//显示 "hour时min分sec秒"
i= * clock_time >> 4;
Lcd_Character_16X8( 1, 2, 80, letter_logo[i]); //显示 sec的高位
i= * clock_time & 0x0f;
Lcd_Character_16X8( 1, 2, 88, letter_logo[i]); //显示 sec的低位
Lcd_Character_16X16( 1, 2, 96 , time_logo[2]); //显示 秒
clock_time ++;
i= * clock_time >> 4;
Lcd_Character_16X8( 1, 2, 48, letter_logo[i]); //显示 min的高位
i= * clock_time & 0x0f;
Lcd_Character_16X8( 1, 2, 56, letter_logo[i]); //显示 min的低位
Lcd_Character_16X16( 1, 2, 64 , time_logo[1]); //显示 分
clock_time ++;
i= * clock_time >> 4;
Lcd_Character_16X8( 1, 2, 16 , letter_logo[i]); //显示 hour的高位
i= * clock_time & 0x0f;
Lcd_Character_16X8( 1, 2, 24 , letter_logo[i]); //显示 hour的低位
Lcd_Character_16X16( 1, 2, 32 , time_logo[0]); //显示 分
}
/****************************************************************************
* 名称:Lcd_Data(uchar * clock_time )
* 功能:显示日期
* 入口参数:无
* 出口参数:无
* 说明 : 时间数组 BCD 码形式
****************************************************************************/
void Lcd_Data(uchar * clock_time )
{
uchar i=0;
clock_time += 3;
//显示 "year 年 month 月 day 日"
i= * clock_time >> 4;
Lcd_Character_16X8( 1, 0, 80, letter_logo[i]); //显示 day的高位
i= * clock_time & 0x0f;
Lcd_Character_16X8( 1, 0, 88, letter_logo[i]); //显示 day的低位
Lcd_Character_16X16( 1, 0, 96, data_logo[2]); //显示 日
clock_time ++;
i= * clock_time >> 4 ;
Lcd_Character_16X8( 1, 0, 48, letter_logo[i]); //显示 month的高位
i= * clock_time & 0x0f;
Lcd_Character_16X8( 1, 0, 56, letter_logo[i]); //显示 month的低位
Lcd_Character_16X16( 1, 0, 64, data_logo[1]); //显示 月
clock_time ++ ;
i= * clock_time >> 4;
Lcd_Character_16X8( 1, 0, 16 , letter_logo[i]); //显示 year的高位
i= * clock_time & 0x0f;
Lcd_Character_16X8( 1, 0, 24 , letter_logo[i]); //显示 year的低位
Lcd_Character_16X16( 1, 0, 32, data_logo[0]); //显示 年
}
/****************************************************************************
* 名称:Lcd_Data(uchar * clock_time )
* 功能:显示日期
* 入口参数:无
* 出口参数:无
* 说明 : 时间数组 BCD 码形式
****************************************************************************/
void Lcd_Week( uchar week )
{
Lcd_Character_16X16( 1, 6, 16-8, week_logo[7] ); //星
Lcd_Character_16X16( 1, 6, 32-8, week_logo[8] ); //期
Lcd_Character_16X16( 1, 6, 48-8, week_logo[ week & 0x0f ] );
}
/******************************************************************************
* 函数名称: Lcd_Clock( uchar *clock_time )
* 功能: 显示时钟
* 入口参数: 时钟地址
* 出口参数: 无
********************************************************************************/
void Lcd_Clock( uchar * clock_time )
{
Lcd_Data( clock_time ); //显示日期
Lcd_Time( clock_time ); //显示时间
}
/******************************************************************************
* 名称: void Lcd_Lunar_Calendar( uchar * lunch_calendar )
* 功能: 显示农历
* 入口参数: 农力指针
* 出口参数: 无
*******************************************************************************/
void Lcd_Lunar_Calendar( uchar * lunar_canlendar )
{
uchar i;
//农历
Lcd_Character_16X16( 1, 4, 16, lunar_calendar_logo[0] );
Lcd_Character_16X16( 1, 4, 32, lunar_calendar_logo[1] );
//year-mongth-day
i= * lunar_canlendar >> 4;
Lcd_Character_16X8( 1, 4, 96, letter_logo[i] ); //农历天的高位
i= * lunar_canlendar & 0x0f;
Lcd_Character_16X8( 1, 4, 104, letter_logo[i] ); //农历天的低位
Lcd_Character_16X8( 1, 4, 88, letter_logo[11] ); //-
lunar_canlendar ++;
i= * lunar_canlendar >> 4;
Lcd_Character_16X8( 1, 4, 72, letter_logo[i] ); //农历月的高位
i= * lunar_canlendar & 0x0f;
Lcd_Character_16X8( 1, 4, 80, letter_logo[i] ); //农历月的低位
Lcd_Character_16X8( 1, 4, 64, letter_logo[11] ); //-
lunar_canlendar ++;
i= * lunar_canlendar >> 4;
Lcd_Character_16X8( 1, 4, 48, letter_logo[i] ); //农历年的高位
i= * lunar_canlendar & 0x0f;
Lcd_Character_16X8( 1, 4, 56, letter_logo[i] ); //农历年的地位
}
/*******************************************************************************
* 名称: Lcd_Temperature( uchar * temperture )
* 功能: 显示温度
* 入口参数: 温度
* 出口参数: 无
*********************************************************************************/
void Lcd_RH( uchar * RH_Data )
{
uchar i1,i2,i3,i4;
i1=RH_Data[0]/10+0x30;//百位数
i2=RH_Data[0]%10+0x30;//十位数
i3=RH_Data[1]/10+0x30;//百位数
i4=RH_Data[1]%10+0x30;//十位数
Lcd_Character_16X8( 1, 6, 64, letter_logo[ i1 ] ); //负温度显示负号:-
Lcd_Character_16X8( 1, 6, 72, letter_logo[i2] ); // 小数位
Lcd_Character_16X8( 1, 6, 80, RH_logo[1] ); // %
Lcd_Character_16X8( 1, 6, 96, letter_logo[ i3 ] ); //个位
Lcd_Character_16X8( 1, 6, 104, letter_logo[ i4 ] ); //十位
Lcd_Character_16X8( 1, 6, 112, RH_logo[2] ); // C
}
/***************************************************************************
*名称 :Lcd_Set_Clock( uchar bit_flag, uchar *point )
*功能 :显示调整的时间
*入口参数:指针
*出口参数:无
*说明 :
****************************************************************************/
void Lcd_Set_Clock( uchar temp, uchar *point )
{
bit year_flag = 1;
bit month_flag = 1;
bit day_flag = 1;
bit hour_flag =1;
bit minute_flag = 1;
bit second_flag = 1;
uchar i;
if( temp == 1 ) //滚动到 second
second_flag = 0;
if( temp == 2 ) //滚动到 minute
minute_flag = 0;
if( temp == 3 ) //滚动到 hour
hour_flag = 0;
if( temp == 4 ) //滚动到 day
day_flag = 0;
if( temp == 5 ) //滚动到 month
month_flag = 0;
if( temp == 6 ) //滚动到 year
year_flag = 0;
//日期
Lcd_Character_16X16( 1, 2, 0 , data_time_logo[0] );
Lcd_Character_16X16( 1, 2, 16, data_time_logo[1] );
point += 5; //指向年
//year
i = *point >> 4;
Lcd_Character_16X8( year_flag, 2, 40, letter_logo[i] );
i = *point & 0x0f;
Lcd_Character_16X8( year_flag, 2, 48, letter_logo[i] );
//-
Lcd_Character_16X8( 1, 2, 56, letter_logo[11] );
point --; //指向月
//month
i = *point >>4;
Lcd_Character_16X8( month_flag, 2, 64, letter_logo[i] );
i = *point & 0x0f;
Lcd_Character_16X8( month_flag, 2, 72, letter_logo[i] );
//-
Lcd_Character_16X8( 1, 2, 80, letter_logo[11] );
point --; //指向日
//day
i = *point >>4;
Lcd_Character_16X8( day_flag, 2, 88, letter_logo[i] );
i = *point & 0x0f;
Lcd_Character_16X8( day_flag, 2, 96, letter_logo[i] );
//时间
Lcd_Character_16X16( 1, 4, 0, data_time_logo[2] );
Lcd_Character_16X16( 1, 4, 16, data_time_logo[3] );
point -- ; //指向时
//hour
i = *point >>4;
Lcd_Character_16X8( hour_flag, 4, 40, letter_logo[i] );
i = *point & 0x0f;
Lcd_Character_16X8( hour_flag, 4, 48, letter_logo[i] );
//:
Lcd_Character_16X8( 1, 4, 56, letter_logo[10] );
point -- ; //指向分
//minnute
i = *point >>4;
Lcd_Character_16X8( minute_flag, 4, 64, letter_logo[i] );
i = *point & 0xff;
Lcd_Character_16X8( minute_flag, 4, 72, letter_logo[i] );
//:
Lcd_Character_16X8( 1, 4, 80, letter_logo[10] );
point --; //指向秒
//second
i = *point >> 4;
Lcd_Character_16X8( second_flag, 4, 88, letter_logo[i] );
i = * point & 0x0f;
Lcd_Character_16X8( second_flag, 4, 96, letter_logo[i] );
}
/**************************************************************************************
* 名称: Lcd_Function( uchar temp )
* 功能: 滚动显示 时间设置
* 入口参数: 滚动位置
* 出口参数: 无
**************************************************************************************/
void Lcd_Function( uchar temp )
{
bit time_flag = 1;
if( temp == 2 ) //滚动到 时间设置
time_flag = 0;
//时间设置
Lcd_Character_16X16( time_flag, 0, 0, function_logo[0] );
Lcd_Character_16X16( time_flag, 0, 16, function_logo[1] );
Lcd_Character_16X16( time_flag, 0, 32, function_logo[2] );
Lcd_Character_16X16( time_flag, 0, 48, function_logo[3] );
}
/********************************************************************************/
#endif
一周热门 更多>