日历时钟的设计.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计报告书
课题名称日历时钟的设计
姓名
学号
院、系、部物理与电子科学系
专业应用电子技术
指导教师
2013年11月20日
目录
绪言 (3)
二、方案比较与论证 (3)
2.1 系统整体流程图 (3)
2.2单片机芯片的选择方案和论证: (4)
2.3时钟方案选择 (5)
2.4显示模块的选择 (5)
2.5键盘模块的选择 (5)
2.6具体设计分析 (5)
三、硬件电路设计 (6)
3.1整个电路原理图 (6)
3.2数码显示模块设计 (7)
3.3按键模块 (7)
3.4复位电路 (8)
四.程序流程图 (8)
五、系统仿真 (9)
5.1Proteus软件应用 (9)
5.2实验测试 (10)
六主要元器件选择 (11)
七、参考文献 (11)
八.结束语 (11)
附录2 部分源程序 (12)
绪言
数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。
虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。
另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。
单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。
时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。
二、方案比较与论证
2.1 系统整体流程图
2.2单片机芯片的选择方案和论证:
方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。
用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。
但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。
方案二:用可编程逻辑器件(PLD)实现。
这种方案与前一种相比,可靠性增加,同时可以很好的完成时钟的功能。
同时这种方案只能选用数码管显示,显示的效果不够理想,无法很好的完成扩展功能的要求,系统的灵活性不够。
方案三:采用AT89S52单片机作为系统的控制核心。
时钟功能采用单片集成的时钟芯片DS1307来实现,可以使用液晶显示时间、日历及闹铃,有着智能化的人机界面。
由于使用了单片机,整个系统可编程,系统的灵活性大大增加了。
另外,本方案可以方便的实现其他功能的扩展。
经过以上的比较论证,选用方案三来完成项目设计的要求。
2.3时钟方案选择
方案一:基本门电路搭建。
用基本门电路来实现时钟发生器,电路结构复杂,故障系数大,不易调试。
方案二:专用时钟芯片。
目前市场上已有很多实时时钟芯片。
如DS12887、DS1302、DS1307、PCF8563、X1227等,芯片内都集成了时钟/日历功能,给时钟系统设计带来很多方便。
根据设计要求,在本设计中我采用了DS1302时钟芯片。
2.4显示模块的选择
方案一:使用多个数码管显示。
LED数码管是利用二极管发光显示数字和字母,具有亮度大、接口设计比较容易,价格相对较便宜等优点。
但是由于它工作电流较大、不能显示汉字,显示的信息量有限,若在此题目中应用就会受到很大的限制。
方案二:采用液晶显示。
液晶特别是具有汉字显示功能的液晶显示器,来实现显示功能,不仅可以实现基本的显示信息,而且可以显示丰富的符号指示信息以及文字指示信息,信息量丰富且直观易懂。
而且液晶显示有功耗低,体积小,重量轻,寿命长,不产生电磁辐射污染等优点。
系统采用方案二,设计选用LCD1602液晶显示模块。
2.5键盘模块的选择
方案一:采用独立式按键电路。
每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。
但是当按键较多时占用单片机的I/O数目较多。
方案二:采用阵列式键盘。
此类键盘是采用行列扫描方式,当按键较多时可以降低占用单片机的I/O口数目。
根据设计要求我采用了方案二。
2.6具体设计分析
利用单片机(A T89S51)制作简易电子时钟,由六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。
结合本设计实验来说,要求显示的时间为时,分,秒,并且都用两位数码管来实现显示。
因此,具体设计程序时,应尽可能多用一些子程序与数据暂寄存器单元。
本程序设计中,在主程序之外,可以设置时间值处理子程序,时间值显示前的处理子程序,按键情况扫描子程序,1S定时中断子程序以及5ms延时消除按键抖动子程序等多个小型的子程序。
另外,可以设置一些数据单元作为数据寄存器。
用28H,2AH,2BH和2CH地址单元分别作为显示位数的扫描指针值寄存器,时寄存器,分寄存器和秒寄存器,再用20H地址单元作为显示寄存器
三、硬件电路设计
3.1整个电路原理图
数码管的引脚图
3.2数码显示模块设计
数码管是一种把多个LED 显示段集成在一起的显示设备。
有两种类型,一种是共阳型,一种是共阴型。
共阳型就是把多个LED 显示段的阳极接在一起,又称为公共端。
共阴型就是把多个LED 显示段的阴极接在一起,即为公共商。
阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。
通常的数码管又分为8段,即8个LED 显示段,这是为工程应用方便如设计的,分别为A 、B 、C 、D 、E 、F 、G 、DP ,其中DP 是小数点位段。
而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。
即,所有的A 段都会连在一起,其它的段也是如此,这是实际最常用的用法。
数码管显示方法可分为静态显示和动态显示两种。
静态显示就是数码管的8段输入及其公共端电平一直有效。
动态显示的原理是,各
个数码管的相同段连接在一起,共同占用8 位段引管线;每位数码管的阳极连在一起组成公共端。
利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
系统采用动态显示方式,用P0口来控制LED 数码管的段控线,而用P2口来控制其位控线。
动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。
3.3按键模块
时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器、时个位和时十位计数器及星期计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,时个位和时十位计数器为24进制计数器。
下图为按键模块电路原理图。
3.4复位电路
单片机复位的条件是:必须使RST/VPD 或RST引(9)加上持续两个机器周期(即24个振荡周期)的高电平。
例如,若时钟频率为12 MHz,每机器周期为1μs,则只需2μs 以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
单片机常见的复位如图所示。
电路为上电复位电路,它是利用电容充电来实现的。
在接电瞬间,RESET 端的电位与VCC相同,随着充电电流的减少,RESET的电位逐渐下降。
只要保证RESET 为高电平的时间大于两个机器周期,便能正常复位。
该电路除具有上电复位功能外,若要复位,只需按图中的RESET键,此时电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。
五、系统仿真
运用proteus软件进行仿真现在proteus软件中建立一个新的文件,再根据自己的要求选择所需的器件,把器件进行适当的排位后进行连接,连接后运行软件进行仿真。
5.1Proteus软件应用
1.原理图编辑窗口(The Editing Window):顾名思义,它是用来绘制原理图的。
蓝色方框内为可编辑区,元件要放到它里面。
注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。
2.预览窗口(The Overview Window):它可显示两个内容,一个是:当你在元件列表中选择一个元件时,它会显示该元件的预览图;另一个是,当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。
3.模型选择工具栏(Mode Selector Toolbar):
主要模型(Main Modes):
1* 选择元件(components)(默认选择的)
2* 放置连接
3* 放置标签(用总线时会用到)
4* 放置文本
5* 用于绘制总线
6* 用于放置子电路
7* 用于即时编辑元件参数(先单击该图标再单击要修改的元件)
配件(Gadgets):
1* 终端接口(terminals):有VCC、地、输出、输入等接口
2* 器件引脚:用于绘制各种引脚
3* 仿真图表(graph):用于各种分析,如Noise Analysis
4* 录音机
5* 信号发生器(generators)
6* 电压探针:使用仿真图表时要用到
7* 电流探针:使用仿真图表时要用到
8* 虚拟仪表:有示波器等
2D图形(2D Graphics):
1* 画各种直线
2* 画各种方框
3* 画各种圆
4* 画各种圆弧
5* 画各种多边形
6* 画各种文本
7* 画符号
8* 画原点等
4.元件列表(The Object Selector):用于挑选元件(components)、端接口(terminals)、信号发生器(generators)、仿真图表(graph)等。
举例,当你选择“元件(components)”,单击“P”按钮会打开挑选元件对话框,选择了一个元件后(单击了“OK”后),该元件会在元件列表中显示,以后要用到该元件时,只需在元件列表中选择即可。
5.方向工具栏(Orientation Toolbar):
旋转:旋转角度只能是90的整数倍。
翻转:完成水平翻转和垂直翻转。
使用方法:先右键单击元件,再点击(左击)相应的旋转图。
6.仿真工具栏
仿真控制按钮
1* 运行
2* 单步运行
3* 暂停
4* 停止
按照自己设计的电路图就可以画出想要的电路图!
2.在软件中模拟和实际的效果为什么有如此大的差别?
答:软件中模拟受到电脑CPU工作频率的影响,所以效果不是很明显,但是一些基本的现象还是可以看出来的。
只要我们知道原理和图是正确的,那么就没有必要考虑太多的未知因素。
在实际面包板中一定会看到正确的现象。
3.面包板连线注意事项!!!!!!
答:面包板连线时一定要弄清楚它的原理,不然就会一点头绪都找不到。
连接芯片是要弄清楚各个引脚对应的端口号,该接地的地方一定要接地,该接高电平的地方一定要接高电平。
5.2实验测试
主要的设计要求是能够实现时钟的一般功能,以及包括时间的调整功能,这个基于单片机的电子时钟基本上实现了上述功能,能够通过时间调整电路对时间进行调整以及复位。
下述为12:00:00的仿真图:
图8 12:00:00时刻的仿真效果图
六主要元器件选择
七、参考文献
【1】张迎新.单片机初级教程【M】.北京:北京航空航天大学出版社,
2006.
【2】冯志强.Altium Designer8.0中文版电路设计【M】.北京:清华大学出版社,
2009.
【3】杨素行.模拟电子技术基础简明教程(第三版)【M】.北京:高等教育出版社,2006.
【4】余孟尝.数字电子技术基础简明教程(第三版)【M】.北京:高等教育出版社,2006.
【5】程鹏.自动控制原理(第二版)【M】.北京:高等教育出版社,
2006.
【6】王化祥,张淑英.传感器原理及应用(第三版)【M】.天津:天津大学出版社,
2007.
【7】邱关源,罗先觉.电路(第五版)【M】.北京:高等教育出版社,
2006.
【8】王明泉.信号与系统【M】.北京:科学出版社,
2006.
八.结束语
设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
另外,要非常感谢我的指导老师,是她指引我克服一个由一个的困难,让我学会对困难无所畏惧,以及对问题的一些很重要的思考方法。
附录2 部分源程序
ORG 00H;主程序起始地址
JMP START;主程序START
ORG 0BH;定时器T0中断起始地址
JMP TIM0;定时器T0中断子程序TIM0 START: MOV SP;#70H;设置堆栈指针
MOV 28H,#00;设置显示位数扫描指针初值为0 MOV 2AH,#12H;设置时钟显示寄存器初值为12H
MOV 2BH,#00;设置分钟显示寄存器初值为00H MOV 2CH,#00;设置秒钟显示寄存器初值为00H MOV TMOD,#01H;设置定时器T0工作在方式1 MOV TH0,#0F0H;定时4ms的初值,即0F060H MOV TL0,#60H;初值的低位
MOV IE,#82H;定时器T0中断允许
MOV R4,#250;保证后面实现中断250次,即1s 的延时
SETB TR0;启动定时器T0
LOOP: JB P0.0,N2;若秒没有按键,就转去下一步检查分
CALL DELAY;延时5ms消除抖动
MOV A,2CH;将秒寄存器的值载入累加器A ADD A,#01H;A的内容加1
DA A;十进制调整
MOV 2CH,A;A 的值存入秒寄存器
CJNE A,#60H,N1;看是否已经是60秒,若不是就继续检查
MOV 2CH,#00;已经是60秒,就清空秒寄存器的值
N1: JNB P0.0,$;秒按键还没有放开就循环等待CALL DELAY;延时5ms,消除抖动
N2: JB P0.1,N4;若分没有按键,就转去下一步检查时钟
CALL DELAY;延时5ms,消除抖动
MOV A,2BH;将分寄存器的值载入累加器A ADD A,#01H;A的内容加1
DA A;十进制调整
MOV 2BH,A;A的值存入分寄存器
CJNE A,#60H,N3;看是否已经是60分
MOV 2BH,#00;已经是60分,就清空秒寄存器的值
N3: JNB P0.1,$;分按键还没有放开就循环等待CALL DELAY;延时5ms,消除抖动
N4: JB P0.2,LOOP;若时没有按键,就转回去继续检查看是否秒有按键
CALL DELAY;延时5ms,消除抖动MOV A,2AH;将时寄存器的值载入累加器A ADD A,#01H;A的内容加1
DA A;十进制调整
MOV 2AH,A;A的值存入时寄存器
CJNE A,#24H,N5;看是否已经是24时,若不是就继续检查
MOV 2AH,#00;已经是24时,就清空寄存器的值N5: JNB P0.2,$;时钟按键还没有放开就循环等待CALL DELAY;延时5ms,消除抖动
JMP LOOP;返回重新检查看是否有按键
;*******定时器T0中断子程序*******
TIM0: MOV TH0,#0F0H;定时初值重设MOV TL0,#60H
PUSH ACC;将累加器A的值暂存于堆栈PUSH PSW;将PSW的值暂存于堆栈
DJNZ R4,X2;计时中断不满1s就退出继续中断MOV R4,#250;计时1s
CALL CLOCK;调用计时子程序CLOCK
CALL DISP;调用显示子程序DISP
X2: CALL SCAN;调用扫描子程序SCAD POP PSW;到堆栈取回PSW的值
POP ACC;到堆栈取回累加器ACC的值RETI;返回主程序;
;****扫描子程序****
SCAN: MOV R0,#28H
INC @R0;显示位数扫描值加1
CJNE @R0,#6,X3;扫描位数不为6就准备控制输出
MOV @R0,#0;扫描位数为6,就另其值为0
X3:MOV A,@R0;扫描位数载入A
ADD A,#20H;A加上20H(显示寄存器地址)=各时间显示区地址
MOV R1,A;各时间显示区地址存入A
MOV A,@R0;扫描位数存入A
SWAP A;将A的高低4位交换(其高4位为扫描的位数,低4位为显示数据值)
ORL A,@R1;将扫描值与显示数据组合
MOV P1,A;显示输出
RET
;******计时子程序******
CLOCK: MOV A,2CH;秒寄存器值载入A
ADD A,#1;加1秒
DA A;十进制调整
MOV 2CH,A;A的值存入秒寄存器
CJNE A,#60H,X4;A不等于60秒,就跳出程序去
显示
MOV 2CH,#00;已经是60秒,就清0
MOV A,2BH;分寄存器值载入A
ADD A,#1;加1分
DA A;十进制调整
MOV 2BH,A;A的值存入分寄存器
CJNE A,#60H,X4;A不等于60分,就跳出程序去显示
MOV 2BH,#00;已经是60分就清0
MOV A,2AH;时寄存器值载入A
ADD A,#1;加1小时
DA A;十进制调整
MOV 2AH,A;A的值存入是寄存器
CJNE A,#24H,X4;A不等于24时,就跳出程序去显示
MOV 24H,#00;已经是24时,就清0
X4: RET
;******显示子程序******
DISP: MOV R1,20H;20H为显示寄存器单元MOV A,2CH;将秒寄存器的内容存入A
MOV B,#10H;设B累加器的值为10H
DIV AB;A/B,商存入A(十位数),余数存入(个位数)
MOV @R1,B;将显示的个位数存入20H显示寄存器单元
INC R1
MOV @R1,;A将显示的十位数存入21H显示寄存器单元INC R1
MOV A,2BH;将分寄存器的内容存入A
MOV B,#10H;设B累加器的值为10H
DIV AB;A/B,商存入A(十位数),余数存入(个位数)
MOV @R1,B;将显示的个位数存入22H显示寄存器单元
INC R1
MOV @R1,A;将显示的十位数存入23H显示寄存器单元
INC R1
MOV A,2AH;将时寄存器的内容存入A
MOV B,#10H;设B累加器的值为10H
DIV AB;A/B,商存入A(十位数),余数存入(个位数)
MOV @R1,B;将显示的个位数存入24H显示寄存器单元
INC R1
MOV @R1,A;将显示的十位数存入25H显示寄存器单元
RET
;******延时5ms消除抖动******
DELAY: MOV R6,#60
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
EN。