C单片机实现电子闹钟.docx
《C单片机实现电子闹钟.docx》由会员分享,可在线阅读,更多相关《C单片机实现电子闹钟.docx(11页珍藏版)》请在冰豆网上搜索。
C单片机实现电子闹钟
ThelatestrevisiononNovember22,2020
C单片机实现电子闹钟
课程名称:
单片机原理与接口技术实践
设计课题:
基于MCS51单片机实现电子闹钟功能的设计
学院:
电子与信息工程学院
专业:
通信工程
小组成员:
电子闹钟在科学技术高度发展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。
本文给出了一种基于MCS51单片机实现电子闹钟功能的设计方法,从而给人们带来更为方便的工作与生活。
一.电子闹钟简介
我们设计的电子闹钟是以MCS51单片机中的计时器作为时钟,用8位数码管显示当前时间,并且可以设置闹钟时间,并在设置的时间点发出闹铃。
简易闹钟具有以下功能:
1.时钟能准确地走时,并可以通过数码管进行显示
2.复位后可以进行当前时间的设置
3.可以随意设置闹钟时间,闹钟会在设置时间响铃
整个系统的任务要求:
1)输入数字按键的功能。
保证数字的输入。
2)复位电路的功能。
所有时间回到初始化状态,用于启动设定时间参数(调时或设定闹钟时间);
3)显示电路的功能。
当输入数字时显示24小时时间功能。
4)闹铃功能
设置闹铃的时间后.能按设置好的时间准时闹铃。
二.系统方案的设计要求
根据以上各模块并结合显示屏的功能及元器件材料的情况,决定采用AT89C51为内核显示设计方案。
先进行系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进行各个模块的实物设计并逐个调试,待全部通过后,进行整个系统的联调,最终实现一个完整的系统。
整个系统的设计步骤如下:
在单片机最小系统的基础上,完成按键电路和复位电路的设计。
完成显示电路、数字按键、单片机时钟电路。
Ⅰ硬件设计
系统硬件的设计可以根据系统的各个功能,把整个系统划分成若干个模块,分别对这些模块来进行设计,然后在通过单片机程序来实现对各个硬件模块功能的调度。
本系统涉及到的硬件模块有:
按键电路、数码管显示电路、单片机时钟电路、蜂鸣器电路。
各部分实现功能如下:
按键电路:
提供按键信号。
单片机时钟电路、复位电路:
提供内部时钟。
数码管驱动显示电路:
显示当前时间。
蜂鸣器电路:
闹钟报时。
Ⅱ软件设计
本系统的软件部分主要完成功能:
时分秒的进位算法处理、数码管的时间显示、时间调整设置、闹钟功能。
根据软件的功能划分软件设计模块结构,如下所示
其中各个模块具体任务如下:
按键驱动模块:
对各个按键的功能进行相关的定义。
LED驱动模块:
根据系统需要显示相应的数字时间;
时间处理模块:
时、分、秒的进位算法处理
三.系统硬件电路的设计
1根据确定的硬件方案设计硬件框图,如下图所示:
2系统原理图的设计
系统总的硬件电路如下图所示
实际要用到5个按键,受空间限制仿真电路中只画出4个。
单片机管脚资源分配:
P0口为数码管段选信号输出口。
P3口为数码管位选信号输出口。
、、、、为键盘的输入信号。
为蜂鸣器信号的输出口。
下面分别介绍各个电路。
(1)数码管驱动及显示电路
本设计采用8位7段共阳极数码管用来显示时间。
为了将时间在LED数码管上显示可采用动态显示法。
通过对每位数码管的依次扫描,使对应数码管亮;同时向该数码管送对应的字码使其显示数字。
由于数码管扫描周期很短,而且人眼有视觉暂留效应,所以数码管看起来总是亮的从而实现了数字的同时显示。
数码管主要包括位选和段选信号线。
位选是用来选通数码管的,只有位选信号有效该数码管才会亮并显示要现实的数字;段选是选择数码管7段的那一笔亮,从而显示不同的数字。
本设计中单片机P0口输出段选数据,P3口输出位选数据。
数码管与单片机相连的电路如下图所示:
电路中使用了芯片74ls245,该芯片用来驱动LED。
其片选引脚要接地,使其一致为低电平,芯片一直可以工作。
(2)晶振电路
晶体以及电容C1、C2构成并联谐振电路,接在放大器的反馈回路中构成内部单片机内部时钟。
晶体可在之间任选,电容C1、C2的典型值为通常选择为30pF左右,这时对应的始终频率为12MHz。
单片机内部晶振电路图及连接电路如下:
(3)按键电路
本设计采用行列式按键电路,它由行线和列线组称成,按键位于行列的交叉点。
一个4*4的行列结构可以构成一个16个按键的键盘,如下图所示。
在按键数目较多的场合,行列式按键可以节省很多的I/O口线。
按键的识别是通过扫描来实现的。
单片机会依次扫描每一行和每一列,通过行线和列线的电平高低即可判断哪个按键被按下。
本设计中用到四个按键,、、、、,分别用于时间校准设置、定闹设置、秒分时切换、加1调整、减1调整。
按键与单片机相连电路如下:
由原理图可以明显看出,当按键未被按下时,对应引脚为高电平;按键被按下时为低电平。
通过扫描即可辨别哪一个按键被按下。
本题画出的虽然是独立按键,但是内部驱动依然是行列式按键的驱动,这里只是为了画图方便。
(4)复位电路
当按下复位键时单片机进入复位状态,可以进行时间的设置等。
电路图如下所示:
四.系统软件部分的设计
本设计的软件系统用来配合硬件电路实现特定的功能。
程序主要包含键盘扫描模块、时间处理模块、和数码管显示程序3大部分。
程序大致流程如下:
1.时间处理模块
单片机晶振频率为12MHz,一个机器周期等于12个振荡脉冲周期,因此机器时序频率是振荡频率的1/12,即1MHz,所以一个机器周期为1μs。
本设计用的是计时器0的方式1,对于方式1,计数个数M与计数初值N的关系为M=2^16–N,定时时间t与计数个数M和初值N的关系为t=M*机器周期=(2^16-N)*时钟周期*12。
计时过程中,秒sec等于60时清零,分min加一;分min等于60时清零,小时hour加一;当小时大于24时,置为0。
时分秒的进位算法代码如下:
voidtimecontrol()
{
sec++;
if(sec==60)码管显示模块
本设计中以P0口作为数码管的段选输出,P3口为位选信号输出。
由于所用数码管为共阳极连接,所以要点亮的数码管位选端为高电平1.
位选信号的I/O口声明
#include<>
#defineucharunsignedchar
#defineuintunsignedint
sbits1=P3^0;盘扫描模块
首先要声明各个按键的功能以及对应的I/O口,然后驱动程序将对按键进行扫描以识别被按下的键。
按键对应I/O口声明
/*k1设置时间,k2定时,k3时分秒选择,k4加数字,k5减数字。
*/
sbitk1=P1^0;
sbitk2=P1^1;
sbitk3=P1^2;
sbitk4=P1^3;
sbitk5=P1^4;
键盘扫描以进行时间设置
voidkeyscan_settime()他程序
(1)delay延时函数
voiddelayms(uintk)结
通过本次课程设计,无论是从软件方面还是硬件方面我们都进一步学习和巩固了程序的总体设计。
在软件方面,进一步熟悉了各条指令的用法及功能,更加深刻地理解了定时器的原理。
本次课程设计还让我们进一步熟悉了开发仿真软件keil、proteus等。
编程、调试、仿真、运行每一步都是各种意想不到的问题,每次都会发现好多没有考虑到的方面,导致程序出现各种错误,有时这真的很让人烦,但是经过努力,最后问题解决时会有一种快乐和成就感。
只有自己亲手去操作,才能把学到的知识真正变成自己的。