电子万年台历的设计制作(5)

2019-02-20 23:45

皖西学院 学生课程设计项目

{ week_value[0] = Time->Week + '0'; //星期的数据另外放到 week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示 }

else

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

Time->DateString[10] = '\\0'; //字符串末尾加 '\\0' ,判断结束字符} void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到

数组 TimeString[];

{ if(hide_hour<2)

{Time->TimeString[0] = Time->Hour/10 + '0'; Time->TimeString[1] = Time->Hour + '0';} 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->DateString[8] = '\\0';}

void Initial_DS1302(void) //时钟芯片初始化

21

皖西学院 学生课程设计项目

{ unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80) //判断时钟芯片是否关闭 {Write1302(0x8e,0x00); //写入允许

Write1302(0x8c,0x07); //以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55

Write1302(0x88,0x07); Write1302(0x86,0x25); Write1302(0x8a,0x07); Write1302(0x84,0x23); Write1302(0x82,0x59); Write1302(0x80,0x55);

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

/***********ds18b20子程序*************************/ /***********ds18b20延迟子函数(晶振12MHz )*******/ void delay_18B20(unsigned int i) { while(i--);}

/**********ds18b20初始化函数**********************/ void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(8); //稍做延时 DQ = 0; //单片机将DQ拉低 delay_18B20(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay_18B20(14);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delay_18B20(20);}

/***********ds18b20读一个字节**************/ unsigned char ReadOneChar(void) {uchar i=0;

22

皖西学院 学生课程设计项目

uchar dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); }

return(dat);}

/*************ds18b20写一个字节****************/ void WriteOneChar(uchar dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0;

DQ = dat&0x01;

delay_18B20(5);

DQ = 1;

dat>>=1; } }

/**************读取ds18b20当前温度************/ void ReadTemp(void) { unsigned char a=0; unsigned char b=0; unsigned char t=0; Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44);

// 启动温度转换

delay_18B20(100); // this message is wery important Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0xBE);

//跳过读序号列号的操作

//读取温度寄存器前两个就是温度

23

皖西学院 学生课程设计项目

delay_18B20(100);

a=ReadOneChar(); b=ReadOneChar(); temp_value=b<<4;

temp_value+=(a&0xf0)>>4; }

void temp_to_str() //温度数据转换成液晶字符显示 { TempBuffer[0]=temp_value/10+'0'; //十位 TempBuffer[1]=temp_value+'0'; //个位 TempBuffer[2]=0xdf; //温度符号 TempBuffer[3]='C'; TempBuffer[4]='\\0';}

void Delay1ms(unsigned int count) {unsigned int i,j; for(i=0;i

void mdelay(uint delay) /*延时子程序*/ { uint i;

for(;delay>0;delay--)

{for(i=0;i<62;i++) //1ms延时.

{;}}}

//读取温度值低位 //读取温度值高位

void outkey() //跳出调整模式,返回默认显示 { uchar Second;

if(out==0||wireless_1==1) { mdelay(8); 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); Write1302(0x8e,0x00); //写入允许 Write1302(0x80,Second&0x7f);

24

皖西学院 学生课程设计项目

Write1302(0x8E,0x80); //禁止写入 done=0; while(out==0);

while(wireless_1==1) }}

/////////////////////////////////////////////////////////////////////////void Upkey()//升序按键

{ Up=1;

if(Up==0||wireless_2==1) { mdelay(8);

switch(count) {case 1:

temp=Read1302(DS1302_SECOND); //读取秒数

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

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

if((temp&0x7f)>0x59) //超过59秒,清零

temp=0;

break;

case 2:

temp=Read1302(DS1302_MINUTE); //读取分数

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

up_flag=1;

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

case 3:

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

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

up_flag=1;

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

25


电子万年台历的设计制作(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:鲁班算量技巧培训教材

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

马上注册会员

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