设计报告
设计任务:
设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。
设计要求:
通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术
所连线路和单片机接口仿真图如图3所示:
图3 仿真按键
4)温度采集部分 :
DS18B20温度传感器,测温范围 -55℃~+125℃,固有测温分辨率0.5℃。独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示
:
程序如下:
ReadOneChar(void)
{
unsigned char i=0;// 定义i用于循环
unsigned char dat = 0;// 读取的8位数据
for (i=8;i>0;i--)//8次循环
{
DQ = 0;// 拉低DQ总线开始读时序
dat>>=1;// dat左移一位
DQ = 1; //释放DQ总线
if(DQ)// 如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat即为读取的数据)
//DQ=0,就跳过
dat|=0x80;
Tdelay(4);// 延时以完成此次读时 序,之后再读下一数据
}
return(dat); 返回读取的dat
}
//写一个字节
WriteOneChar(unsigned char dat)
{
unsigned char i=0;//
for (i=8; i>0; i--)//
{
DQ = 0;//
DQ = dat&0x01;//
Tdelay(5);// 延时以完成此次读时序,之后再读下一数据
DQ = 1;//
dat>>=1;//
}
}
//读取温度
ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;//
Init_DS18B20();
WriteOneChar(0xCC);// 写指令,跳过ROM,
WriteOneChar(0x44);// 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);// 写指令,跳过ROM,
WriteOneChar(0xBE);// 写指令,读暂存存储器
a=ReadOneChar();//读低8位
b=ReadOneChar();//读高8位
t=b;//
t<<=8;//
t=t|a;//
tt=t*0.0625;//
t= tt*10+0.5;//
return(t); //获得0.01°C 的精度并返回
}
LED数码管的选择
LED数码管分为共阴和共阳两种,以利用STC89C51的P0口作为LED显示的数据部分,以P2口的七个口作为显示部分的位选,通过三八译码器和4-16译码器扩展为17位的位选分别接在一个四位数码管和13个数码管的位选部分。详细电路图如图4-5所示:
程序如下:
html特效代码天气时钟 P2=0xF0;
P0=L1;
delay(1); //yearh
P2=0xF1;
P0=L2;
delay(1); //yearh
if(cursor==8)
{
P2=0x1F|a;
P0=L17;
delay(1);
}
else
{
P2=0x1F;
P0=L17;
delay(1);
}//week
if(cursor==6)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论