设计报告
设计任务:
设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。
设计要求:
通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0P3.1P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术
所连线路和单片机接口仿真图如图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,如果DQ1,即读取的数据为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数码管分为共阴和共阳两种,以利用STC89C51P0口作为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小时内删除。