单片机电子时钟实验报告
![单片机电子时钟实验报告](https://img.360docs.net/img01/166ka81wcrg5d6g6m1kuj592d98x4fq-11.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验任务及要求
在焊接的电路板中,4个LED数码管,设计带有闹铃功能的数字时钟,要求:
1、在4位数码管上显示当前时间。显示格式“时时分分”;
2、由LED闪动做秒显示;
3、利用按键可对时间及闹玲进行设置,并可显示闹玲时间。当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。
二、方案论证与比较
2.1数字时钟方案
数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。
方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现5毫秒定时中断,每产生一次中断,存储器内相应的计数值加1;若计数值达到200,则将其清零,并将
方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。
静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度合适,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗出发,本设计采用方案二。
三、各个部分的分析
1)显示电路:通过4个LED显示屏显示分钟和小时
两个两联的LED显示器,通过与单片机P1接口连接实现显示功能。而实现4个LED灯动态显示,靠的是位选电路
2)位选电路
四位共阳LED数码管,其标号分别为HourH,HourL,MinL,MinH,低电平选通,且任何时候仅有一位输出低电平,显示时对各显示器进行动态扫描,显示器分时轮流工作。虽然每次只有一个显示器显示,但是由于人的视觉暂留现象我们仍会感觉所有的显示器都在同时显示。P0口作为输出口控制8个发光二极管的亮灭,控制数码管的显示。因此,可以实现4个LED在我们看来同时亮,显示时间。
3)闹铃部分:使用蜂鸣器实现闹钟功能
其中,buzzer端口接到单片机的P1.7输出。(端口连接在最后介绍)
4)开关部分:使用了5个开关控制整个电路的启动,修改时间,设置闹钟,关闭电路等
功能
为查询方式典型电路。其中Setbutton为复位开关,swtich为转换模式开关,即工作模式和调时间模式,Increase为调时间模式中控制时间变化的按钮,STRAT和STOP分别为开启和结束按钮,这5个开关分别接到P2.0-P2.5端口,以控制其输入。
5)串转并电路
为了进一步节省I/O口,有添加了一个额外的串转并电路
由以上电路,我们将P1.0-P1.2扩展到7个I/O口,我们采用的是74HC595芯片,管脚图如下:
7)复位电路
整体电路图如下:
四、软件设计
由于汇编语言繁琐,我们采用的是C语言编程,源程序及注释如下:
#include
#include
//时分
#define TYPE unsigned char
#define HOUR 0
#define MIN 1
//显示状态
#define NORMAL 0
#define BELLTIME 1
#define SETTING_N 2
#define SETTING_C 3
//闪烁显示
#define NoMask 0
#define MaskHour 1
#define MaskMin 2
#define MaskAll 3
#define uchar unsigned char
#define uint unsigned int
//Bit Definition
//数码管
sbit HourH = P1^3; //低电平,数码管使能
sbit HourL = P1^4;
sbit MinH = P1^5;
sbit MinL = P1^6;
//蜂鸣器
sbit Buzzer = P1^7; //低电平,蜂鸣器响
//键盘
sbit SetButton = P2^0;//按键定义,设置(正常,定时显示切换)键,时位分位转换键,增加键
sbit Switch =P2^1;
sbit Increase = P2^2;
sbit Start = P2^3;
sbit Stop = P2^4;
//LED
sbit SecLed = P2^5; //秒显示,低电平点亮sbit ClockStartLED = P2^6; //闹钟定闹开始//74HC595 输入管脚定义
sbit SH_CP = P1^0;
sbit DS = P1^1;
sbit ST_CP = P1^2;
//Function Definition
void delay5ms(void);
void Clock();
void Display();
void Set();
void Ring();
void StopRing();
void ShowANum(uchar i);
void StartRing();
void delaykey(void);
void MaskShow(uchar Num,TYPE t);
//Variable Definition
//正常时间