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

📄 pcf8576d.c

📁 用NXP公司P89LPC9401单片机开发液晶显示,包括开发资料,各功能驱动程序.
💻 C
字号:
//***********************************************************************
//FILE:	pcf8576d.c
//功能:	不同模式下,LCD的显示
//***********************************************************************
#include"main.h"
#include"time.h"
#include"HI2C_C51.H"
#include"temperature.h"
#include"pcf8576d.h"
#include"key.h"
#include"ctime.h"
//***********************************************************************
uchar code DecodeTab[10]=						//LCD上的8段译码表
{	
	0xeb,0x60,0xc7,0xe5,0x6c,					//"0"到"4"
	0xad,0xaf,0xe0,0xef,0xed					//"5"到"9"
};
//***********************************************************************
uchar DispBuff[6]={0,0,0,0,0,0};				//显示缓冲区
//***********************************************************************
void  PCF8576Disp()								//显示函数
{
	ISendByte(PCF8576,0x60);					//选中PCF8576D
	ISendStr(PCF8576,0,DispBuff,6);				//将缓冲区的数据发送到8576
}
//***********************************************************************
void PCF8576Clock(bit dot)						//时间显示函数
{												//dot参数决定是否同时显示":"
	DispBuff[0]=DecodeTab[Hour/10];				//将小时译码写到显示缓冲
	DispBuff[1]=DecodeTab[Hour%10];
	DispBuff[2]=DecodeTab[Minute/10];			//将分钟译码写到显示缓冲
	DispBuff[3]=DecodeTab[Minute%10];
	if(!Ampm)	DispBuff[4]=AMPic;				//如果Ampm为0则显示"AM"
	else		DispBuff[4]=PMPic;				//否则显示"PM"
	if(dot)		DispBuff[4]+=DOTPic;			//如果dot为1,则显示":"
	DispBuff[5]=0;								//第六个字节为"0",不显示
	PCF8576Disp();								//调用显示函数
}
//***********************************************************************
void PCF8576Date()								//日期显示函数
{
	DispBuff[0]=DecodeTab[Month/10];			//将月译码写到显示缓冲
	DispBuff[1]=DecodeTab[Month%10]|DPPic;		//并且第二个8段显示"."(DP)
	DispBuff[2]=DecodeTab[Day/10];				//将天译码写到显示缓冲
	DispBuff[3]=DecodeTab[Day%10];
	DispBuff[4]=MONTHPic+DAYPic;				//显示"month""day"
	DispBuff[5]=0;								//第六个字节为"0",不显示
	PCF8576Disp();								//调用显示函数
}

//***********************************************************************
void PCF8576Year()								//年显示函数
{
	DispBuff[0]=DecodeTab[2];					//将年译码写到显示缓冲
	DispBuff[1]=DecodeTab[0];
	DispBuff[2]=DecodeTab[Year/10];
	DispBuff[3]=DecodeTab[Year%10];
	DispBuff[4]=YEARPic;						//显示"Year"
	DispBuff[5]=0;								//第六个字节为"0",不显示
	PCF8576Disp();								//调用显示函数
}
//***********************************************************************
void PCF8576Cdate()								//日期显示函数
{
	DispBuff[0]=DecodeTab[Cmonth/10];			//将月译码写到显示缓冲
	DispBuff[1]=DecodeTab[Cmonth%10]|DPPic;		//并且第二个8段显示"."(DP)
	DispBuff[2]=DecodeTab[Cday/10];				//将天译码写到显示缓冲
	DispBuff[3]=DecodeTab[Cday%10];
	DispBuff[4]=MONTHPic+DAYPic;				//显示"month""day"
	DispBuff[5]=0;								//第六个字节为"0",不显示
	PCF8576Disp();								//调用显示函数
}
//***********************************************************************
void PCF8576Cyear()								//年显示函数
{
	if(Cyear==99&&Year==0)						//如果是农历1999年
	{
		DispBuff[0]=DecodeTab[1];				//直接译码
		DispBuff[1]=DecodeTab[9];	
		DispBuff[2]=DecodeTab[9];
		DispBuff[3]=DecodeTab[9];
	}
	else
	{
		DispBuff[0]=DecodeTab[2];				//前两个显示为"2""0"
		DispBuff[1]=DecodeTab[0];
		DispBuff[2]=DecodeTab[Cyear/10];		//将农历年译码写到显示缓冲
		DispBuff[3]=DecodeTab[Cyear%10];
	}
	DispBuff[4]=YEARPic;						//显示"Year"
	DispBuff[5]=0;								//第六个字节为"0",不显示
	PCF8576Disp();								//调用显示函数
}
//***********************************************************************
void PCF8576Weekday()							//星期显示函数
{
	DispBuff[0]=0;								//第一个8段不显示
	DispBuff[1]=0;								//第二个8段不显示
	DispBuff[2]=0;								//第三个8段不显示
	DispBuff[3]=DecodeTab[Weekday];				//将星期译码写到显示缓冲		
	DispBuff[4]=WDAYPic;						//显示"DOW"--"day of week"
	DispBuff[5]=0;								//第六个字节为"0",不显示
	PCF8576Disp();								//调用显示函数
}
//***********************************************************************
void PCF8576Alarm()								//闹钟设定值显示函数
{
	DispBuff[0]=DecodeTab[AlarmHour/10];		//将闹钟小时译码写到显示缓冲
	DispBuff[1]=DecodeTab[AlarmHour%10];
	DispBuff[2]=DecodeTab[AlarmMinute/10];		//将闹钟分钟译码写到显示缓冲
	DispBuff[3]=DecodeTab[AlarmMinute%10];
	if(!AlarmAmpm)	DispBuff[4]=AMPic+DOTPic;	//根据AlarmAmpm决定显示
	else			DispBuff[4]=PMPic+DOTPic;	//"AM"还是"PM"
	DispBuff[5]=ALARMPic;						//显示"V"做为闹钟模式提示			
	PCF8576Disp();								//调用显示函数
}
//***********************************************************************
void PCF8576Temp()								//温度显示函数
{
	DispBuff[0]=0;								//第一个8段不显示
	DispBuff[1]=DecodeTab[(Temp[0]%100)/10];	//将温度整数部分译码写入缓冲
	DispBuff[2]=DecodeTab[Temp[0]%10]|DPPic;	//显示"."(DP)
	if((Temp[1]&0x80)==0)						//小数部分显示为"0"
		DispBuff[3]=DecodeTab[0];
	else					
		DispBuff[3]=DecodeTab[5];				//小数部分显示为"5"
	DispBuff[4]=0;								//第五个字节为"0",不显示
	if((Temp[0]&0x80)==0)						//判断当前温度是零上还是零下
		DispBuff[5]=PLUSPic+TEMPPic;			//如果是正的,显示"+"
	else					
		DispBuff[5]=MINUSPic+TEMPPic;			//否则显示"-"
	PCF8576Disp();								//调用显示函数
}
//***********************************************************************
void PCF8576Modify(uchar b)						//修改状态指示函数
{
	if(b==1)
	{
		DispBuff[0]=0;							//前两个8段不显示
		DispBuff[1]=0;							//将温度整数部分译码写入缓冲
		PCF8576Disp();
	}
	else if(b==2)
	{
		DispBuff[2]=0;							//后两个8段不显示
		DispBuff[3]=0;							//将温度整数部分译码写入缓冲
		PCF8576Disp();
	}
	
}

//***********************************************************************
void PCF8576Mode(bit dot)						//模式显示函数
{
	switch(Mode)
	{
		case	1:								//模式1
			PCF8576Clock(dot);					//显示时间	
			break;				
		case	2:								//模式2
			PCF8576Weekday();					//显示星期
			break;
		case	3:								//模式3
			PCF8576Date();						//显示日期
			break;						
		case	4:								//模式4
			PCF8576Year();						//显示年
			break;	
		case	5:								//模式5
			PCF8576Cdate();						//显示农历日期
			break;
		case	6:								//模式6
			PCF8576Cyear();						//显示农历年
			break;
		case	7:								//模式7
			PCF8576Alarm();						//显示闹钟
			break;
		case	8:								//模式8
			PCF8576Temp();						//显示温度
			break;
		default:	break;
	}
}
//*********************************END***********************************



 

⌨️ 快捷键说明

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