历时钟电路的设计Word格式文档下载.docx
《历时钟电路的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《历时钟电路的设计Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
同时,也进一步加深了对单片机的硬件结构的理解和巩固,编程能力也得到了提高。
在此将电子钟制作过程中用到的知识进行了一些总结,并记录了遇到的问题,希望自己今后能注意。
第一章智能化万年历时钟设计方案
1.1设计思路
通过一段时间对专业书籍及多种设计方案的研究机分析,我采用了比较常用的AT89C51作为核心控制芯片,用C语言进行编程来满足设计的要求。
用LED数码管来实现年、月、日,时、分、秒的显示,在时、分、秒之间各有2个LED发光二极管来作为时间分隔符每秒随秒位闪烁一次,直观且具有美感,通过3个按钮开关可以在日期与时间间切换和对时钟进行调整,其他外接电路还有晶振电路、复位电路等等。
1.2构成框图
本设计用AT89c51作为核心控制部分,外接晶振电路与复位电路,P3口接三个按钮开关作为时间调整部分,以LED数码管作为显示部分,P0口控制数码管段选部分,P1口和P2口控制数码管位选部分。
如图1-1所示:
图1-1总体系统框图
第二章系统硬件电路的设计
2.1单片机的选择与参数介绍
我选用了比较常用且功能强大的AT89C51单片机,下面我来详细介绍该芯片的参数与功能:
AT89C51是由美国Atmel公司生产的至今为止世界上最新型的高性能八位单片机。
该芯片采用FLASH存储技术,内部具有2KB字节快闪存存储器,采用DIP封装,是目前在中小系统中应用最为普及的单片机[2]。
(1)AT89C51的功能描述
AT89C51是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。
它与MCA-51系列单片机在指令系统和引脚上完全兼容,不仅可完全代替MCS-51系列单片机,而且能使系统具有许多MCS-51系列产品没有的功能。
AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。
只要程序长度小于4K,四个I/O口全部提供给用户。
可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。
工作电压范围(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。
AT89C51芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。
P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。
(2)AT89C51引脚功能
AT89C51单片机为40引脚芯片如图2-1所示,在本设计中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。
图2-1AT89C51引脚图
AT89S51具有PDIP,TQFP和PLCC三种封装形式。
上图就是PDIP封装的引脚排列,有40个引脚,32个外部双向输入/输出(I/O)端口;
具有两个16位可编程定时器;
中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;
震荡器频率0到33MHZ,因此我们在此选用12MHZ的晶振是比较合理的;
具有片内看门狗定时器;
具有断电标志POF等等。
P0口可作为通用I/O口,但须外接上拉电阻;
作为输出口,每各引脚可吸收8各TTL的灌电流。
作为输入时,首先应将引脚置1。
P0也可用做访问外部程序存储器和数据存储器时的低8位地址/数据总线的复用线。
在该模式下,P0口含有内部上拉电阻。
在FLASH编程时,P0口接收代码字节数据;
在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。
P1口:
8位、双向I/0口,内部含有上拉电阻。
P1口可作普通I/O口。
输出缓冲器可驱动四个TTL负载;
用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。
P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。
在FLASH并行编程和校验时,P1口可输入低字节地址。
在串行编程和效验时,P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。
P2口:
具有内部上拉电阻的8位双向I/O口。
P2口用做输出口时,可驱动4各TTL负载;
用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。
若负载为低电平,则通过内部上拉电阻向外部输出电流。
CPU访问外部16位地址的存储器时,P2口提供高8位地址。
当CPU用8位地址寻址外部存储时,P2口为P2特殊功能寄存器的内容。
在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。
P3口:
具有内部上拉电阻的8位双向口。
P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;
用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。
若外部的负载是低电平,则通过内部上拉电阻向输出电流。
在与FLASH并行编程和校验时,P3口可输入某些控制信号。
P3口除了通用I/O口功能外,还有替代功能如表2-1所示。
表2-1P3口的第二功能
端口引脚
各个功能
P3.0
RXD(串行口输入端)
P3.1
TXD(串行口输出端)
P3.2
INT0(外部中断0请求输入端,低电平有效)
P3.3
INT1(外部中断1请求输入端,低电平有效)
P3.4
T0(定时/计数器0计数脉冲输入端)
P3.5
T1(定时/计数器1计数脉冲输入端)
P3.6
WR(外部数据存储器写选通信号输出端,低电平有效)
P3.7
RD(外部数据存储器读选通信号输出端,低电平有效)
2.2时钟功能的实现选择
方案一:
采用实时时钟芯片。
实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。
计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。
此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;
具有可编程方波输出功能,可用做实时测控系统的采样信号等;
有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。
由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。
方案二:
软件控制。
利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。
该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术MCS-51汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。
而由于ATMEL公司的AT89C51单片机是低功耗的具有4KB在线可编程Flash存储器的单片机。
它与通用80C51系列单片机的指令系和引脚兼容。
片内的Flash可允许在线重新编程,也可使用通用非易失性存储器编程。
它将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。
它的功能强大,而且也较容易购买[3]。
总结:
我所要实现的功能通过单片机编程就可以达到,不需要额外的时钟芯片来增加成本,并使外围电路更加简单明了。
2.3复位电路的选择
目前为止,单片机复位电路主要有四种类型:
(1)微分型复位电路;
(2)积分型复位电路;
(3)比较器型复位电路;
(4)看门狗型复位电路。
我列举了2种方案进行比较:
方案一:
采用手动复位,该方法线路简单。
在系统运行过程中,有时可能需要对系统进行复位,以避免对硬件经常加电或断电而造成的伤害,我们可以采用手动复位的方式。
如图2-2所示。
图2-2手动上电复位电路
方案二:
阻容上电自动复位电路,这种电路线路也简单,它利用电容上电压不能突变而是按指数规律上升或下降的特性,产生所需的复位脉冲。
优点:
使用最为普遍且成本低廉的复位电路。
图2-3自动复位电路
总结:
这两种方案对我的设计影响其实差别不大,根据我的电路所需要的就是选取最简单的电路即可,显然方案二元件和电路更加简单,所用原件更少,所花成本更少。
2.4时间调整电路的设计
我采用了独立式按键设计,如图2-4所示,独立式按键直接与单片机I/O口相连构成键盘[4],每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。
按键一端接地,一端接于P3.0、P3.1、P3.2口,并接10K的上拉电阻,按下开关时就会向单片机输入低电平,触发程序跳转。
按下跳转键可以开始调时,多按几次就会在秒分时,日月年之间切换,按下+键可以调高数值,按下—键可以调低数值,做到了功能齐全且元件消耗最好。
图2-4时间调整电路
2.5时间显示电路的设计
2.5.1扫描方式的选择
我选用LED数码管作为显示部分的主要元件,数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类[5]。
动态显示驱动
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2mS,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
我所要用到的数码管共有14位,更加适合用动态扫描。
2.5.2LED数码管的选择
LED数码管分为共阴和共阳两种,以利用AT89C51灌电流比较大的特点作为数码管的位选,而段码则由上拉电阻驱动,用共阴数码管会使电路更加简单,共阴数码管管脚图与内部结构图如图2-5与图2-6所示:
图2-5共阴数码管引脚图2-6共阴数码管内部结构
C语言中数码管十六进制数字型代码如表2-2所示。
表2-2十六进制数字型代码
字型
共阳极代码
共阴极代码
C0H
3FH
9
90H
6FH
1
F9H
06H
A
88H
77H
2
A4H
5BH
b
83H
7CH
3
B0H
4FH
C
C6H
39H
4
99H
66H
d
A1H
5EH
5
92H
6DH
E
86H
79H
6
82H
7DH
F
8EH
71H
7
F8H
07H
8
80H
7FH
怎样测量数码管引脚,分共阴和共阳:
找公共共阴和公共共阳首先,我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。
相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的。
也可以直接用数字万用表,红表笔是电源的正极,黑表笔是电源的负极[6]。
2.5.3显示电路的整体实现
如图2-7所示,显示电路共包含14位数码管外加4个LED发光二极管,数码管的段选部分由P0口控制,即数码管的段选端并联与P0口,数码管的段控端a、b、c、d、e、f、g、dp分别接到P0口的P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7口线上,段选部分与P0口之间接上拉电阻来输入高电平与增强驱动电流,电阻的大小可影响数码管的亮度,由于我没有外加其他驱动电路因此我选择1K的排阻来增加驱动能力;
数码管的位选由P1口和P2口控制,每个数码管的位控线单独占用单片机P1口和P3口一根输出口线,如果发现数码管还是不够亮的话,可在位选端加NPN三极管放大电流,此时要加限流电阻以免数码管被烧。
在时分秒之间我各设置了2个LED做为时间分隔符来随秒位每秒闪烁一次,更加的美观[7]。
图2-7数码管显示部分
第三章系统程序设计与软件仿真
系统程序采用C语言按模块化方式进行设计,然后通过KeilC51软件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照Proteous的仿真电路图,在Protel99SE中完成电路板的逻辑布局及布线。
3.1主程序的设计
系统程序主要包括主程序,读出时钟子程序和显示数据刷新子程序。
程序详情请看程序附件;
主程序流程图如图3-1和3-2所示:
图3-1主程序流程图1
图3-2主程序流程图2
程序能够智能计算闰年、闰月,并通过查表方式区分大、小、平、润月是否分别为31、30、28、29来正确显示每月天数[8]。
3.2仿真实验
经过老师的指导以及查看了许多的资料书籍,终于完成了程序的编辑,并学会了KeilC51将C程序文件转变成十六进制程序语言HEX文件。
Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起[9]。
我的仿真软件采用了Proteus来对我的设计进行仿真,Proteus(海神)的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。
仿真图如图3-3所示。
图3-3电路仿真图
仿真图完全达到了设计要求及预期,经过对程序的些微调整后马上进行实物的制作。
第四章实物的制作与调试
要完成一项设计理论知识当然十分重要,也是基础,但实际动手能力也要多加学习才能事半功倍。
4.1原理图的绘制与PCB的制作
4.1.1原理图的绘制
(1)在Protel99se中先新建一个工程,把所需要的元件载入到文档里面。
(2)画好元件库与封装库里的没有的元件原理图与封装。
(3)再按照系统电路图绘制导线,把元件连好线。
(4)通过电气检查如果没有错误,那么系统的电路图就绘制完成。
原理图如图4-1所示,由于默认元件库和封装库里没有我要用到的双位数码管和四位数码管,于是我学习动手画好,我的设计线过多,为了能更准确得查看疏漏我采用了网络标号的方式,网络标号也是越来越被专业绘图人员所采用[10]。
图4-1Protel99se电路原理图
4.1.2PCB的绘制
将画好的原理图转为PCB图,设置好规则开始布线,由于我的连线十分复杂,这方面花了我很大一部分精力,也使我更加了解了Protel99se这个软件的功能,而且学校PCB板的大小有限制最大只有12*10cm的板子,我的PCB要远大于这个数值,所以我把原来的PCB分成2部分来完成:
单片机部分与数码管显示部分,两部分通过导线连接。
如图4-2和4-3所示:
图4-2PCB单片机部分
图4-3PCB数码管显示部分
4.2元件安装焊接
一、安装元件时应注意以下原则:
(1)为避免因元器件发热而减弱铜箔对基板的附着力,并防止元器件的裸露部分同印制导线短路,安装时元器件应离开面板约1~2mm。
(2)装配时,应该先安装那些需要机械固定元器件,在此装置中如稳压管、中心芯片插座。
(3)各种元器件的安装,应该使它们的标记(用色码或字符标注的数值,精度等)朝上面或易于是辨认的方向,并注意标记的读书方向一致(从左到右或从上到下)。
(4)在安装元件时应与焊接同步进行操作。
二、焊接注意的基本事项
在电子制作过程中,焊接工作是必不可少的。
它不但要求将元件固定在电路板上,而且要求焊点必须牢固、圆滑,所以焊接技术的好坏直接影响到电子制作的成功与否,焊接时要注意以下几点:
(1)焊接方法:
焊接时应掌握焊接的温度和焊接的时间,使电烙铁的温度高于焊锡的温度,但也不能太高,以烙铁头接触松香刚刚冒烟为好。
焊接时间太短,焊点的温度过低,焊点融化不充分,焊点粗糙容易造成虚焊,反之焊接时间过长,焊锡容易流淌,并且容易使元件过热损坏元件。
同样地,要掌握焊接点的上锡数量,焊接点上的焊锡数量不能太少,太少了焊接不牢,机械强度也太差。
而太多容易造成外观一大堆而内部未接通。
焊锡应该刚好将焊接点上的元件引脚全部浸没,轮廓隐约可见为好。
最后,要注意烙铁和焊接点的位置,有些人在焊接时,一般将电烙铁在焊接处来回移动或者用力挤压,这种方法是错误的。
正确的方法是用电烙铁的焊锡面去接触焊接点,这样传热面积大,焊接速度快。
(2)焊接后的检查:
焊接结束后必须检查有无漏焊、虚焊以及由于焊锡流淌造成的元件短路。
虚焊较难发现,可用镊子夹住元件引脚轻轻拉动,如发现摇动应立即补焊。
(3)对于不同的器件,焊接时的具体操作一般不同:
焊接一般元件时,将插好元件的印制板焊接面朝上,左手拿焊锡丝,右手持电烙铁,把烙铁头贴着元件的引线加热,使焊锡丝在高温下熔化,沿着引线下流动,直至充满焊孔并覆盖引线周围的金属部分。
然后撤去焊锡丝,并沿着引线向上提拉烙铁头,形成像水滴一样光亮的焊点。
焊接速度要快,一般不超过3S,以免损坏元件;
焊接晶体管等器件时,可用镊子或尖嘴钳夹住管脚进行焊接,因镊子和钳子具有散热作用,可以保护器件;
焊接集成电路时,双列直插式集成电路块的管脚之间距离只有25mil,焊点过大,会造成相邻管脚短路。
应采用尖头电烙铁,快速焊接。
电烙铁温度不能太高,焊接时间不能