模拟路灯控制系统(单片机c语言+12864+1302+原理图+程序完整版)(5)

2018-12-23 23:37

桂林电子科技大学课程设计(论文)报告用纸 第18页 共 32 页

//****************************************** void DS1302_GetTime(SYSTEMTIME *Time) { }

//****************************************** //将时间年,月,日,星期数据转换成液 //晶显示字符串,放到数组里DateString[]

//******************************************

void DateToStr(SYSTEMTIME *Time) { uchar

tab[ ]={0XD2,0XBB,0XB6,0XFE,0XC8,0XFD,0XCB,0XC4,0XCE,0XE5,0XC1,0XF9,0XC8,0XD5}; if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为 2007/07/22

{ Time->DateString[0] = '2'; Time->DateString[1] = '0';

Time->DateString[2] = Time->Year/10 + '0'; Time->DateString[3] = Time->Year + '0'; }

else {

Time->DateString[0] = ' '; Time->DateString[1] = ' '; Time->DateString[2] = ' '; Time->DateString[3] = ' ';

uchar ReadValue;

ReadValue = Read1302(DS1302_SECOND);

Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);//转换为相应的10进制数 ReadValue = Read1302(DS1302_MINUTE);

Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR);

Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_DAY); Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_WEEK); Time->Week = ((ReadValue&0x10)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH); Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR); Time->Year = ((ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F);

}

Time->DateString[4]='-';

if(hide_month<2)

桂林电子科技大学课程设计(论文)报告用纸 第19页 共 32 页

{

Time->DateString[5] = Time->Month/10 + '0'; Time->DateString[6] = Time->Month + '0'; }

else {

Time->DateString[5] = ' '; Time->DateString[6] = ' '; }

Time->DateString[7]='-'; if(hide_day<2) {

Time->DateString[8] = Time->Day/10 + '0'; Time->DateString[9] = Time->Day + '0'; }

else

{

Time->DateString[8] = ' '; Time->DateString[9] = ' '; }

if(hide_week<2)

{

week_value[0] =tab[2*(Time->Week)-2]; //星期的数据另外放到 week_value[]数组里,跟 week_value[1] =tab[2*(Time->Week)-1]; }

else {

week_value[0] = ' '; week_value[1]=' '; }

week_value[2] = '\\0';

Time->DateString[10] = '\\0'; //字符串末尾加 '\\0' ,判断结束字符

年,月,日的分开存放,因为等一下要在最后显示

}

//****************************************** //将时,分,秒数据转换成液晶 //显示字符放到数组 TimeString[]

//***************************************** void TimeToStr(SYSTEMTIME *Time) { if(hide_hour<2)

{ Time->TimeString[0] = Time->Hour/10 + '0';

Time->TimeString[1] = Time->Hour + '0';

桂林电子科技大学课程设计(论文)报告用纸 第20页 共 32 页

/*定时器使能,开始计数*/

if(Time->Hour<0x06||Time->Hour>0x11)

TR0 =1; else

if(guang==0)

TR0

else TR0 =0;

=1;

}

else

{

Time->TimeString[0] = ' '; Time->TimeString[1] = ' '; } Time->TimeString[2] = ':';

if(hide_min<2) {

Time->TimeString[3] = Time->Minute/10 + '0'; Time->TimeString[4] = Time->Minute + '0'; }

else {

Time->TimeString[3] = ' '; Time->TimeString[4] = ' ';

} Time->TimeString[5] = ':'; if(hide_sec<2) {

Time->TimeString[6] = Time->Second/10 + '0'; Time->TimeString[7] = Time->Second + '0';

}

else {

Time->TimeString[6] = ' '; Time->TimeString[7] = ' '; } Time->TimeString[8] = '\\0'; }

//******************************

桂林电子科技大学课程设计(论文)报告用纸 第21页 共 32 页

//时钟芯片初始化

//****************************** void Initial_DS1302(void)

{ uchar Second=Read1302(DS1302_SECOND); if(Second&0x80) //判断时钟芯片是否关闭

{ Write1302(0x8e,0x00); //写入允许 Write1302(0x8c,0x12); //以下写入初始化时间 日期:12/11/26.星期: 4. 时间: 18:17:55 }

//********************************************** //延时子程序模块

//********************************************** void mdelay(uint delay)

{ uint i;

for(;delay>0;delay--) {for(i=0;i<80;i++) //1ms延时.

}

{;}

Write1302(0x88,0x11);

Write1302(0x86,0x26); Write1302(0x8a,0x01); Write1302(0x84,0x18); Write1302(0x82,0x17);

Write1302(0x80,0x55);

Write1302(0x8e,0x80); //禁止写入 }

}

//************************************************ //按键设置程序模块

//************************************************

//************************************ //跳出调整模式,返回默认显示

//************************************ void outkey() { uchar Second; if(out==0) { mdelay(5);

count=0;

hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0; Second=Read1302(DS1302_SECOND);

桂林电子科技大学课程设计(论文)报告用纸 第22页 共 32 页

Write1302(0x8e,0x00); //写入允许

Write1302(0x80,Second&0x7f);

Write1302(0x8E,0x80); //禁止写入

done=0; } }

//************************* //升序按键

//************************* void Upkey() { Up=1;

if(Up==0) { mdelay(5);

switch(count)

{case 1:

temp=Read1302(DS1302_SECOND); //读取秒数 temp=((temp&0x70)>>4)*10 + (temp&0x0F); temp=temp+1; //秒数加1

up_flag=1; //数据调整后更新标志

if((temp)>59) //超过59秒,清零

temp=0;

temp=temp/10*16+temp; break; case 2:

temp=Read1302(DS1302_MINUTE); //读取分数 temp=((temp&0x70)>>4)*10 + (temp&0x0F);

temp=temp+1; //分数加1

up_flag=1; if(temp>59) //超过59分,清零 temp=0;

temp=temp/10*16+temp;

break;

case 3:

temp=Read1302(DS1302_HOUR); //读取小时数

temp=((temp&0x70)>>4)*10 + (temp&0x0F);

temp=temp+1; //小时数加1

up_flag=1; if(temp>23) //超过23小时,清零 temp=0;

temp=temp/10*16+temp; /*定时器使能,开始计数


模拟路灯控制系统(单片机c语言+12864+1302+原理图+程序完整版)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:书记员法律基础知识试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: