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