单片机作息时间控制器设计方案.docx
《单片机作息时间控制器设计方案.docx》由会员分享,可在线阅读,更多相关《单片机作息时间控制器设计方案.docx(29页珍藏版)》请在冰豆网上搜索。
单片机作息时间控制器设计方案
单片机作息时间控制器设计方案
第1章总体方案设计
1.1设计要求
本课题要求以单片机为核心,设计一个具有定时和计数功能的智能化作息时间控制器,用于学校教学楼的时间控制,实现时间基准定时,并配合“启动”、“复位”等按键的操作,并按作息时间显示的内容要求有有以下功能:
(1)按作息时间接通/断开电铃;
(2)课间接通/断开播放音乐设备;
(3)时间的设置与值显示(显示的内容要求有时、分、秒各两位)
1.2优点及意义
本课题要求设计一个具有定时和计数功能的智能化作息时间控制器,用于学校教学楼的时间控制,实现时间基准定时。
数码管显示电路采用LED动态控制方式,显示时分秒。
按键电路控制定时计时。
闹铃指示电路控制铃声。
1.3系统硬件电路设计
本方案采用一种是用以STC89C52为核心,外加8位数码管,蜂鸣器,继电器和按键完成系统的设计要求。
系统硬件设计框图。
根据设计要求,确定系统的设计方案,图1-1为系统总体设计计框图。
硬件电路由6个部分组成,即单片机时钟电路、复位电路、键盘输入电路、LED数码管显示电路、蜂鸣器电路、继电器电路。
图1-1系统设计框图
1.4初步设计思路
(1)定义一组数表,存字形码
(2)定义4个数据缓冲区,对应4个数码管,将要显示的字符的偏移量存入。
通过查表指令从P1口输出。
(3)LED数码管通过驱动电路,显示相应的状态。
位选由P2口高四位产生,
(4)通过P3口接通继电器和蜂鸣器。
(5)系统设置3个按键,分别是选择键、时间加键、时间减键。
第2章硬件电路设计
2.1时钟电路设计
单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,如图2-1所示。
图2-1时钟电路
电路中器件选择可以通过计算和实验确定,也可以参考一些典型电路参数。
电路中,电容器C1和C2对振荡频率有微调作用,同时帮助晶振起振,通常取值范围在22±0.1PF,一般晶振为12MHZ,电容取22PF。
石英晶体选择12MHZ。
2.2复位电路设计
表2-2复位电路设计
单片机系统的复位电路在可以采用的是按钮式上电复位电路形式,其中电阻R采用10KΩ的阻值,电容采22μF的电容值。
2.3键盘电路设计
为了减少键盘与单片机接口时所占用的I/O线的数目,独立是键盘。
由于只要使用3个按键,按键分别接p2.7p2.6p2.5。
J6跳线帽短接,是按键按下是接通到地。
图2-3按键电路设计
2.4显示电路设计
根据显示器显示接口的驱动方式采用动态显示。
显示器的选择位接P2口高四位P2.0-P2.3。
用动态扫描的方法进行显示,即逐个循环点亮各位显示器,实现4位共阳极LED的动态显示。
每次显示完4位,就判断时间是否超出,若超出则修改。
图2-4显示电路设计
2.5继电器电路
图2-5继电器电路
通过与设定时间比较,相等时P3.5接通继电器,继电器常闭断开,常开闭合,蜂鸣器接通,开始响铃。
同时接通D2是LED灯点亮作为指示灯。
2.6I/O接口的分配
表2-1I/O借口分配表
PO
数码管显示
P3.7
蜂鸣器
P2.7
K1
P2.0
数码管位选
P2.6
K2
P2.1
数码管位选
P2.5
K3
P2.2
数码管位选
P3.5
继电器
P2.3
数码管位选
第3章应用软件设计
3.1主程序设计
作息时间控制器的基本功能就是时间显示,要准确定时,就使用了定时器T0,定时50ms,同时用R2做软件计数,计数20次。
完成1s定时。
在主程序中对定时器赋初值,数据缓冲区初始化,同时对显示子程序、按键子程序、时间修改子程序、和响铃子程序的一次循环调用。
图3-1主程序流程图
3.2子程序设计
3.2.1显示子程序
采用动态显示,通过P2口P2.0-P2.3实现显示器位的控制。
令P2=0F7H,开始时取第一位待显参数(缓存区30H单元中的数,字形码的偏移量),将位控数据输出到P2口,将30H单元中的数转换为段码送入P0口。
再取下一位位控数,缓存区指针加一,延时。
循环显示,显示4次后结束循环。
LED数码管显示流程图:
开始
位控信号给P2口
查表后待显字符给P0口
将秒显示与入后显示
直接显示
R0指向数据缓冲区30H
指针R0加1位控信号左移
R0是否大于34H
显示结束
位控指向第3位没
是否
否
是
图3-2显示程序流程图
3.2.2响铃子程序
每次显示完4位时间后,就依次和预设的时间进行比较,看是否相等,若相等则对P3.7置1,开始响铃,同时判断20s时间完成没。
当20s响铃完成后,对P3.7口置0,响铃结束。
开始
响铃
当前时间与设定比较
响铃20s完成
否
是
否是
图3-3响铃子程序流程图
3.2.3键盘扫描子程序
系统设计中需要用到3个按键。
按键个数少,采用独立式键盘可以节约硬件资源。
编程也相对简单一点。
当读取到有按键按下时,加上延时去抖动,防止误读。
开始
调用显示程序
延时去抖动
读键值
执行功能
返回
按键按下?
按键按下?
按键松开?
否
是
否
是
否
是
图3-4按键子程序流程图
第4章系统调试与性能分析
先按电路原理图把线连接好,通过STC软件下载好程序后就可以进行硬件调试了。
(1)开机显示时间
电源接通后按下开机键,单片机开始工作,时间显示为16:
09。
其中小时的个位下面的点的闪烁用来表示秒针的自加。
闪烁30次后系统默认1分钟,时钟自加1。
图4-1开机时间显示
(2)定时响铃
当时间到设定值时如16:
40,上课打铃开始,蜂鸣器发出20s的声音。
图4-2定时打铃上课
(3)播放音乐。
当时间到大课间时,系统就会播放音乐,这里用第2位LED的点亮来代替音乐的播放。
图4-3课间休息放音乐
(4)修改时间,按下S1键后根据按下的次数,会分别点亮左边LED6LED5LED4LED3
分别表示可以修改时间个4位。
图4-4修改时间
在按键修改时出现过一些小问题,如可以调出24点25点等不存在的时间,经过后续的修改,这些问题都得到了解决
第5章总结
2周的课程设计就有结束了,对与自己能设计出一个作息时间控制器,并且功能也都基本实现感到高兴。
但是设计的东西也还只是试验阶段,做出来用还是会有好多毛病的,比如说音乐,就是用了个led代替,并不会真正唱歌。
还有就是调时间的时候,我想调第4位的话,要按4次,还不可以连续按4次,按太快的话系统读取不到按键。
总的来说,真真使用还是有好多小毛病需要改进的。
同时通过这次课程设计,然我们对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。
在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。
除了对此次设计的准备工作之外,我们还学到了很多平时难得的东西,首先是团队协作,在这次设计当中,难免和同学产生观点和意见的分歧,以及分工明细、时间安排等不合理,通过这次设计,我们体会到了团结合作的重要性及力量之强大,还有让我们处理事情更加有条理,思路更加清晰明了了,发现、提出、分析、解决问题和实践能力的提高都将受益于我在以后的学习、工作和生活中。
参考文献
[1]王迎旭等.单片机原理及及应用[M].2版.机械工业出版社,2012
[2]胡汉才.单片机原理及其接口技术[M].3版.清华大学出版社,2010.
[3]戴灿金.51单片机及其C语言程序设计开发实例[M].清华大学出版社,2010
附录
附录A硬件电路原理图
附录B程序清单
ORG0000H
SJMPMAIN
ORG000BH
AJMPDVT0
ORG0030H
MAIN:
MOV30H,#09H
MOV31H,#00H
MOV32H,#06H
MOV33H,#01H
MOV34H,#7FH
MOV20H,#0FFH
MOVTMOD,#01H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBET0
SETBEA
MOVR3,#10
MOVR4,#60
MOVR5,#00
MOVR7,#2FH
MOVR2,#0FFH
SETBTR0
W1:
LCALLPAN
LCALLSHIJIAN
LCALLSHIJIAN1
LCALLLO
LCALLANJIAN
LJMPW1
DVT0:
MOVTH0,#3CH
MOVTL0,#0B0H
DJNZR3,RTN
CPL20H.7
MOVR3,#10
DJNZR4,RTN
INC30H
MOVR4,#60
RTN:
RETI
LO:
MOVA,#00H;显示子程序
MOVP2,A
MOVA,#0FFH
MOVP0,A
MOVR0,#30H;指针指向数据缓冲区
MOVR1,#0F7H;数码管位控制
LOOP1:
MOVA,R1;位信号给p2点亮对应的位
MOVP2,A
MOVDPTR,#TABLE
MOVA,R0
CJNEA,#32H,LOOP4;判断R0是否指向第3位,若指向则将32H单元的数和20H单元数ANL后在显示
MOVA,@R0
MOVCA,@A+DPTR
ANLA,20H
SJMPLOOP5
LOOP4:
MOVA,@R0;不等于32H则跳转下来,将30H单元的数给A,后查表
MOVCA,@A+DPTR
LOOP5:
MOVP0,A;显示出来
LCALLDELY
INCR0;指针自加指向下一位
MOVA,R1
SETBC
RRCA
MOVR1,A
JCLOOP1;判读4次是否显示完成
RET
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
SHIJIAN:
MOVA,30H
CLRC
SUBBA,#0AH
JNZLP1
MOV30H,#00H
INC31H
MOVA,31H
CLRC
SUBBA,#06H
JNZLP1
MOV31H,#00H
INC32H
MOVA,33H
CLRC
SUBBA,#02H