SCLK:
串行时钟,输入;
I/O:
三线接口时的双向数据线;
CE:
输入信号,在读、写数据期间,必须为高。
该引脚有两个功能:
第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。
DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式。
方案二完全用软件实现数字时钟
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案一完成数字时钟的功能。
2.2显示方案
方案一LCD液晶显示
采用LCD1602液晶显示器。
在我们的日常生活中,我们对LCD1602液晶显示器并不陌生,在计算器、万用表、电子表及很多家用电子产品中都可以用到它显示的主要是数字、专用符号和图形。
特别是在单片机的人机交流界面中用它作为输出器件有显示质量高、采用数字式接口、体积小、重量轻。
功耗低等优点。
通常按显示方式咳咳分为段式、字符式、点阵式等。
但是在用它做显示器的时候,我们要对它进行编程,比如我们要显示一个字符,那么这个时候就复杂了,因为一个字符由6x8或8x8点阵组成,我们这时候既要找到和显示屏幕上某几个位置对应的显示RAM区8字节,还要使每个字节的不同位为“1”,其他的为“0”,为“1”的点亮,为“0”的不亮。
这样一来在显示简单的数字上就大大的加大了我们设计的难度,所以,对于一些简单的数字,我们不应采用LCD1602液晶显示来显示。
方案二数码管显示
使用多个LED数码管显示。
LED数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。
图2数码管
如:
显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。
LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。
小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。
发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。
常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
再一个,数码管相对于LCD1602液晶显示器来说具有亮度大、接口设计比较容易,价格相对较便宜等优点。
且在本次设计中恰好能把我们要显示的数字显示出来。
所以,本次设计采用多个LED数码管显示器来显示数字。
3硬件系统的方案设计
3.1系统框图
按键
图3系统框图
3.2单片机的选择
根据所学单片机知识,AT89C51采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它继承和扩展了MCS-48单片机的体系结构和指令系统。
此外,AT89C51还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
所以我们选用AT89C51单片机作为主控芯片,其引脚图如下图2所示
图4AT89C51单片机引脚图
AT89C51单片机引脚介绍
Vss(20脚):
接地
VCC(40脚):
主电源+5V
XTAL1(19脚):
接外部晶体的一端。
在片内它是振荡电路反相放大器的输入端在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,此引脚作为驱动端。
XTAL2(18脚):
接外部晶体的另一端。
在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。
若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。
RST(9脚):
单片机刚接上电源时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)
PSEN(29脚):
在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。
CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。
不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。
PSEN端同样可驱动8个LSTTL负载。
我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别AT89C51是否在工作。
ALE/PROG(30脚):
在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。
CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。
不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。
PSEN端同样可驱动8个LSTTL负载。
我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可以判别AT89C51是否在工作。
EA/VPP(31脚):
当EA端输入高电平时,CPU从片内程序存储器地址0000H单元开始执行程序。
当地址超出4KB时,将自动执行片外程序存储器的程序。
当EA输入低电平时,CPU仅访问片外程序存储器。
在对AT89C51编程时,此引脚用于施加编程电压VPP。
输入/输出引脚:
(1)P0.0—P0.7 (39脚—32脚)
(2)P1.0—P1.7 (1脚—8脚)
(3)P2.0—P2.7 (26脚—21脚)
(4)P3.0—P3.7 (10脚—17脚)
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
表1P3口特殊功能
P3口管脚
备选功能
P3.0
RXD:
串行输入口
P3.1
TXD:
串行输出口
P3.2
:
外部中断0
P3.3
:
外部中断1
P3.4
T0:
记时器0外部输入
P3.5
T1:
记时器1外部输入
P3.6
:
外部数据存储器写选通
P3.7
:
外部数据存储器读选通
3.3时钟电路DS1302
DS1302的性能特性:
●实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行比较;
●用于高速数据暂存的31*8位RAM;
●最少引脚的串行I/O;
●2.5~5.5V电压工作范围;
●2.5V时耗小于300nA;
●用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式;
●简单的三线接口;
●可选的慢速充电(至Vcc1)的能力。
图5DS1302电路图
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。
在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。
时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。
如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST脚必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
DS1302的控制字如表所示。
控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。
位5~1(A4~A0)指示操作单元的地址。
最低有效位(位0)如果为0,则表示药进行写操作;为1表示进行读操作。
控制字节总是从最低位开始输入/输出。
为了提高对32个地址寻址能力(地址/命令位1~5=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。
位6规定时钟或RAM,而位0规定读或写。
在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。
在多字节方式下,读或写从地址0的位0开始。
必须按数据传送的次序写最先的8个寄存器。
但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。
表2DS1302控制字
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。
时钟暂停:
秒寄存器的位7定义位时钟暂停位。
当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。
当它为0时,时钟将开始启动。
AM-PM/12-24小时方式:
小时寄存器的位7定义为12或24小时方式选择位。
它为高电平时,选择12小时方式。
在此方式下,位5为第二个10小时位(20~23h)。
DS1302的晶振选用32768Hz,电容推荐值为6pF。
因为振荡频率较低,也可以不接电容,对计时精度影响不大。
3.4时钟电路及复位电路
根据设计要求和计算简便的原则,我们选择12M的石英晶振、30PF的陶瓷电容、22uF的瓷片电容、10k电阻、+5V电源,时钟电路及复位电路图如下:
图6时钟电路及复位电路图
3.5驱动电路
51单片机的输出能力有限,再加上数码管采用动态扫描方式,所以需要驱动电路驱动数码管。
考虑到数码管是动态扫描的方式,驱动电路采用38译码器进行驱动,而非往日的三极管驱动,这样大大简化了电路的复杂性,同时还节约了单片机的I/O口,节约了单片机的资源。
图7驱动电路图
3.6显示电路
显示电路采用2个位为共阴数码管进行显示。
数码管的位权与单片机的P0口相接,段权分别与38译码器的输出相接,只要P0输出为高,相应的数码管就会点亮,显示出相应的数字。
图8显示电路
3.7按键接口
按键开关在电路中的连接如图所示。
按键未按下时,A点电位为高电平5V;按键按下时,A点电位为低电平。
A点电位就用于向CPU传递按键的开关状态。
但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图5)b所示,键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。
因此必须设法消除抖动的不良后果。
图9键操作和键抖动
为了节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。
根据抖动特性,在第一次检测到按键按下后,执行一段延时5~10ms让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认真正有键按下。
当检测到按键释放后,也要给5~10ms的延时,待后延抖动消失后才转入该键处理程序。
图10按键电路
4软件系统设计
4.1时间信息获取程序
通过单片机不断地读取DS1302的时,分,秒,年,月,日寄存器(81H、83H、85H、87H、89H、8DH)获取时间信息。
4.2显示程序
将单片机从DS1302寄存器中读取的数据送至单片机的P0口,再通过单片机的P2口选通相对应的的数码管,采用动态扫描方式显示时分秒年月日。
5系统调试
5.1系统调试
首先,硬件调试主要是先搭建硬件平台,然后利用万用表等工具对电路检测,最后用程序进行功能调试,硬件调试比较费时,需要细心和耐心也需要熟练掌握电路原理。
然后,可以直接应用编辑或仿真软件进行调试,比如单片机C51编辑软件Keil.该软件提供了一个集成开发环境uVision,它包括C编辑、宏编辑、连接器、库管理和一个功能强大的仿真调试器。
通过编译。
运行,可以检查程序错误。
但使用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。
软件调试过程中要仔细耐心,即便是要多写一两个字符,都无法编译成功。
而有时往往在Keil中编译。
运行无错,但烧录到单片机中运行出错,很有可能是编程时管脚或时序编辑得不对。
还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试,如果电路出错,可以在计算机上方便的修改电路,程序出错可以重新编辑程序,这种方法节时、省力、经济、方便。
我们这里应用的是Protuse7.5.总之,调试过程是一个软硬件结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键。
5.2时钟显示
我们首先进行时钟信号测试、多个LED数码管显示的的调试,以实现基本功能,看看在把程序导进去是否有线路没有接通或虚焊的现象出现。
在这个过程中,我们主要让数码管上有数字显示出来,具体是什么数这就不用关了。
5.3DS1302的调试
该电路含DS1302芯片、主电源、备用电源、晶振等部分。
在与单片机连接的过程中需要注意以下几点:
1)、清楚DS1302与单片机连接的管脚。
本设计定义为:
DS1302的SCLK连接P3.1,I/O口连接P3.2,RST口连接P3.0。
2)、注意电源正负极连接。
3)、DS1302连接32.768KHz的晶振。
该晶振体形比较小,在焊接是要小心的,注意不要将晶振引脚弄断。
同时也要尽量使晶振离DS1302的X1、X2引脚近距离焊接。
4)、编写DS1302的时钟/日历程序,只要能够正确显示时间。
烧录进单片机,检查电路电源正负极连接是否正确。
检查无误后再上电检查。
5.4按键电路调试
按键电路比较简单,故而调试起来也比较容易,只需要保证按键焊接正确,没有虚焊或忘焊的现象出现一般不会出很大的问题。
6总结
通过课程设计,我学到了不少的知识。
把以前没有学好的模拟电路的知识进行了补充和加强。
这使我受益很大。
加深了我对于单片机和数字电路的认识,相信在以后的学习和工作中碰到这些基础的元器件我会更加得心应手。
通过查阅大量的资料,我获得了以前在课堂上学不到的东西,我想这对于以后的毕业设计,或者工作也好,都是很有帮助的。
我很认真地对待这个过程中的每一个细节,希望自己能做得更好。
希望今后还有这样的机会,能够让我学到更多的知识。
在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
其次,巩固了KeilC51工程文件的建立,程序编写以及编译的掌握程度。
最重要的是,因为只是水平有限,要自己编写C程序很难,但在此实验中,最大的收获莫过于看懂别人的程序,分析之后,自己拼凑编写以实现不同的功能。
并且掌握了程序的编写过程。
掌握了Proteus的使用方法,从实际操作中认识到Proteus在仿真方面的优越性,激发了自己学习Proteus的兴趣。
因为自己要修改程序,所以单单花费在程序分析的时间就很多,为了更好的理解程序,我把每句主要程序的后面都注释了该语句的意思,详情可以见程序清单,发现注释语义的工作量也是非常大的。
写实验报告时,每个模块的流程图都是自己画的,用WORD文档画图真的很麻烦,而且不是很美观。
因为时间比较仓促,流程图写的条理性不够,不过相信以后多多练习,就可以做得更好。
在这次实验中我遇到了很多故障,不过通过各种渠道(比如网络,请教同学,老师等等)解决了一些故障,虽然没有全部解决,但能在短短一周内通过此次作业,实现电子钟的功能,还是有点成就感的。
在解决这些问题的过程中发现网络确实是一个很好的学习平台,利用前人的经验可以提高自己的解决实际问题的能力。
通过这一个多礼拜的学习实践,使我对所学的知识进行了系统的复习和巩固,在以前学习中不够清晰的概念得到了更好的理解。
相信通过不断的学习,能使自己扬长补短。
良好的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。
我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学习和工作有很大的帮助。
在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。
在此更要感谢我的指导老师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成这次课程设计。
在此我要向鞠老师致以最衷心的感谢和敬意。
参考文献
1.刘迎春.传感器原理.国防工业出版社.2004年
2.袁希光.传感器技术手册.国防工业出版社.1986年
3.郑秀瑗.应力应变电测技术.国防工业出版社.1985年
4.蔡春源.新编机械设计手册.辽宁科学技术出版社.1993年
5.王森.仪表常用数据手册.化学工业出版社.1998年
6.孙传友.测控电路及装置.北京航空航天大学出版社.2002年
7.王俊杰.检测技术与仪表.武汉理工大学出版社.2002年
8.贾伯年,俞朴.传感器技术.南京:
东南大学出版社,2000:
33-62
9.单成祥.传感器理论设计基础及其应用.北京:
国防工业出版社,1999年
10.李道华,李玲,朱艳.传感器电路分析与设计.武汉大学出版社,2000年
附录:
系统程序
#include
sbitRST=P3^0;
sbitSCLK=P3^1;
sbitIO=P3^2;
sbitA0=ACC^0;
sbitA7=ACC^7;
sbit