基于DS1302多功能数字钟电子电工课程设计Word文档格式.docx
《基于DS1302多功能数字钟电子电工课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于DS1302多功能数字钟电子电工课程设计Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
DS1302
数字式温度传感器:
DS18B20
总共设有四个按键,为节约资源考虑,每个按键都有多种功能。
四个按键分别标号为key1,key2,key3,key4。
第一次按下key2,key3,key4都没有反应,首先按下key1键可选择指针位置,key2键为加键,key3为减键,key4键为闹钟设置清零键。
操作简单,按键灵活。
整点报时功能,可以按下key4键终止报警。
系统设计框图:
系统硬件需求介绍:
STC89C52单片机一片,DS1302实时时钟芯片一个,DS18B20数字式温度传感器一个,+5V无源蜂鸣器一个,12MHZ、32KHZ晶振各一个,多个按键和开关,常用电容电阻,连接线,三极管,二极管若干,滑动变阻器一个,+3V纽扣电池一个。
3、实施方案:
1、单片机核心控制模块:
核心控制器件选用STC89C52单片机。
STC89C52单片机为40管脚双列直插芯片,它是一种高性能,低功耗的8位CMOS微处理器芯片,市场应用最多。
而且价格便宜,控制方便,便于应用有4个I/O口分别为P1,P2,P3,P4。
其中每一个管脚都能做独立的输入输出管脚,它的第9脚位复位管脚,接上电容和上拉电阻再带个开关构成复位电路。
18,19管脚接外部晶振和两个微调电容构成外部晶振电路。
单片机,复位电路,晶振,5V电源构成单片机最小系统。
其中与AT89C52单片机管脚连接如下图:
2、实时时钟电路模块:
DS1302引脚排列:
如下图
引脚说明:
1)1脚,Vcc2:
后备电源,此设计中接+3V纽扣电池;
8脚,VCC1:
主电源,接+5V。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
2)X1、X2即2脚3脚:
振荡源,外接32.768kHz晶振。
3)4脚END,接地端。
4)5脚RST:
复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>
2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
5)I/O为串行数据输入输出端(双向)。
6)SCLK为时钟输入端。
**特别注意:
5,6,7脚在硬件电路实现中,必须接上拉电阻,接+5V.
3、DS18B20工作模块:
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。
其一个工作周期可分为两个部分,即温度检测和数据处理。
DS18B20的主要特征:
全数字温度转换及输出。
先进的单总线数据通信。
最高12位分辨率,精度可达土0.5摄氏度。
12位分辨率时的最大工作周期为750毫秒。
可选择寄生工作方式。
检测温度范围为–55°
C~+125°
C(–67°
F~+257°
F)
内置EEPROM,限温报警功能。
64位光刻ROM,内置产品序列号,方便多机挂接。
多样封装形式,适应不同硬件系统。
4、液晶显示模块:
1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本设计采用16列*2行的字符型LCD1602带背光的液晶显示屏。
引脚接口说明:
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
5、蜂鸣器电路模块
本实验设计中蜂鸣器用CS8050三极管驱动,蜂鸣器用5V的无源蜂鸣器,并接一个发光二极管作为指示灯,同时在负极串接一个限流电阻,数据端口接P3^7.
4、Proteus仿真原理总框图:
5、硬件电路实现:
6、源程序:
Shuzizhong.c
#include<
reg51.h>
#include"
ds18b20.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharshi,fen,miao,ringshi,ringfen,nian,yue,ri,week,temp,count,m;
sbitrs=P2^2;
sbitrw=P2^3;
sbiten=P2^4;
sbitkey1=P3^4;
//设置键
sbitkey2=P3^5;
//加键
sbitkey3=P3^6;
sbitkey4=P3^7;
sbitIO=P1^1;
//DS1302数据线
sbitSCLK=P1^2;
//DS1302时钟线
sbitRST=P1^0;
//DS1302复位线
sbitbeep=P1^4;
sbitACC0=ACC^0;
sbitACC7=ACC^7;
ucharcodetable[]="
20--"
;
ucharcodetable1[]="
:
"
ucharcodetone[]={212,212,190,212,159,169,212,212,190,212,142,159,
212,212,106,126,159,169,190,119,119,126,159,142,159,0};
ucharcodelon[]={9,3,12,12,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24,0};
voiddelay(uintz)
{uintx,y;
for(x=z;
x>
0;
x--)
for(y=120;
y>
y--);
}
voidyinyue()
{
uinti,j,k=0,l;
{for(l=0;
l<
26;
l++)
{
for(i=0;
i<
codelon[k]*20;
i++)
{if(key4==0){beep=0;
break;
}
beep=~beep;
for(j=0;
j<
codetone[k]/3;
j++);
delay(10);
k++;
}}}
voidwrite_LCD_com(ucharcom)
{rs=0;
rw=0;
P0=com;
delay(5);
en=1;
en=0;
voidwrite_LCD_da(uchardata1)
{rs=1;
P0=data1;
voidInit_LCD()
{ucharnum;
write_LCD_com(0x38);
delay
(1);
write_LCD_com(0x01);
write_LCD_com(0x06);
write_LCD_com(0x0c);
write_LCD_com(0x80);
for(num=0;
num<
10;
num++)
{write_LCD_da(codetable[num]);
write_LCD_com(0x80+0x40);
8;
{write_LCD_da(codetable1[num]);
}}
voidwrite_LCDsfm(ucharadd,uchardate)
{ucharge,shi;
shi=date/10;
ge=date%10;
write_LCD_com(0x80+0x40+add);
write_LCD_da(0x30+shi);
write_LCD_da(0x30+ge);
voidwrite_LCDnyr(ucharadd,uchardate)
write_LCD_com(0x80+add);
write_LCD_da(0x30+shi);
voidwrite_LCDweek(ucharweek)
{write_LCD_com(0x80+0x0b);
switch(week)
{case1:
write_LCD_da('
M'
);
write_LCD_da('
O'
write_LCD_da('
N'
break;
case2:
T'
U'
E'
case3:
W'