C51单片机实现电子闹钟文档格式.docx

上传人:b****1 文档编号:426965 上传时间:2023-04-28 格式:DOCX 页数:16 大小:123.95KB
下载 相关 举报
C51单片机实现电子闹钟文档格式.docx_第1页
第1页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第2页
第2页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第3页
第3页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第4页
第4页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第5页
第5页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第6页
第6页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第7页
第7页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第8页
第8页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第9页
第9页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第10页
第10页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第11页
第11页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第12页
第12页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第13页
第13页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第14页
第14页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第15页
第15页 / 共16页
C51单片机实现电子闹钟文档格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C51单片机实现电子闹钟文档格式.docx

《C51单片机实现电子闹钟文档格式.docx》由会员分享,可在线阅读,更多相关《C51单片机实现电子闹钟文档格式.docx(16页珍藏版)》请在冰点文库上搜索。

C51单片机实现电子闹钟文档格式.docx

二.系统方案的设计要求

根据以上各模块并结合显示屏的功能及元器件材料的情况,决定采用AT89C51为内核显示设计方案。

先进行系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进行各个模块的实物设计并逐个调试,待全部通过后,进行整个系统的联调,最终实现一个完整的系统。

整个系统的设计步骤如下:

在单片机最小系统的基础上,完成按键电路和复位电路的设计。

完成显示电路、数字按键、单片机时钟电路。

Ⅰ硬件设计

系统硬件的设计可以根据系统的各个功能,把整个系统划分成若干个模块,分别对这些模块来进行设计,然后在通过单片机程序来实现对各个硬件模块功能的调度。

本系统涉及到的硬件模块有:

按键电路、数码管显示电路、单片机时钟电路、蜂鸣器电路。

各部分实现功能如下:

按键电路:

提供按键信号。

单片机时钟电路、复位电路:

提供内部时钟。

数码管驱动显示电路:

显示当前时间。

蜂鸣器电路:

闹钟报时。

Ⅱ软件设计

本系统的软件部分主要完成功能:

时分秒的进位算法处理、数码管的时间显示、时间调整设置、闹钟功能。

根据软件的功能划分软件设计模块结构,如下所示

其中各个模块具体任务如下:

按键驱动模块:

对各个按键的功能进行相关的定义。

LED驱动模块:

根据系统需要显示相应的数字时间;

时间处理模块:

时、分、秒的进位算法处理

三.系统硬件电路的设计

1根据确定的硬件方案设计硬件框图,如下图所示:

2系统原理图的设计

系统总的硬件电路如下图所示

实际要用到5个按键,受空间限制仿真电路中只画出4个。

单片机管脚资源分配:

P0口为数码管段选信号输出口。

P3口为数码管位选信号输出口。

P1.0、P1.1、P1.2、P1.3、P1.4为键盘的输入信号。

P3.6为蜂鸣器信号的输出口。

下面分别介绍各个电路。

(1)数码管驱动及显示电路

本设计采用8位7段共阳极数码管用来显示时间。

为了将时间在LED数码管上显示可采用动态显示法。

通过对每位数码管的依次扫描,使对应数码管亮;

同时向该数码管送对应的字码使其显示数字。

由于数码管扫描周期很短,而且人眼有视觉暂留效应,所以数码管看起来总是亮的从而实现了数字的同时显示。

数码管主要包括位选和段选信号线。

位选是用来选通数码管的,只有位选信号有效该数码管才会亮并显示要现实的数字;

段选是选择数码管7段的那一笔亮,从而显示不同的数字。

本设计中单片机P0口输出段选数据,P3口输出位选数据。

数码管与单片机相连的电路如下图所示:

电路中使用了芯片74ls245,该芯片用来驱动LED。

其片选引脚要接地,使其一致为低电平,芯片一直可以工作。

(2)晶振电路

晶体以及电容C1、C2构成并联谐振电路,接在放大器的反馈回路中构成内部单片机内部时钟。

晶体可在1.2MHz-12MHz之间任选,电容C1、C2的典型值为通常选择为30pF左右,这时对应的始终频率为12MHz。

单片机内部晶振电路图及连接电路如下:

(3)按键电路

本设计采用行列式按键电路,它由行线和列线组称成,按键位于行列的交叉点。

一个4*4的行列结构可以构成一个16个按键的键盘,如下图所示。

在按键数目较多的场合,行列式按键可以节省很多的I/O口线。

按键的识别是通过扫描来实现的。

单片机会依次扫描每一行和每一列,通过行线和列线的电平高低即可判断哪个按键被按下。

本设计中用到四个按键,P1.0、P1.1、P1.2、P1.3、P1.4,分别用于时间校准设置、定闹设置、秒分时切换、加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)//秒sec到60清零,分min加一

{

sec=0;

min++;

if(min==60)//分min到60清零,时hour加一

min=0;

hour++;

if(hour==24)//小时hour等于24时清零

hour=0;

}

}

定时器的先关设置:

voidmain()

TMOD=0x01;

//定时器0工作在方式1

TH0=(65536-45872)/256;

//装初值,50ms

TL0=(65536-45872)%256;

EA=1;

//总中断允许

ET0=1;

//T0中断允许

TR0=1;

//开定时器0

while

(1)

keyscan_settime();

keyscan_time();

buz();

2.数码管显示模块

本设计中以P0口作为数码管的段选输出,P3口为位选信号输出。

由于所用数码管为共阳极连接,所以要点亮的数码管位选端为高电平1.

位选信号的I/O口声明

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint 

sbits1=P3^0;

//数码管位选控制端的定义

sbits2=P3^1;

sbits3=P3^2;

sbits4=P3^3;

sbits5=P3^4;

sbits6=P3^5;

sbits7=P3^6;

段码表:

ucharcodemum[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//共阳数码管0-9编码

数码管显示函数如下:

voiddisplay(ucharzs,ucharzm,ucharzh) 

//数码管显示函数

s1=1;

//P3即S系列输出位选信号

P0=mum[zh/10];

//P0输出段选信号,显示小时的十位

delayms(5);

s1=0;

s2=1;

P0=mum[zh%10]&

0x7f;

// 

显示时的个位加上小数点

s2=0;

s3=1;

P0=mum[zm/10];

//显示分的十位

s3=0;

s4=1;

P0=mum[zm%10]&

//分的个位加上小数点

s4=0;

s5=1;

P0=mum[zs/10];

//秒的十位

s5=0;

s6=1;

P0=mum[zs%10];

//秒的个位

s6=0;

3.键盘扫描模块

首先要声明各个按键的功能以及对应的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() 

//时间设置模块

ucharst,mt,ht;

if(k1==0)

delayms(10);

//延迟一段时间再次扫描以达到软件消抖的目的

st=sec,mt=min,ht=hour;

TR0=0;

//关闭定时器

while(k1==0) 

//等待用户按键

display(st,mt,ht);

if(k3==0)

if(k3==0) 

while(!

k3);

ss++;

if(ss==3) 

ss=0;

/*通过ss选择时分秒设置*/

if(k4==0) 

//加数

if(k4==0)

k4);

switch(ss)

case0:

st++;

if(st==60)st=0;

break;

case1:

mt++;

if(mt==60)mt=0;

case2:

ht++;

if(ht==24)ht=0;

default:

;

if(k5==0) 

//减数

if(k5==0)

k5);

if(st>

0)st--;

else 

st=0;

if(mt>

0)mt--;

mt=0;

if(ht>

0)ht--;

ht=0;

;

//设置完毕,开启定时器

sec=st,min=mt,hour=ht;

display(sec,min,hour);

用户定闹钟时间模块

voidkeyscan_time() 

//用户定时模块

if(k2==0)

s=sec;

m=min;

h=hour;

while(k2==0) 

//开始定时设置

display(s,m,h);

//加一

s++;

if(s==60)s=0;

m++;

if(m==60)m=0;

h++;

if(h==24)h=0;

//减一

if(s>

0)s--;

s=0;

if(m>

0)m--;

m=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2