单片机的万年历的设计 精品.docx
《单片机的万年历的设计 精品.docx》由会员分享,可在线阅读,更多相关《单片机的万年历的设计 精品.docx(24页珍藏版)》请在冰豆网上搜索。
单片机的万年历的设计精品
基于单片机的万年历的设计
一、方案设计
(一)电路方案的选取
1.单片机芯片的选择方案
方案一:
采用AT89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。
方案二:
采用AT89C52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有AT89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏,所以选择采用AT89C52作为主控制系统。
2.显示模块选择方案
方案一:
采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,与液晶相比,耗电及体积大与液晶相比,耗电及体积大,所以也不用此种作为显示。
方案二:
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样,清晰可见,省了很多麻烦,所以在此设计中采用LCD液晶显示屏。
3.电路设计最终方案决定
综上各方案所述,对本次设计方案选定:
采用AT89C52作为主控制系统;DS1302提供时钟;LCD液晶显示屏作为显示。
电路设计框图如图2-1所示:
图2-1系统原理图
二、电路的硬件设计
(一)系统硬件介绍
本电路是由AT89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。
可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS1822构成;显示部份由LCD液晶显示屏显示。
1.AT89C52单片机简介
AT89C52是51系列的一个型号。
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
AT89C52引脚分布如图2-2所示:
图2-2AT89C52引脚分布图
(二)主要单元电路的设计
1.单片机主控制模块的设计
AT89C52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,每一条I/O线都能独立地作输出或输入。
单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。
第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。
主控制系统如图2-3所示:
图2-3主控制系统
2.时钟电路模块的设计
图2-4示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768KHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。
中有在SCLK为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。
SCLK始终是输入端。
DS1302的连接如图2-4所示:
图2-4DS1302的连接图
3.时钟电路原理及说明
(1)时钟芯片DS1302的工作原理:
DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。
DS1302的控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。
对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0,位1至位5指操作单元的地址。
位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。
控制字节总是从最低位开始输入/输出的。
表2为DS1302的日历、时间寄存器内容:
“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。
“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。
当“WP”为1时,写保护位防止对任一寄存器的写操作。
(2)DS1302的控制字节:
DS1302控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出命令字节的格式如表2-1所示:
表2-1命令字节格式
D7D6D5D4D3D2D1D0
1
R/c
A4
A3
A2
A1
A0
R/w
(3)数据输入输出(I/O)
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
单字节传送操作格式如图2-5所示:
图2-5单字节传送操作格式
多字节突发模式操作格式如图2-6所示:
图2-6多字节突发模式操作格式
(4)DS1302的寄存器
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。
DS1302与RAM相关的寄存器分为两类:
一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
DS1302片内各寄存器数据格式如表2-2所列:
表2-2DS1302片内各寄存器数据格式
时钟/RAM
数据格式
D7
D6
D5
D4
D3
D2
D1
D0
秒:
00~59
CH
10秒
秒
分:
00~59
0
10分
分
时:
00~23
0
0
10小时
小时
日:
01~31
0
0
10日
日
月:
01~12
0
0
0
10月
月
星期:
01~07
1
0
0
0
0
星期
年:
01~07
10年
年
控制
WP
0
0
0
0
0
0
0
RAM0~30
X
X
X
X
X
X
X
X
4.温度测量模块的设计
DS1822是一种用一根信号线与一根返回线来实现互连通信的集成电路芯片。
采用这种芯片构成的微型局域网系统具有建网速度快、成本低的特点,非常适合现场应用。
一线数字温度计芯片DS1822就是DALLAS公司推出的系列一线总线产品之一,它支持DALLAS触摸接口,遵循一线协议,并可以与处理器进行双向数字通信,同时性价比也很高,是一种使用起来非常方便的经济型温度传感器。
DS1822内部电路的核心是一个直接数字输出的温度传感器。
它可将-55~125℃范围内的温度值按9位、10位、11位、12位的分辨率进行量化,且以上的分辨率都包括一个符号位,因此对应的温度量化值分别是0.5℃、0.25℃、0.125℃、0.0625℃,即最高分辨率为0.0625℃,工作电压范围为3.0~5.5V。
(1)DS1822的测温原理
用DS1822一线式数字温度芯片测量温度的原理如图所示。
它没有采用传统的A/D转换原理,如逐次逼近法、双积分式和算术A/D等,而是运用了一种将温度直接转换为频率的时钟计数法,计数时钟由温度系数很低的振荡器产生,因而非常稳定;而计数的闸门周期则由温度系数很高(即对温度非常敏感)的振荡器来决定。
温度测量的原理框图如图2-7所示:
置1/清零
停止
图2-7温度测量的原理框图
计数器中的预置值以-55℃时的计数值为基准,在闸门开放计数期间,每当计数值达到0,则温度寄存器就加1,温度寄存器中的预置值也以-55℃的测量值为基准。
同时计数器的预置值还与斜坡累加器电路有关,该电路用于补偿振荡器对温度的抛物线特性,因此还要用时钟脉冲针对这个非线形校正预置值作计数操作,直至计数值达到0为止,如果此时闸门还未关闭,则再重复计数过程。
斜坡累加器补偿了振荡器对温度的非线形特性,从而可以获得较高的温度测量分辨率,改变相对于测温量化级的计数量大小即可获得不同的分辨率。
(2)DS1822的测温过程
在测温时对DS1822进行操作的步骤如下:
a.初始化(READROM指令,代码33H),每次对DS1822进行操作之前都要对其进行初始化,主要目的在于确定温度传感器是否已经连接到单总线上。
b.查找DS1822(SEARCHROM指令,代码FOH),该指令可使处理器通过排除法来辨别总线上的DS1822。
c.匹配DS1822(MACTHROM指令,代码55H),只有完全符合64位ROM序列的DS1822才能响应其后的指令,当然,单点测温时可以使用SKIPROM(CCH)指令来跳过这一步。
d.发送温度转换指令(CONVERTT指令代码44H),发送该指令后应查询总线上的电平,当电平为高时,温度转换完成。
e.读取温度值(READSCRTCHPAD指令代码BEH),将该指令发出后,就可从总线上读取表示温度的两字节的二进制数。
整个测温过程中的第4\5步才是DS1822进行测温并将结果进行数字化转换和输出的过程。
DS1822接收到转换命令(44H)将立刻实施温度转换,并将结果存储到16位便笺式存储器中,数据格式为符号位扩展的二进制补码,然后用读便笺式存储器命令(BEH)将所得数据顺序置于总线上,最低位在前,最高位定义为符号位以表示温度的正负。
DS1822温度与数字输出典型值的对照表如表2-3所列:
表2-3DS1822温度与数字输出的典型值
温度(℃)
数字输出(二进制)
数字输出|(十六进制)
+125
00000111110110000
07D0
+85
0000010101010000
0550
+25.625
0000000110010001
0191
+10.125
0000000010100010
00A2
+0.5
0000000000001000
0008
0
0000000000000000
0000
-0.5
1111111111111000
FFF8
-10.125
1111111101011110
FF5E
-25.625
1111111001101111
FE6F
-55
1111110010010000
FC90
(3)温度测量模块的电路图设计如图2-8所示:
图2-8温度测量模块电路
5.显示模块的设计
如图2-9为LCD显示模块。
图2-9LCD液晶显示屏显示模块
6.闹铃模块电路设计
闹铃功能是可以设置多个闹铃的。
闹铃的持续时间为一分钟。
可以手动按键关闭闹铃。
闹铃电路模块如图2-10所示:
图2-10闹铃模块电路图
三、电路的软件设计
(一)程序流程框图
当电路接入电源后,首先进行初始化。
初始化完成后如果是反正实验显示屏会自动读取当前计算机时间,如果是实物电路则会却不显示零。
这时通过按键进入子程序进行时间设置调整。
主程序流程图如图3-1所示:
图3-1主程序流程图
(二)子程序流程图
子程序主要是对时间和闹铃时间进行设置调整。
时间及闹铃程序流程图如图3-2所示.
图3-2时间及闹铃程序流程图
四、万年历功能仿真
(一)Proteus软件简介
Proteus软件不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,20XX年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
1.进入ProteusISIS
双击桌面上的ISIS6Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus7.1Professional”→“ISIS7.1Professional”,出现如图4-1所示
图4-1启动时的屏幕
2.基本操作
(1)图形编辑窗口
在图形编辑窗口内完成电路原理图的编辑和绘制。
为了方便作图采用了坐标系统ISIS中坐标系统的基本单位是10nm,主要是为了和ProteusARES保持一致。
但坐标系统的识别单位被限制在1th。
坐标原点默认在图形编辑区的中间,图形的坐标值能够显示在屏幕的右下角的状态栏中。
点状栅格与捕捉到栅格编辑窗口内有点状的栅格,可以通过View菜单的Grid命令在打开和关闭间切换。
点与点之间的间距由当前捕捉的设置决定。
实时捕捉(RealTimeSnap):
当鼠标指针指向管脚末端或者导线时,鼠标指针将会被捕捉到这些物体,这种功能被称为实时捕捉,该功能可以使你方便的实现导线和管脚的连接。
可以通过Tools菜单的RealTimeSnap命令或者是TRL+S切换该功能。
可以通过View菜单的Redraw命令来刷新显示内容,预览窗口中的内容也将被刷新。
当执行其它命令导致显示错乱时可以使用该特性恢复显示。
(2)预览窗口(TheOverviewWindow)
该窗口通常显示整个电路图的缩略图。
在预览窗口上点击鼠标左键,将会有一个矩形蓝绿框标示出在编辑窗口的中显示的区域。
其他情况下,预览窗口显示将要放置的对象的预览。
这种PlacePreview特性在下列情况下被激活:
●当一个对象在选择器中被选中
●当使用旋转或镜像按钮时
●当为一个可以设定朝向的对象选择类型图标时当放置对象或者执行其他非以上操作时,placepreview会自动消除
●对象选择器(ObjectSelector)根据图标决定的当前状态显示不同的内容。
(3)对象选择器窗口
通过对象选择按钮,从元件库中选择对象,并置入对象选择器窗口,供今后绘图时使用。
显示对象的类型包括:
设备,终端,管脚,图形符号,标注和图形。
(4)图形编辑的基本操作包括:
a.选中对象(TagginganObject)
用鼠标指向对象并点击右键可以选中该对象。
该操作选中对象并使其高亮显示,然后可以进行编辑。
选中对象时该对象上的所有连线同时被选中。
要选中一组对象,可以通过依次在每个对象右击选中每个对象的方式。
也可以通过右键拖出一个选择框的方式,但只有完全位于选择框内的对象才可以被选中。
在空白处点击鼠标右键可以取消所有对象的选择。
b.删除对象(DeletinganObject)
用鼠标指向选中的对象并点击右键可以删除该对象,同时删除所有连线。
c.拖动对象标签(DragginganObjectLabel)
许多类型的对象有一个或多个属性标签附着。
可以很容易地移动这些标签使你的电路图看起来更美观。
移动标签的步骤如下(Tomovealabel):
首先,选中对象;然后,用鼠标指向标签,按下鼠标左键。
进而,拖动标签到你需要的位置。
d.调整对象大小(ResizinganObject)
子电路(Sub-circuits)、图表、线、框和圆可以调整大小。
当你选中这些对象时,对象周围会出现黑色小方块叫做“手柄”,可以通过拖动这些“手柄”来调整对象的大小。
调整对象大小的步骤如下(Toresizeanobject):
首先选中对象;然后如果对象可以调整大小,对象周围会出现黑色小方块,叫做“手柄”。
最后用鼠标左键拖动这些“手柄”到新的位置,可以改变对象的大小。
在拖动的过程中手柄会消失以便不和对象的显示混叠。
(二)按键功能介绍:
1.主界面按键功能由上而下依次为:
1)设置时间;2)设置闹钟;3)闹铃开关;
4)当闹铃触发时按下停止闹铃(否则会在一分钟后停止)
2.当设置时间和闹铃时按键功能介绍
1)切换设置光标;2)设置光标对应处加1;
3)保存设置信息返回主界面;
4)不保存设置信息返回主界面。
按键分布如图4-3所示:
图4-3按键分布
(三)仿真结果显示
1.上电后后LED显示:
此时电路初始化完毕,并读取了计算机时间,此时闹铃默认为关。
电路初始化完毕后显示图如图4-4所示:
图4-4电路初始化完毕后显示图
2.调节分钟:
按下时间设置键,首先显示分钟设置调整,按
(2)键增加1。
超过60则归零。
调节分钟显示图如图4-5所示
图4-5调节分钟显示图
3.调节小时:
设置分钟完成后继续按下时间设置键怎会进入小时调整,同理按
(2)键加一超过23则归零。
调节小时显示图如图4-6所示:
图4-6调节小时显示图
4.调节日期:
同理设置日期,程序会根据月份进行归零。
调节日期显示图如图4-7所示:
:
图4-7调节日期显示图
5.调节月份:
同理调节月份,超过12则会归零。
调节月份显示图如图4-8所示:
图4-8调节月份显示图
6.调节年份:
年份显示会在初始化读取当前年份,按
(2)键加一。
调节年份显示图如图4-9所示:
图4-9调节年份显示图
7.点击闹铃开启键显示:
在主程序下按(3)键,开启或关闭闹铃,按
(2)键进图闹铃时间设置。
闹铃时间设置如同程序数字钟时间设置,不再赘述。
闹铃开启显示如图4-10所示:
图4-10闹铃开启显示
总结
是我们三年所学知识的综合运用,也是创新思维和设计能力相结合的过程。
虽然再此之前也有过几次课程设计,但无论时间、精力还是从设计过程中得到的收获,都比不上。
这次大大提高了我们对实际电路设计的熟练程度,同时激发了我们对本专业课程的兴趣。
制作这次一切都是从零开始,从最简单的画流程图起步,这次课程设计可以圆满完成,跟单片机课程里面的课外作业是离不开的。
这次从开始到仿真成功前后经历了一个学期。
在整个设计过程中,充分发挥我的主观能动性,自主学习,学到了许多没学到的知识。
较好的完成了设计,达到了预期的目的,完成最初的设想。
对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学讨论,理清了思路,反而得心应手。
在此次设计中,知道了做任何事都要有一颗平常的心,不要想着走捷径,一步一个脚印。
也练就了我的耐心,做什么事都要有耐心。
此次课程设计中学到了很多很多东西,这是最重要的。
总之,此次课程设计使我的能力得到了全方位的提高,使我的操作能力和专业技能都有了很大的提高。
这次使我明显的感觉到自身知识的缺乏,同时让我对电子设计所必须的知识产生了浓厚的兴趣,这必将激励我在今后的生活中更加努力的学习。
由于本人知识能力有限,加上时间仓促,万年历定会存在各种不足,希望广大的读者和老师能多多修改更正。
附录一:
系统电路图
附录二:
仿真程序
#include
#include
/************************************************************/
#defineucharunsignedchar
#defineuintunsignedint
#defineTIME(0X10000-50000)
#defineFLAG0XEF//闹钟标志
/************************************************************/
//全局变量及常量定义
uchari=20,j;
ucharDataBuf[16]={};//日期
ucharTimeBuf[16]={};//时间
ucharalarm[2],time[3];
ucharcodeDay[]={31,28,31,30,31,30,31,31,30,31,30,31};//12个月的最大日期(非闰年)
//闰年月星期表
constunsignedcharWeekTab[]={
(3<<5)+31,///1月
(6<<5)+29,///2月
(0<<5)+31,///3月
(3<<5)+30,///4月
(5<<5)+31,//5月
(1<<5)+30,//6月
(3<<5)+31,//7月
(6<<5)+31,//8月
(1<<5)+30,//9月
(4<<5)+31,//10月
(0<<5)+30,//11月
(2<<5)+31//12月
};