微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > c51实现万年历、温度与闹钟功能程序

c51实现万年历、温度与闹钟功能程序

时间:11-18 来源:互联网 点击:

/******************************************************************************/
void write_clock(unsigned char ord, unsigned char dd)
{
clock_clk=0;
clock_Rst=0;
clock_Rst=1;
clock_out(ord);
clock_out(dd);
clock_Rst=0;
clock_clk=1;
}

/******************************************************************************/
void Disp(void)//显示和闪烁函数
{
unsigned int i=0;
unsigned char a=0,b=0,c=0,f=0;

i=ReadTemperature();//读温度并送显
a=i/100;
Mcs=1;Scs=0;
Disp_Digit(5,40,zero+a*16);
b=i/10-a*10;
Mcs=1;Scs=0;
Disp_Digit(5,48,zero+b*16);
c=i-a*100-b*10;
Mcs=0;Scs=1;
Disp_Digit(5,0,zero+c*16);

if(sec==1) //秒闪烁标志位
{
if(flag==1)
{
d=read_clock(0x81);//读秒
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,40,zero+d*16);//送显示
Disp_Digit(3,48,zero+e*16);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(3,40,space); //显示空格
Disp_Digit(3,48,space);
}
}
else
{
d=read_clock(0x81);//读秒
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,40,zero+d*16);
Disp_Digit(3,48,zero+e*16);
}

if(min==1) //分钟闪烁标志位
{
if(flag==1)
{
d=read_clock(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,16,zero+d*16);
Disp_Digit(3,24,zero+e*16);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(3,16,space); //显示空格
Disp_Digit(3,24,space);
}
}
else
{
d=read_clock(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(3,16,zero+d*16);
Disp_Digit(3,24,zero+e*16);
}

if(hour==1) //小时闪烁标志位
{
if(flag==1)
{
d=read_clock(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(3,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(3,0,zero+e*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(3,56,space); //显示空格
Mcs=0;Scs=1;
Disp_Digit(3,0,space);
}
}
else
{
d=read_clock(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(3,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(3,0,zero+e*16);
}

if(year==1) //年闪烁标志位
{
if(flag==1)
{
d=read_clock(0x8d);//读年
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,8,two);
Disp_Digit(1,16,zero);
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(1,24,space); //显示空格
Disp_Digit(1,32,space);
}
}
else
{
d=read_clock(0x8d);//读年
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,8,two);
Disp_Digit(1,16,zero);
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
}

if(mon==1) //月闪烁标志位
{
if(flag==1)
{
d=read_clock(0x89);//读月
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(1,0,zero+e*16);
Disp_Chinese(1,8,yue);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(1,56,space); //显示空格
Mcs=0;Scs=1;
Disp_Digit(1,0,space);
}
}
else
{
d=read_clock(0x89);//读月
e=d;
d=d>>4;
e=e&0x0f;
Mcs=1;Scs=0;
Disp_Digit(1,56,zero+d*16);
Mcs=0;Scs=1;
Disp_Digit(1,0,zero+e*16);
Disp_Chinese(1,8,yue);
}

if(day==1) //日闪烁标志位
{
if(flag==1)
{
d=read_clock(0x87);//读日
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
Disp_Chinese(1,40,ri);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(1,24,space); //显示空格
Disp_Digit(1,32,space);
}
}
else
{
d=read_clock(0x87);//读日
e=d;
d=d>>4;
e=e&0x0f;
Mcs=0;Scs=1;
Disp_Digit(1,24,zero+d*16);
Disp_Digit(1,32,zero+e*16);
Disp_Chinese(1,40,ri);
}

if(weekk==1) //星期闪烁标志位
{
if(flag==1)
{
d=read_clock(0x8b);//读星期
Mcs=1;Scs=0;
Disp_Chinese(3,40,cone+(d-1)*32);//写入星期的汉字
}
else
{
Mcs=1;Scs=0;
Disp_Chinese(3,40,spaces); //显示空格
}
}
else
{
d=read_clock(0x8b);//读星期
Mcs=1;Scs=0;
Disp_Chinese(3,40,cone+(d-1)*32);//写入星期的汉字
}
}

/******************************************************************************/
void Disp2(void)//显示和闪烁函数
{
if(Kgb==1) //开关闪烁标志位
{
if(flag==1)
{
if(Bell_Swh == 0)//0为关
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,guan);//显示关
}
else
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,kai);//显示开
}
}
else
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,spaces); //显示空格
}
}
else
{
if(Bell_Swh == 0)//关
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,guan);
}
else
{
Mcs=0;Scs=1;
Disp_Chinese(2,32,kai);
}
}

if(Hourb==1) //时闪烁标志位
{
if(flag==1)
{
d = Read_One_Byte(0x01);//读取2408的小时的数值
Mcs=1;Scs=0;
Disp_Digit(4,48,zero+(d/10)*16);
Disp_Digit(4,56,zero+(d%10)*16);
}
else
{
Mcs=1;Scs=0;
Disp_Digit(4,48,space); //显示空格
Disp_Digit(4,56,space);
}
}
else
{
d = Read_One_Byte(0x01);//读取24的小时的数值
Mcs=1;Scs=0;
Disp_Digit(4,48,zero+(d/10)*16);
Disp_Digit(4,56,zero+(d%10)*16);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top