基于51单片机的多功能时钟温度计设计

基于51单片机的多功能时钟温度计设计

(仿真+程序+原理图+PCB+设计报告)

具体功能:

1、采用LCD1602液晶显示。

2、显示项目有:年月日、星期、时分秒,温度。

3、采用时钟芯片DS1302,精确走时。板载3V纽扣电池,断电重新上电无需重新设置时间,由3V提供时钟芯片继续计时

4、五个按键操作:设置时钟键,增加键、减小键、设定闹钟键,秒表键。

5、具有ds18b20测温功能

6、秒表中可以实现开始、暂停、复位等功能

演示视频:

基于51单片机的多功能时钟温度计设计(仿真+程序+原理图+PCB+设计报告)

代码

void Write1302(uchar dat)
{
  uchar i; 
  SCLK=0;           //拉低SCLK,为脉冲上升沿写入数据做好准备
  delay1(2);       //稍微等待,使硬件做好准备
  for(i=0;i<8;i++)      //连续写8个二进制位数据
    {
     DATA=dat&0x01;    //取出dat的第0位数据写入1302
  delay(2);       //稍微等待,使硬件做好准备
   SCLK=1;           //上升沿写入数据
   delay1(2);      //稍微等待,使硬件做好准备
   SCLK=0;           //重新拉低SCLK,形成脉冲
   dat>>=1;          //将dat的各数据位右移1位,准备写入下一个数据位
   }
 }

 void WriteSet1302(uchar Cmd,uchar dat)
 {
   RST=0;           //禁止数据传递
   SCLK=0;          //确保写数居前SCLK被拉低
   RST=1;           //启动数据传输
   delay1(2);     //稍微等待,使硬件做好准备
   Write1302(Cmd);  //写入命令字
   Write1302(dat);  //写数据
   SCLK=1;          //将时钟电平置于已知状态
   RST=0;           //禁止数据传递
 }

uchar Read1302(void)
 {
   uchar i,dat;
   delay(2);       //稍微等待,使硬件做好准备
   for(i=0;i<8;i++)   //连续读8个二进制位数据
   {
    dat>>=1;       //将dat的各数据位右移1位,因为先读出的是字节的最低位
    if(DATA==1)    //如果读出的数据是1
    dat|=0x80;    //将1取出,写在dat的最高位
    SCLK=1;       //将SCLK置于高电平,为下降沿读出
    delay1(2);  //稍微等待
    SCLK=0;       //拉低SCLK,形成脉冲下降沿
    delay1(2);  //稍微等待
    }  
  return dat;        //将读出的数据返回
  }

uchar  ReadSet1302(uchar Cmd)
 {
  uchar dat;
  RST=0;                 //拉低RST
  SCLK=0;                //确保写数居前SCLK被拉低
  RST=1;                 //启动数据传输
  Write1302(Cmd);       //写入命令字
  dat=Read1302();       //读出数据
  SCLK=1;              //将时钟电平置于已知状态
  RST=0;               //禁止数据传递
  return dat;          //将读出的数据返回
}
void Init_DS1302(void)
{ 
 WriteSet1302(0x8E,0x00);                 //根据写状态寄存器命令字,写入不保护指令 
 WriteSet1302(0x80,((0/10)<<4|(0%10)));   //根据写秒寄存器命令字,写入秒的初始值
 WriteSet1302(0x82,((12/10)<<4|(12%10)));   //根据写分寄存器命令字,写入分的初始值
 WriteSet1302(0x84,((11/10)<<4|(11%10))); //根据写小时寄存器命令字,写入小时的初始值
 WriteSet1302(0x86,((25/10)<<4|(25%10))); //根据写日寄存器命令字,写入日的初始值
 WriteSet1302(0x88,((1/10)<<4|(1%10))); //根据写月寄存器命令字,写入月的初始值
 WriteSet1302(0x8c,((13/10)<<4|(13%10)));   //nian
 WriteSet1302(0x8a,((1/10)<<4|(1%10)));
}

void DisplaySecond(uchar x)
{
 uchar i,j;    
 i=x/10;
 j=x%10;
 write_com(0xc7);   
 write_date(0x30+i);   
 write_date(0x30+j);      
 }
void DisplayMinute(uchar x)
{
 uchar i,j;    
 i=x/10;
 j=x%10; 
 write_com(0xc4);    
 write_date(0x30+i);  
 write_date(0x30+j);        
 }
 void DisplayHour(uchar x)
{
 uchar i,j;   
 i=x/10;
 j=x%10;
 write_com(0xc1);    
 write_date(0x30+i);  
 write_date(0x30+j);        
 }
 
void DisplayDay(uchar x)
{
 uchar i,j;   
 i=x/10;
 j=x%10;    
 write_com(0x89);    
 write_date(0x30+i);  
 write_date(0x30+j);      
 }

void DisplayMonth(uchar x)
{
 uchar i,j;     
 i=x/10;
 j=x%10;  
 write_com(0x86);    
 write_date(0x30+i);  
 write_date(0x30+j);  
 }

void DisplayYear(uchar x)
{
 uchar i,j;  
  i=x/10;
 j=x%10; 
 write_com(0x83);    
 write_date(0x30+i);
 write_date(0x30+j);  
 }   
void DisplayWeek(uchar x)
{ uchar i;
   x=x*3;
 write_com(0x8c);    
 for(i=0;i<3;i++)
   {
   	write_date(table2[x]);
	x++;  
   }
 }   


    

硬件设计

使用元器件:

单片机:STC89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

IC座:DIP40;万能板:9*15 ;

液晶屏:LCD1602;排阻:1k*8;

时钟芯片:DS1302;

蜂鸣器:5V 有源;

三极管 :9012;晶振:11.0592;

电容:22pF,10uF/16V;电阻:1k;

电位器:10K;按键:6*6*5;

接线端子:5.08*2P;

温度传感器:DS18B20;

发光二极管:5mm红色;

自锁开关:8*8;导线:若干;

流程图:

设计资料

01 仿真图

    本设计使用proteus7.8和proteus8.7两个版本设计,向下兼容,无需担心!具体如图!

02 原理图

    本系统原理图采用Altium Designer19设计,具体如图!

03 程序

    本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!

04 设计报告

    一万两千字设计报告,具体如下!

05 资料图

    资料获取请关注同名公众号,包括仿真源文件 、程序(含注释)、AD原理图、开题报告、设计报告、流程图、任务书等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享,一起学习成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值