电子时钟论文讲解.docx
- 文档编号:10790729
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:24
- 大小:1.09MB
电子时钟论文讲解.docx
《电子时钟论文讲解.docx》由会员分享,可在线阅读,更多相关《电子时钟论文讲解.docx(24页珍藏版)》请在冰豆网上搜索。
电子时钟论文讲解
“创意电子”设计大赛
设计报告
题目:
电子时钟
参赛者:
李燕燕、张晓丽、刘刚
指导教师:
李晓红
设计时间:
2016年4月3日
计算机信息工程学院
摘要
本文介绍了基于STC89C52单片机的多功能电子时钟笔筒的硬件结构和软硬件设计方法。
本设计由数据显示模块、温度采集模块、时间处理模块和调整设置模块四个模块组成。
系统以STC89C52单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。
温度采集选用DS18B20芯片,采用直观的数字显示,数据显示采用1602液晶显示模块,可以在LCD上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。
此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。
关键字:
52单片机、液晶显示、电子时钟
摘要I
一、绪论1
1.课题研究的背景1
二、系统的方案设计与论证1
1.单片机芯片设计与论证1
2.时钟模块设计与论证2
3.温度采集模块设计与论证2
4.显示模块模块设计与论证3
三、系统硬件的设计3
1.STC89C52单片机3
2.时钟芯片DS1302接口设计与性能分析4
3.温度芯片DS18B20接口设计与性能分析5
4.LCD显示模块6
5.按键模块设计7
6.复位电路的设计8
四.系统的软件设计9
1.程序设计流程图9
五.系统测试与分析9
六.结论11
参考文献12
附录13
一、绪论
1.课题研究的背景
随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。
它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。
采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。
该电路采用STC89C52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。
此电子时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
二、系统的方案设计与论证
单片机电子时钟的制作有多种方法,经过成本,性能,功耗等多方面的考虑决定用三个8位74LS164串行接口外接LED显示器,RESPACK-8对单片机STC89C52进行供电,时间芯片DS1302连接单片机STC89C52。
按照系统设计的要求,初步确定电路系统构成框图如图1所示。
图1硬件电路框图
1.单片机芯片设计与论证
方案一:
采用AT89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能用于3V的超低电压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
方案二:
采用STC89C52芯片作为硬件核心,采用FlashROM,能以3V的超低电压工作,而且与MCS-51系列单片机完全兼容,该芯片内部存储器为8KBROM存储空间。
同样具有STC89C52的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。
由于STC89C52内部具有8KBROM存储芯片并且支持ISP在线编程,因此采用STC89C52作为主控芯片。
2.时钟模块设计与论证
方案一:
直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。
采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。
方案二:
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压2.5V~5.5V范围内。
由于DS1302时钟芯片计数时间精度高,而且具有闰年补偿功能等优点,故采用方案二。
3.温度采集模块设计与论证
方案一:
采用温度传感器(如热敏电阻或AD590),再经AD转换得到数字信号,精度较准,但价格昂贵,电路较复杂。
方案二:
采用数字式温度传感器DS18B20,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式,但准确度不高,误差最大达2度。
因为用DS18B20温度芯片,采用单总线访问,降低成本、降低制作难度且可节省单片机资源,故采用方案二。
4.显示模块模块设计与论证
方案一:
采用静态显示方法,静态显示模块的硬件制作较复杂及功耗大,要用到多个移位寄存器,但不占用端口,只需两根串口线输出。
方案二:
采用动态显示方法,动态显示模块的硬件制作简单,段扫描和位扫描各占用一个端口,总需占用单片机14个端口,采用间断扫描法功耗小、硬件成本低及整个硬件系统体积相对减小。
方案三:
采用LCD的方法,具有硬件制作简单可直接与单片机接口,显示内容多,功耗小,成本低等优点,LCD1602可显示32个字符,采用LCD的缺点是亮度不够。
比较以上三种方案:
方案一硬件复杂体积大、功耗大;方案二硬件简单、功耗小;方案三硬件简单,显示内容多,功耗小,成本低等。
本系统设计要求达到功耗小、体积小、成本低,显示信息多等要求,权衡三种方案,选择方案三。
三、系统硬件的设计
1.STC89C52单片机
本系统采用的是美国ATMEL公司生产的STC89C52单片机如图2。
1.STC89C52单片机有40个引脚。
2.STC89C52单片机与MCS-51完全兼容。
图2STC89C52单片机
2.时钟芯片DS1302接口设计与性能分析
2.1DS1302性能简介
DS1302是Dallas公司生产的一种实时时钟芯片。
DS1302时钟芯片内主要包括移位寄存器、控制逻辑电路、振荡器。
DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。
DS1302引脚说明:
X1,X232.768kHz晶振引脚
GND地线
RST复位端
I/O数据输入/输出端口
SCLK串行时钟端口图3DS1302的引脚
VCC1慢速充电引脚
VCC2电源引脚
2.2DS1302接口电路设计
1时钟芯片DS1302的接口电路及工作原理:
图4DS1302与MCU接口电路
图4为DS1302的接口电路,其中Vcc1为后备电源,Vcc2为主电源。
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲。
控制字节总是从最低位开始输入/输出的。
3.温度芯片DS18B20接口设计与性能分析
3.1DS18B20简介
1.DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理如图5所示。
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
LSB
位置/清除
增加
计数器1
斜率累加器
计数比较器
温度寄存器
减到0
预置
计数器2
减到0
停止
预置
低温度系数晶振
高温度系数晶振
图5DS18B20测温原理
3.2DS18B20接口电路设计
如图6所示,该系统中采用数字式温度传感器DS18B20,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,用P3.7与DS18B20的DQ口连接,Vcc接电源,GND接地。
图6温度传感器DS18B20接口电路
4.LCD显示模块
4.1LCD1602的特性及使用说明
1.LCD1602的接口信号说明如表1:
表1LCD1602的接口信号
编号
引脚符号
功能说明
编号
引脚符号
功能说明
1
VSS
电源地
9
D2
DATAI/O
2
VDD
电源正极
10
D3
DATAI/O
3
VL
液晶显示偏压信号
11
D4
DATAI/O
4
RS
数据/命令选择端(H/L)
12
D5
DATAI/O
5
R/W
读/写选择端(H/L)
13
D6
DATAI/O
6
E
使能信号
14
D7
DATAI/O
7
D0
DATAI/O
15
BLA
背光正极
8
D1
DATAI/O
16
BLK
背光负极
2、基本操作时序如下:
1)读状态:
RS=L,RW=H,E=H
2)写指令:
RS=L,RW=L,D0~D7=指令码,E=高脉冲
3)读数据:
RS=H,RW=H,E=H
4)写数据:
RS=H,RW=L,D0~D7=数据,E=高脉冲
5.按键模块设计
本系统用到了5个按键,其中一个用作系统手动复位,另外4个采用独立按键(如图7),该种接法查询简单,程序处理简单,可节省CPU资源,按键电路如图15所示,4个独立按键分别与STC89C52的P3.4、P3.5、P3.6、P3.7接口相连。
对以下4个按键作简要说明:
S4——SET键,S3——UP键,S2——DOWN键,S5——OUT/STOP键。
图7按键电路
6.复位电路的设计
当STC89C52单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就完成了复位操作。
根据应用的要求,复位操作通常有两种基本形式:
上电复位、手动复位。
上电复位要求接通电源后,自动实现复位操作。
STC89C52单片机的上电复位POR(PowerOnReset)实质上就是上电延时复位,也就是在上电延时期间把单片机锁定在复位状态上。
本设计采用上电且开关复位电路,如图8所示上电后,由于电容充电,使RST持续一段高电平时间。
当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。
图8复位电路
四.系统的软件设计
1.程序设计流程图
图9程序设计流程图
5.系统测试与分析
整个系统设计完成后,要进行运行调试,排除软件和硬件的故障,同时验证系统的可靠性及稳定性,使系统符合设计要求。
在对系统进行实际调试时,首先应对硬件进行静态调试,同时对系统软件进行初步调试,此后再对软件和硬件进行动态调试,最后才能使系统进入正常工作。
(1)静态调试:
静态调试主要是排除明显的硬件故障。
在电路搭建好后,对其进行仔细检查。
查看端口是否正确连接,连接是否可靠。
同时还应当用万用表检查电路,看应当开路的地方是否开路,有无虚焊或短路等等。
(2)软件调试:
系统软件程序在编制好以后,可通过软件对源程序进行编程,变成可执行的目标代码,在编程过程中出现错误,要及时纠正。
(3)动态调试:
控制系统的软件和硬件是密切相关的,软件调试不能对硬件部分进行诊断,也不能在线仿真,所以用户程序还需跟硬件连接起来进行联调,调试对软件和硬件进行检查和诊断,整个单片机系统进行在线调试时,需借助仿真开发工具来对用户软件及硬件电路进行诊断、调试。
程序调试完成后,将程序下载到单片机里,使整个系统运行起来。
图10时钟笔筒实物图
图11仿真图
六.结论
在整个设计过程中学到了许多没学到的知识,在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。
反而达到事半功倍的效果。
对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,理清了思路,反而得心应手。
在此次设计中,知道了做事要有一颗平常的心,不要想着走捷径,一步一个脚印。
也练就了我的耐心,做什么事都要有耐心。
在本次设计中学到了很多很多东西,这是最重要的。
总之,此次毕业设计使我的能力得到了全方位的提高,设计的电子时钟笔筒也存在着不足,有待于以后的改进。
参考文献
[1]苏平.单片机的原理与接口技术[M].北京:
电子工业出版社。
[2]王忠民.微型计算机原理[M].西安:
西安科技大学出版社。
[3]周雪.模拟电子技术[M]西安:
西安电子科技大学出版社。
[4]左金生.电子与模拟电子技术[M].北京:
电子工业出版社。
[5]马忠梅,籍顺心等.单片机的C语言应用程序设计[M].北京航空航天大学出版社。
[6]张萌.单片机应用系统开发综合实例[M].北京:
清华大学出版社。
[7]李广弟.单片机原理及应用[M]北京航空航天大学出版社。
附录
1核心程序:
(1)读取写程序设计如下:
sbitclk=P1^3;//ds1302时钟线定义
sbitio=P1^4;//数据线
sbitrst=P1^5;//复位线
//秒分时日月年星期
ucharcodewrite_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};//写地址
ucharcoderead_add[]={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};//读地址
ucharcodeinit_ds[]={0x58,0x00,0x00,0x01,0x01,0x13,0x1};
ucharmiao,fen,shi,ri,yue,week,nian;
uchari;
ucharfen1=0x11,shi1=0;//两个闹钟变量的定义
bitopen1;
/*************写一个数据到对应的地址里***************/
voidwrite_ds1302(ucharadd,uchardat)
{
rst=1;//把复位线拿高
for(i=0;i<8;i++)
{//低位在前
clk=0;//时钟线拿低开始写数据
io=add&0x01;
add>>=1;//把地址右移一位
clk=1;//时钟线拿高
}
for(i=0;i<8;i++)
{
clk=0;//时钟线拿低开始写数据
io=dat&0x01;
dat>>=1;//把数据右移一位
clk=1;//时钟线拿高
}
rst=0;//复位线合低
clk=0;
io=0;
}
/*************从对应的地址读一个数据出来***************/
ucharread_ds1302(ucharadd)
{
ucharvalue,i;
rst=1;//把复位线拿高
for(i=0;i<8;i++)
{//低位在前
clk=0;//时钟线拿低开始写数据
io=add&0x01;
add>>=1;//把地址右移一位
clk=1;//时钟线拿高
}
for(i=0;i<8;i++)
{
clk=0;//时钟线拿低开始读数据
value>>=1;
if(io==1)
value|=0x80;
clk=1;//时钟线拿高
}
rst=0;//复位线合低
clk=0;
io=0;
returnvalue;//返回读出来的数据
}
/*************把要的时间年月日都读出来***************/
voidread_time()
{
miao=read_ds1302(read_add[0]);//读秒
fen=read_ds1302(read_add[1]);//读分
shi=read_ds1302(read_add[2]);//读时
ri=read_ds1302(read_add[3]);//读日
yue=read_ds1302(read_add[4]);//读月
nian=read_ds1302(read_add[5]);//读年
week=read_ds1302(read_add[6]);//读星期
Conversion(0,nian,yue,ri);//农历转换
n_nian=year_moon;
n_yue=month_moon;
n_ri=day_moon;
}
/*************把要写的时间年月日都写入ds1302里***************/
voidwrite_time()
{
write_ds1302(0x8e,0x00);//打开写保护
write_ds1302(write_add[0],miao);//写秒
write_ds1302(write_add[1],fen);//写分
write_ds1302(write_add[2],shi);//写时
write_ds1302(write_add[3],ri);//写日
write_ds1302(write_add[4],yue);//写月
write_ds1302(write_add[5],nian);//写星期
write_ds1302(write_add[6],week);//写年
write_ds1302(0x8e,0x80);//关闭写保护
}
/*************把数据保存到ds1302RAM中**0-31*************/
voidwrite_ds1302ram(ucharadd,uchardat)
{
add<<=1;//地址是从第二位开始的
add&=0xfe;//把最低位清零是写的命令
add|=0xc0;//地址最高两位为1
write_ds1302(0x8e,0x00);
write_ds1302(add,dat);
write_ds1302(0x8e,0x80);
}
/*************把数据从ds1302RAM读出来**0-31*************/
ucharread_ds1302ram(ucharadd)
{
add<<=1;//地址是从第二位开始的
add|=0x01;//把最高位置1是读命令
add|=0xc0;//地址最高两位为1
return(read_ds1302(add));
}
/*************初始化ds1302时间***************/
voidinit_ds1302()
{
uchari;
rst=0;//第一次读写数据时要把IO品拿低
clk=0;
io=0;
i=read_ds1302ram(30);
if(i!
=3)
{
i=3;
write_ds1302ram(30,i);//405041003080
write_ds1302(0x8e,0x00);//打开写保护
for(i=0;i<7;i++)
write_ds1302(write_add[i],init_ds[i]);//把最高位值0允许ds1302工作
write_ds1302(0x8e,0x80);//关写保护
}
}
(2)温度程序设计:
byteow_reset(void)
{
bytepresence;
DQ=0;//拉低总线
delay(29);//保持480us
DQ=1;//释放总线
delay(3);//等待回复
presence=DQ;//读取信号
delay(25);//等待结束信号
return(presence);//返回0:
正常1:
不存在
}
//从1-wire总线上读取一个字节
byteread_byte(void)
{
bytei;
bytevalue=0;
for(i=8;i>0;i--)
{
value>>=1;
DQ=0;
DQ=1;
delay
(1);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
//向1-WIRE总线上写一个字节
voidwrite_byte(charval)
{
bytei;
for(i=8;i>0;i--)//一次写一位
{
DQ=0;//
DQ=val&0x01;
delay(5);//
DQ=1;
val=val/2;
}
delay(5);
}
2器件清单:
表2器件清单
序号
名称
型号和参数
数量
1
单片机
STC89C52
1
2
时钟芯片
DS1302
1
3
温度传感器
DS18B20
1
4
蜂鸣器
蜂鸣器
1
5
小电池
3V
1
6
电容
10uF
1
7
电容
20
2
8
液晶
LCD1602
1
9
三极管
9012
1
10
电阻
2.7K
1
11
电阻
2K
1
12
电阻
10K
1
13
电阻
10K
1
14
按键
SW-PB
5
15
电源开关
sw-灰色
1
16
小晶振
32.768KHZ
1
17
晶振
12M
1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 时钟 论文 讲解