基于51单片机的多功能时钟温度计仿真原理图方案

(文末附资料)
本系统是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压环境中工作;时钟电路由内部时钟电路外接晶振提供,它是一种高性能、低功耗、带RAM的可随时调整时钟电路,工作电压为3V~5V;所以采用DS1302作为本设计的日历芯片;显示部份使用LCD1602B液晶模块进行数字显示,1602B液晶模块可以显示2行16个字符,有8位数据总线D0—D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送,这样就可以节省MCU的I/O口资源,系统主要由晶振电路、复位电路、时钟电路部分、中央处理单元、晶显示部分组成,单片机数字时钟的设计流程如图2-1所示。
原理框图
基于51单片机的多功能时钟温度计仿真原理图方案_第1张图片

原理图
基于51单片机的多功能时钟温度计仿真原理图方案_第2张图片
时钟电路
时钟电路为整个单片机系统产生时间基准,是单片机系统必须的部分;本系统采用美国DALLAS公司推出的DS1302实时时钟芯片,工作电压为2.5V-5.5V,采用三线接口与CPU进行同步通信,并可采用突发式一次传送多个字节的时钟信号或RAM数据,该芯片是采用串行方式的实时时钟芯片,串行方式的实时时钟芯片大多数是将地址线、数据线、控制线合为一根串行传输数据的传号线,这种方式的有点是信号线少、电路连接简单、节省系统资源和电路板的面积,缺点是程序编写复杂、工作量比较大,且操作速度较慢,接下来我们来分析一下DS1302的性能与原理。
DS1302的性能:
、 计算2100年之前的秒、分、时、日、星期、月和年,能进行闰年调整;
B、31字节数据RAM;
C、引脚与TTL兼容;
D、工作电流小于300nA,有备份电源和涓流充电能力;
DS1302引脚定义:
I/O:数据输入/输出引脚
SCLK:串行时钟输入引脚
RST复位引脚
GND:接地引脚
Vcc1、Vcc2:工作电源、备份电源引脚
X1、X2:晶振接入管脚。晶振频率为32.768KHz。

液晶LCD1602显示电路
1602B液晶模块可以显示2行16个字符,有8位数据总线D0—D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。该模块也可以只用D4-D7作为四位数据分两次传送,这样就可以节省MCU的I/O口资源,液晶LCD1602引脚情况如下表(2-2-2)所示;液晶LCD1602最小系统图如2-2-1-2所示。
基于51单片机的多功能时钟温度计仿真原理图方案_第3张图片
程序设计流程图
基于51单片机的多功能时钟温度计仿真原理图方案_第4张图片

程序源代码

#include //头文件
#include
#define uchar unsigned char		//宏定义
#define uint  unsigned int		//宏定义
#define fmq RD

sbit key1=P2^0;   //位声明 					//MODIFIED
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
		
uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0xbf,0x86,0xdb,//带小数点的数值
0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

void plus();   //函数声明
void minus();
void sint();
uchar table_1[6]; //定义数组,数组内含有6个数值
uchar table_2[6];
uchar shi=1,fen=1,miao=30; //显示初始值
uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;//定义全局变量
uchar flag,flag1,flag2,cnt,cnt1,count;//定义全局变量


void delay(uchar i)  //延时函数,用于动态扫描数码管
{
     uchar x,y;
     for(x=i;x>0;x--)
          for(y=110;y>0;y--);
}

void init()   //初始化函数
{
     TMOD=0X21; //工作方式1
     TH0=(65536-50000)/256; //定时时间为:50ms
     TL0=(65536-50000)%256;
     ET0=1;     //打开定时器
     EA=1;    //开总中断
     TR0=1;    //启动定时器

	 SCON  = 0x50;     		  //0101 0000 SM1SM2=10,方式二 REN=1允许接受 	(串口初始化)
	 TH1   = 0xFD;        
     TR1   = 1;                //启动T/C1                   
   	 ES    = 1;              


}
void display()  //显示子函数,用于显示时间数值
{
     uchar i,j;
     table_1[0]=miao%10;  //分离秒的各位与十位
     table_1[1]=miao/10;
     table_1[2]=fen%10+11;  //分离分的各位与十位
     table_1[3]=fen/10;
     table_1[4]=shi%10+11; //分离时的各位与十位
     table_1[5]=shi/10;
     j=0x7f;    //从秒到时的扫描
     for(i=2;i<6;i++)
     {
      P2=j;
      P0=table[table_1[i]];//显示数值
      delay(10);
      j=_cror_(j,1);//循环右移 
     }
}

void display_1() //显示子函数,用于显示定时时间
{
     uchar i,j;
     table_2[0]=miao2%10;  //以下含义同上
     table_2[1]=miao2/10;
     table_2[2]=fen2%10+11;
     table_2[3]=fen2/10;
     table_2[4]=shi2%10+11;
     table_2[5]=shi2/10;
     j=0x7f;
     for(i=2;i<6;i++)
     {
          P2=j;
          P0=table[table_2[i]];
          delay(10);
          j=_cror_(j,1); 
     }
}

void shijian() //时间子函数
{
     if(flag>=20)  //判断是否到一秒
     {
          flag=0;  //到了,则标志位清零
          miao++;  //秒加1
          if(miao>=60) //判断秒是否到60s
          {
               miao=0;//到了,则清零
               fen++; //分加1
               if(fen>=60) //以下含义同上						//MODIFIED
               {
                    fen=0;
                    shi++;
                    if(shi>23)
                         shi=0;
               }
          }
     }
}


.

链接:https://pan.baidu.com/s/1wd01MOkXtLbhy2d0I5lFMA
提取码:rng7

.

你可能感兴趣的:(基于51单片机的多功能时钟温度计仿真原理图方案)