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

📄 system.c

📁 基于凌阳单片机数字电子钟的C语言源代码 基于凌阳单片机数字电子钟的C语言源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
//=========================================================================================//
//文件名称: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 + -