📄 system.c
字号:
//=========================================================================================//
//文件名称:system.c
//功能描述:液晶显示驱动,以及时间日期调整
//维护记录:2006.7.31 by zhenlei
//==========================================================================================//
#include "SPCE061A.h"
#include "SPLC501User.h"
#include "model.h"
extern void keyscan(); //键盘扫描函数声明
extern void PlayRespond(unsigned int Result);
//语音播放函数声明
void showhour(int showhour); //显示小时函数声明
void ring_choice(); //铃声选择函数声明
extern unsigned int num; //2HZ计数单元
extern unsigned int hour; //存放当前的小时
extern unsigned int min; //存放当前的分钟
extern unsigned int sec; //存放当前的秒
extern unsigned int year; //存放当前的年
extern unsigned int gmonth; //存放当前的公历的月
extern unsigned int gday; //存放当前的公历的日
extern unsigned int xqvalue; //存放当前的星期
extern unsigned int nmonth; //存放农历的月
extern unsigned int nday; //存放农历的日
extern unsigned int runxq[]; //闰年星期偏差表
extern unsigned int pingxq[]; //平年星期偏差表
extern unsigned int glunarmonthday[]; //农历月天数表
extern char number[];
extern unsigned int keyvalue;
extern unsigned int keyflag3;
extern unsigned int keyflag4;
extern unsigned int keyflag6;
extern unsigned int keyflag7;
extern unsigned int clockset[];
extern unsigned int nhour;
extern unsigned int nmin;
extern unsigned int mbsec;
extern unsigned int mmsec;
extern unsigned int mbmin;
extern unsigned int keyflag5;
extern unsigned int mbnum;
extern unsigned int onoff;
extern unsigned int runflag;
extern unsigned int ringflag;
extern unsigned int int2hz;
extern unsigned int counter;
extern unsigned int mapcounter1;
extern unsigned int mapcounter2;
extern unsigned int* BMP_Cartoon[];
//===============================================================//
//语法格式:void clock()
//实现功能:时钟的调整
//参数 :无
//返回值 :无
//==============================================================//
void clock() //时钟运算函数,入口参数半秒、秒、分、时。
{
if(num==0x0002) //如果半秒到了2,则秒加1
{
num = 0x0000;
sec = sec++;
counter=counter++; //显示动画的桢加一
if(counter==40)
counter=0;
}
if(sec==60) //如果秒到了60,则秒清零分加1
{
sec = 0;
min = ++min;
}
if(min==60) //如果分到了60,则分清零,小时加1
{
min = 0;
hour = ++hour;
}
}
//===============================================================//
//语法格式: void gyearmonthday()
//实现功能:公历日期和农历日期的调整
//参数 :无
//返回值 :无
//==============================================================//
void gyearmonthday() //公历运算子函数修改变量年、
{
int monthvalue = 0; //月、日、时、阴历月,日
int xx = 0;
int nmonthvalue = 0;
if(hour==24)
{
hour = 0;
gday = ++gday;
nday = ++nday;
}
switch(nmonth) //查表确定阴历月份的天数。
{
case 1:
xx=glunarmonthday[year-2001]&0x8000;
break;
case 2:
xx=glunarmonthday[year-2001]&0x4000;
break;
case 3:
xx=glunarmonthday[year-2001]&0x2000;
break;
case 4:
xx=glunarmonthday[year-2001]&0x1000;
break;
case 5:
xx=glunarmonthday[year-2001]&0x0800;
break;
case 6:
xx=glunarmonthday[year-2001]&0x0400;
break;
case 7:
xx=glunarmonthday[year-2001]&0x0200;
break;
case 8:
xx=glunarmonthday[year-2001]&0x0100;
break;
case 9:
xx=glunarmonthday[year-2001]&0x0080;
break;
case 10:
xx=glunarmonthday[year-2001]&0x0040;
break;
case 11:
xx=glunarmonthday[year-2001]&0x0020;
break;
case 12:
xx=glunarmonthday[year-2001]&0x0010;
break;
}
if(xx==0)
nmonthvalue = 29;
else
nmonthvalue = 30;
if(nday==(nmonthvalue+1))
{
if((nmonth==(glunarmonthday[year-2001] & 0x000f)) && runflag==0)//判断是否当年闰月
{
runflag = 1;
nday = 1;
}
else
{
nmonth = ++nmonth;
runflag = 0;
nday = 1;
}
}
if(nmonth==13)
{
nmonth = 1;
}
switch(gmonth) //判断公历天的个数
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthvalue = 31;
break;
case 4:
case 6:
case 9:
case 11:
monthvalue = 30;
break;
case 2:
if((year%4==0&&year%100!=0)||(year%400==0)) // 判断当年是否是闰年。
monthvalue = 29;
else
{
monthvalue = 28;
}
break;
}
if(gday==monthvalue+1)
{
gday = 1;
gmonth=gmonth++;
}
if(gmonth==13)
{
gmonth = 1;
year = year++; //到了12月,年就加1。
}
if(year==2101) //年的显示范围为2001--2100。
{
year = 2001;
}
}
//===============================================================//
//语法格式:gxq()
//实现功能:星期的调整
//参数 :无
//返回值 :无
//==============================================================//
void gxq() // 计算当前星期的子函数,入口参数年、
{ //月、日、星期
if((year%4==0&&year%100!=0)||(year%400==0)) //如果当年是闰年
{
xqvalue = (((year/100)%4)*5+year%100+(year%100)/4+runxq[gmonth-1]+gday+2)%7;
}
else
xqvalue = (((year/100)%4)*5+year%100+(year%100)/4+pingxq[gmonth-1]+gday+2)%7;
}
//===============================================================//
//语法格式:showsec(int showsec)
//实现功能:显示秒单元
//参数 :showsec:秒
//返回值 :无
//==============================================================//
void showsec(int showsec) //显示秒单元子函数
{
int mshi = 0;
int sg = 0;
mshi = showsec/10;
sg = showsec%10;
LCD501_PutChar(66,20,number[sg]);
LCD501_PutChar(60,20,number[mshi]);
}
//===============================================================//
//语法格式:showmin(int showmin)
//实现功能:显示分单元
//参数 :showmin:分
//返回值 :无
//==============================================================//
void showmin(int showmin) //显示分单元子函数
{
int mshi = 0;
int sg = 0;
mshi = showmin/10;
sg = showmin%10;
LCD501_PutChar(40,20,number[sg]);
LCD501_PutChar(34,20,number[mshi]);
}
//===============================================================//
//语法格式:showhour(showhour)
//实现功能:显示小时单元
//参数 :showhour:小时
//返回值 :无
//==============================================================//
void showhour(showhour) //显示小时单元子函数。
{
int mshi = 0;
int sg = 0;
mshi = showhour/10;
sg = showhour%10;
LCD501_PutChar(12,20,number[sg]);
LCD501_PutChar(6,20,number[mshi]);
}
//===============================================================//
//语法格式:showyear(showyear)
//实现功能:显示年单元
//参数 :showyear:年
//返回值 :无
//==============================================================//
void showyear(showyear) //显示年单元子函数
{
int mshi = 0;
int sg = 0;
int ybai = 0;
sg = showyear%10;
mshi = (showyear-sg)/10%10;
ybai = (showyear-2000)/100;
LCD501_PutChar(18,2,number[sg]);
LCD501_PutChar(12,2,number[mshi]);
LCD501_PutChar(6,2,number[ybai]);
}
//===============================================================//
//语法格式:showgmonth(showgmonth)
//实现功能:显示公历月份单元
//参数 :showgmonth:月
//返回值 :无
//==============================================================//
void showgmonth(showgmonth) //显示公历月份子函数
{
int mshi = 0;
int sg = 0;
mshi = showgmonth/10;
sg=showgmonth%10;
LCD501_PutChar(42,2,number[sg]);
LCD501_PutChar(36,2,number[mshi]);
}
//===============================================================//
//语法格式:showgday(showgday)
//实现功能:显示公历日单元
//参数 :showgday:日
//返回值 :无
//==============================================================//
void showgday(showgday) //显示公历日子函数
{
int mshi = 0;
int sg = 0;
mshi = showgday/10;
sg = showgday%10;
LCD501_PutChar(66,2,number[sg]);
LCD501_PutChar(60,2,number[mshi]);
}
//===============================================================//
//语法格式:showxq(xq)
//实现功能:显示星期单元
//参数 :xq:星期
//返回值 :无
//==============================================================//
void showxq(xq) //显示星期子函数
{
switch(xq)
{
case 1:
LCD501_Bitmap(50,35,(unsigned int*)encoding_1);
break;
case 2:
LCD501_Bitmap(50,35,(unsigned int*)encoding_2);
break;
case 3:
LCD501_Bitmap(50,35,(unsigned int*)encoding_3);
break;
case 4:
LCD501_Bitmap(50,35,(unsigned int*)encoding_4);
break;
case 5:
LCD501_Bitmap(50,35,(unsigned int*)encoding_5);
break;
case 6:
LCD501_Bitmap(50,35,(unsigned int*)encoding_6);
break;
case 0:
LCD501_Bitmap(50,35,(unsigned int*)encoding_day);
break;
}
}
//===============================================================//
//语法格式:shownmonth(shownmonth)
//实现功能:显示农历月份单元
//参数 :shownmonth:农历月
//返回值 :无
//==============================================================//
void shownmonth(shownmonth) //显示农历月份子函数
{
int mshi = 0;
int sg = 0;
mshi = shownmonth/10;
sg = shownmonth%10;
LCD501_PutChar(42,52,number[sg]);
LCD501_PutChar(36,52,number[mshi]);
}
//===============================================================//
//语法格式:shownday(shownday)
//实现功能:显示农历日单元
//参数 :shownday:农历日
//返回值 :无
//==============================================================//
void shownday(shownday) //显示农历日子函数
{
int mshi = 0;
int sg = 0;
mshi = shownday/10;
sg = shownday%10;
LCD501_PutChar(66,52,number[sg]);
LCD501_PutChar(60,52,number[mshi]);
}
//===============================================================//
//语法格式:openshow()
//实现功能:固定位显示年月日星期,农历日期
//参数 :无
//返回值 :无
//==============================================================//
void openshow(void) //显示开机状态画面、年、月、日、星期、
{ //农历日期的固定位显示
LCD501_PutChar(0,2,'2');
LCD501_Bitmap(24,0,(unsigned int*)encoding_year);
LCD501_Bitmap(48,0,(unsigned int*)encoding_month);
LCD501_Bitmap(72,0,(unsigned int*)encoding_day);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -