当前位置:首页 >> 信息与通信 >>

基于单片机的电子闹钟的设计


基于单片机的电子闹钟的设计 基于单片机的电子闹钟的设计 电子闹钟
组长:柏万宏 组员:薛春阳 傅秋茗 成臣 任高建

1、引言 上个世纪末,电子技术得到了飞速地发展和进步,并在其推动下,现代电子 产品渗透了社会生活各个领域, 有力推动了社会生产力的发展和社会信息化程度 地提高。 在现代电子科技日新月异的今天, 电子产品的更新换代节奏也越来越快。 时间它对于任何人来说是宝贵的,是不可再生的,但是工作的忙碌和生活的 繁杂总容易让人不经意间遗忘。如果遗忘的是无关紧要的事,倒容易挽回,一旦 出现重要事件的遗忘,代价可能让人刻骨铭心。比如,火灾的发生,很多都是人 们一时忘记了关闭煤气或是忘记了电器的充电时间。所以,一个准确的定时提醒 系统对于人们日常生活是很必要的。诸如定时报警、按时打铃、时间程序自动控 制、实时广播、定时启闭电路、定时开关等都是以数字钟表为基础,单片机自动 控制程序为途径的定时控制装置。 随着生活水平的提高,人们越来越最求人性化的事物。传统的时钟已不能满 足人们的生活需求。因此,对单片机进行程序捎写,利用模拟电路技术和数字电 路技术进行电路设计的电子闹钟成为传统机械闹钟很好的替代品, 它与传统机械 闹钟相比,具有更好的准确性和直观性,有更长的使用寿命,更加轻便,因此能 得到更好的推广应用。 2、电子闹钟工作原理 为保证电子闹钟能精确运行并准时告警, 我们对电子闹钟工作状态进行了控 制,在编程过程中,对中断控制程序进行精确编写,使程序运行时间周期为 1 秒;同时,通过人机交互设计,用户可根据自身需求设置定时时间和报警时间, 使电子闹钟运行人性化。电子闹钟电路图如图 1。

图 1:电子闹钟电路图

3、电子闹钟结构组成 电子闹钟结构(如图 2)由计时模块、声光报警发生模块、显示模块和键盘 输入模块组成。计时模块进行实时准确计时,保证计时的精确度和准确性;声光 报警发生模块在程序控制下,在报警时间发出蜂鸣声音和闪光报警;显示模块显 示实时时间和设定报警时间,让系统运行直观明了;键盘输入模块是人机交互的 重要组成部分,通过对键盘的操作,输入需要定时的时间和进行实时时间调整。

显示模块

电 子 闹 钟

计时模块

声光报警 模块

键盘输入 模块

图 2:电子闹钟硬件结构图

4、电子闹钟硬件设计 电子闹钟硬件由 AT89C52 单片机、4 位七段数码管、蜂鸣器、发光二级管和 74HC138 锁存器等元器件构成,根据设计要求,通过硬件电路的设计,为程序运 行提供了硬件基础。

AT89C52 单片机是设计电子闹钟相对理想的单片机类型。通过对多种类型单 片机性能的分分析,发现它是一种 8k 的可反复擦鞋的 flash 只读程序存储器, 兼容 MCS-51 指令系统,可以提供较复杂系统控制条件,并且它可反复擦鞋次数 超过 1000 次, 数据可保留时间为 10 年, 因此是最佳选择。 在显示方式的选择上, 通过对数码管和液晶显示器的对比,如果选择液晶显示器,虽然可以降低系统功 耗,便于携带,但由于其驱动电路复杂,使用起来有一定难度,加之成本较高, 不利于推广;而选择数码管,在兼具除了耗能低的液晶显示器的优点外,使用方 便,驱动电路简单,价格低廉,易于接受。4*4 矩阵键盘能够直接输入数据,且 方便、快捷,比独立按键节约 I/0 口,使用比较麻烦。

图 3:电子闹钟设备图

5、电子闹钟软件设计 为保证电子闹钟实时接受和定时报警,需要软件程序满足预定的工作流程, 即初始化设置、定时扫描键盘、显示时间、报警。如果在工作期间,接受到键盘 输入信息,将在设置时间进行报警。

图 4:电子闹钟工作流程图

图 5:电子闹钟中断服务流程图

6、总结 该电子闹钟时钟能够准确运行,实现“时”“分”“秒”的精确显示,并在 、 、 输入定时报警指令后,在指定时刻产生声光报警。达到了预期设计目的,实现时 钟准确运行,装置定时报警的设计功能。

图 6:电子闹钟仿真运行图

7、参考文献 [1]李全利、迟荣强,单片机原理及接口技术[M],北京:高等教育出版社,2004 [2]凌玉华,单片机原理及应用系统设计[M],长沙:中南大学出版社,2006 [3]张毅刚,MCS-51 单片机应用设计[M],哈尔滨:哈尔滨工业大学出版社,1997 [4]胡汉才,单片机原理及应用[M],北京:清华大学出版社,2004 [5]张道德,单片机接口技术[M],北京:中国水利水电出版社,2007

附件: 电子闹钟源程序
#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit K1=P1^4; //调整键 sbit K2=P1^5; //“+”键 sbit K3=P1^6; //“-”键 sbit K4=P1^7; //闹铃键 uchar code port[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar int_time; uchar second; uchar minute; uchar hour; uchar i; void delay(uchar x) //延时程序 {uchar i,j; for(i=0;i<x;i++){for(j=0;j<125;j++) ; }} void DisplaySecond(uchar s) //秒显示程序 { P2=0x40;P0=tab[s/10];delay(1); P2=0x80;P0=tab[s%10];delay(1); P2=0x00;} void DisplayMinute(uchar m) //分显示程序 { P2=0x08;P0=tab[m/10];delay(1); P2=0x10;P0=tab[m%10];delay(1); P2=0x20;P0=0xbf;delay(1); P2=0x00;} void DisplayHour(uchar h) //时显示程序 { P2=0x01;P0=tab[h/10];delay(1); P2=0x02;P0=tab[h%10];delay(1); P2=0x04;P0=0xbf;delay(1); P2=0x00;} void TZ1(void) //小时调整程序 { if(K2==0){ delay(15); if(K2==0){ if(hour<23) hour++; else hour=0;}

} if(K3==0){ delay(15); if(K3==0){ if(hour>0) hour--; else hour=23;} }} void TZ2(void) {if(K2==0){ delay(15); if(K2==0){ if(minute<59) minute++; else minute=0;} } if(K3==0){ delay(15); if(K3==0){ if(minute>0) minute--; else minute=59;} } } int alarm(uchar a_hour,uchar a_minute) { uchar a_second=0; uchar i=1,j=1; while(i) { DisplaySecond(a_second);delay(1); DisplayMinute(a_minute); delay(1); DisplayHour(a_hour);delay(1); if(K1==0) {delay(15); if(K1==0) { while(j) {for(i=0;i<150;i++) {P2=0x00;delay(1); P2=0x00;delay(1); P2=0x04;P0=0xbf;delay(1); DisplaySecond(a_second);delay(1); DisplayMinute(a_minute); delay(1);

//分钟调整程序

//闹铃程序

//调整闹铃的小时数

} if(K2==0){ delay(15); if(K2==0){ if(a_hour<23) a_hour++; else a_hour=0;} } if(K3==0){ delay(15); if(K3==0){ if(a_hour>0) a_hour--; else a_hour=23;} } for(i=0;i<150;i++) {DisplaySecond(a_second);delay(1); DisplayMinute(a_minute); delay(1); DisplayHour(a_hour);delay(1);} if(K1==0){ delay(15); if(K1==0){ while(j) {for(i=0;i<150;i++) {P2=0x00;delay(1); P2=0x00;delay(1); P2=0x04;P0=0xbf;delay(1); P2=0x20;P0=0xbf;delay(1); DisplaySecond(a_second);delay(1); DisplayHour(a_hour); delay(1);} if(K2==0){ delay(15); if(K2==0){ if(a_minute<59) a_minute++; else a_minute=0;} } if(K3==0){ delay(15); if(K3==0){ if(a_minute>0) a_minute--; else a_minute=59;} }

//调整闹铃的分钟数

for(i=0;i<150;i++) {DisplaySecond(a_second); delay(1); DisplayMinute(a_minute); delay(1); DisplayHour(a_hour); delay(1);} if(K1==0){ delay(20); if(K1==0) { j=0;} } DisplaySecond(a_second); delay(1); DisplayMinute(a_minute); delay(1); DisplayHour(a_hour); delay(1); } }}}}} if(K4==0) {delay(15); if(K4==0) {i=0;} } } { return(a_hour*100+a_minute);} } void main(void) { uchar n,p=0,q=0; TMOD=0x01; EA=1;ET0=1; TH0=(65536-46083)/256; TL0=(65536-46083)%256; TR0=1; int_time=0; second=30; minute=59; hour=23; while(1) { i=1; DisplaySecond(second); delay(1); DisplayMinute(minute); delay(1); DisplayHour(hour); delay(1); if(K1==0) {delay(15); if(K1==0) {

while(i) //调整电子表的小时数 {for(i=0;i<150;i++) {P2=0x00;delay(1); P2=0x00;delay(1); P2=0x04;P0=0xbf;delay(1); DisplaySecond(second);delay(1); DisplayMinute(minute); delay(1); } TZ1(); for(i=0;i<150;i++) {DisplaySecond(second);delay(1); DisplayMinute(minute); delay(1); DisplayHour(hour);delay(1);} if(K1==0){ delay(15); if(K1==0){ while(i) //调整电子表的分钟数 {for(i=0;i<150;i++) {P2=0x00;delay(1); P2=0x00;delay(1); P2=0x04;P0=0xbf;delay(1); P2=0x20;P0=0xbf;delay(1); DisplaySecond(second);delay(1); DisplayHour(hour); delay(1);} TZ2(); for(i=0;i<150;i++) {DisplaySecond(second); delay(1); DisplayMinute(minute); delay(1); DisplayHour(hour); delay(1);} if(K1==0){ delay(15); if(K1==0){ while(i) //调整秒数 { {for(i=0;i<150;i++) {P2=0x00;delay(1); P2=0x00;delay(1); P2=0x20;P0=0xbf;delay(1); DisplayHour(hour);delay(1); DisplayMinute(minute); delay(1);} if(K2==0){ delay(15); if(K2==0){ if(second>=30) { second=0; if(minute<59)

minute++; else minute=0;} else second=0;} } if(K3==0){ delay(15); if(K3==0){ if(second>=30) { second=0; if(minute<59) minute++; else minute=0;} else second=0;} } for(i=0;i<150;i++) {DisplaySecond(second); delay(1); DisplayMinute(minute); delay(1); DisplayHour(hour); delay(1);} if(K1==0){ delay(15); if(K1==0) { i=0;} } DisplaySecond(second); delay(1); DisplayMinute(minute); delay(1); DisplayHour(hour); delay(1); } while(!K1); } } P2=0x00; }} }}}}} if(K4==0) {delay(15); if(K4==0) { n=alarm(p,q);} } p=n/100;q=n%100; if(hour==p && minute==q) { TXD=0; if(RXD==0) TXD=1; }} } void t0(void)interrupt 1 using 1 { int_time++;

//中断程序

if(int_time==20) { int_time=0; second++;} if(second==60) { second=0; minute++;} if(minute==60) { minute=0; hour++;} if(hour==24) { hour=0;} TH0=(65536-46083)/256; TL0=(65536-46083)%256; }


相关文章:
基于单片机的简易电子时钟设计
基于单片机的简易电子时钟设计 - 基于单片机的简易电子时钟设计 1 设计任务与要求 1.1 设计背景 数字钟已成为人们日常生活中必不可少的必需品, 广泛用于个人家庭...
基于单片机的电子时钟的设计毕业论文设计
基于单片机的电子时钟的设计毕业论文设计_工学_高等教育_教育专区。毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,硕士论文,研究生论文 ...
基于单片机的智能闹钟设计
基于单片机的智能闹钟设计 - 基于单片机的智能闹钟设计 摘要:本文通过单片机来实现电子打铃系统。基于单片机的智能闹钟设计包括:电源 电路,单片机最小系统及扩展 LCD ...
基于51单片机电子闹钟的设计
基于51单片机电子闹钟的设计_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档基于51单片机电子闹钟的设计_电子/电路_工程科技_专业资料。前 言 ...
基于51单片机电子闹钟的设计
电气信息学院 王昕铃 201307050204 邓魁 日期: 2016 年 6 月 30 日 专业年级: 通信工程 2013 级 课题:基于单片机的定时闹钟设计 前 言 20 世纪末,电子技术获...
基于51单片机的智能数字闹钟设计与实现
基于51单片机的智能数字闹钟设计与实现_电子/电路_工程科技_专业资料。基于51单片机的智能数字闹钟设计与实现 ,单片机,时钟芯片,温度传感器,液晶显示器,智能数字钟 ...
基于单片机的电子闹钟设计论文
基于单片机的电子闹钟设计论文 - JIUJIANG UNIVERSITY 毕业设计题目 基于单片机的电子闹钟设计 1 The electronic clock design base...
基于单片机的电子闹钟的设计毕业设计
基于单片机的电子闹钟的设计毕业设计 - 第 1 页共 24 页 基于单片机的电子闹钟的设计 摘要:本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃功能的电子闹钟...
基于单片机的闹钟设计_图文
基于单片机的闹钟设计 - 华北理工大学轻工学院 Qing Gong College North China University of Science and Technology EDA 辅...
基于单片机的LCD电子闹钟设计
基于单片机的LCD电子闹钟设计 - 目录 摘要 ...II 2 系统设计 ...
更多相关标签: