简易数字钟的设计.doc

上传人:b****3 文档编号:2607635 上传时间:2022-11-03 格式:DOC 页数:19 大小:910.77KB
下载 相关 举报
简易数字钟的设计.doc_第1页
第1页 / 共19页
简易数字钟的设计.doc_第2页
第2页 / 共19页
简易数字钟的设计.doc_第3页
第3页 / 共19页
简易数字钟的设计.doc_第4页
第4页 / 共19页
简易数字钟的设计.doc_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

简易数字钟的设计.doc

《简易数字钟的设计.doc》由会员分享,可在线阅读,更多相关《简易数字钟的设计.doc(19页珍藏版)》请在冰豆网上搜索。

简易数字钟的设计.doc

单片机课程设计

科信学院

课程设计说明书

(2012/2013学年第二学期)

课程名称:

单片机课程设计

题目:

简易数字钟课程设计

专业班级:

学生姓名:

学号:

指导教师:

苗敬利、王立国等

设计周数:

2周

设计成绩:

2013年06月27日

目录

目录

1设计任务描述 1

1.1设计题目:

简易数字钟的设计 1

1.2设计要求:

1

1.2.1设计目的 1

1.2.2基本要求 1

1.2.3元件清单 1

2设计方框图 2

2.1数字钟硬件部分示意图 2

2.2数字钟软件部分组成框图 3

2.2.1时间调整的程序流程 3

2.2.2时钟显示程序流程 4

3各部分模块介绍 5

3.1单片机AT89C52芯片分析 5

3.2晶振电路模块 6

3.3复位电路模块 6

3.4显示模块 7

3.5时间校对按键模块 8

4简易数字钟源程序 8

源程序 8

5数字钟源程序的仿真 12

5.1编译、连接 12

5.2仿真 12

5.3生成HEX文件 13

6数字钟硬件原理图 15

总原理图 15

小结 16

17

1设计任务描述

1.1设计题目:

简易数字钟的设计

1.2设计要求:

1.2.1设计目的

熟练使用Keil开发环境,具备编写单片机程序(汇编语言或C语言)的初步能力,通

过完成本课题的软硬件设计,使同学们了解单片机实例的整个开发流程。

1.2.2基本要求

⑴简要说明

⑵任务和要求

设计简易的数字钟,该数字钟满足以下要求:

设计一台以MCS-5为核心的简易数字钟。

四位数码管显示小时和分钟,中间那个点来区分小时和分钟;每秒用一个LED灯闪烁一下;四个按键,分别为:

选择键,加键,减键,确认键。

时间要精确,整点报时,声音间隔一秒,并且可以调整时间,调整位闪烁提示。

1.2.3元件清单如下:

元件名称

型号

数量

用途

元件名称

型号

数量

用途

单片机

AT89S51

1

控制核心

电阻

10KΩ

7

按键电路

晶振

12MHz

1

晶振电路

按键

4

电容

30pF

2

数码管

8段4位

4

显示电路

电解电容

30uF/10V

1

复位电路

电阻

330Ω

7

电阻

1kΩ

1

电阻

100Ω

1

蜂鸣器及其驱动电路

按键

200Ω

14

蜂鸣器

DC5V

1

电源

+5V/0.5A

1

提供+5V电源

三极管

9013

4

2设计方框图

2.1数字钟硬件部分示意图

该简易数字钟硬件部分主要由晶振、手动复位、单片机AT89C52、数码管显示、时间调整按键模块组成。

框图如下:

单片机

AT89S52

电源

复位电路

晶振电路

声音提示

数码管显示

按键电路

基于AT89S51单片机数字钟系统框图

图2.1数字钟硬件系统示意图

2.2数字钟软件部分组成框图

2.2.1时间调整的程序流程

Y

Y

N

INT1中断服务子程序

时钟分位调整

时钟分位+1

1小时到

时钟分位清零

返回

时钟小时位调整?

时钟小时+1

24小时到

时钟小时位清零

N

Y

图2.2时间调整程序流程框图

2.2.2时钟显示程序流程

T1中断服务子程序

重置T1定时初值

1秒到?

秒位+1

1分到?

分位+1、秒位清零

1小时到?

小时位+1、分位清零

24小时到?

小时位清零

返回

N

N

N

N

图2.324小时时钟

3各部分模块介绍

3.1单片机AT89C51芯片分析

AT89C51单片机引脚图如下:

图3.1AT89C51引脚图

该单片机是标准的40引脚双列直插式集成电路芯片,其各个引脚功能如下:

VCC:

+5V电源。

VSS:

接地。

RST:

复位信号。

当输入的复位信号延续两个周期以上的高电平时即为有效,用来完成单片机的初始化操作。

XTAL1和XTAL2:

外接晶体引线端。

当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。

PO口:

P0口作为一个8位漏极开路双向I/O口,当作输出口使用时,必须接上拉电阻才有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入“1”,使FET截止,以避免锁存器为“0”时对引脚输入的干扰。

本次设计采用P0口作为数码管段选输出使用。

P2口:

内部有上拉电阻的8位I/O口,本次设计中作为数码管位选输出使用。

3.2晶振电路模块

在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。

时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。

图3.2晶振电路

3.3复位电路模块

单片机复位的条件是:

必须使RST/VPD或RST引脚加上两个机器周期(即24个振荡周期)的高电平。

例如,若时钟频率为12MHz,每个机器周期为1us,则只需要2us以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。

单片机常见的复位如图所示。

电路为上电复位,它利用电容充电来实现的。

在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减少,RESET的电位逐渐下降。

只要保证RESET为

高电平的时间大于两个机器周期,便能正常复位。

该电路除具有上电复位功能外,若要复

位,只需按图中的RESET键,此时电源VCC经电阻分压,在RESET端产生一个复位高

电平。

图3.3复位电路

3.4显示模块

考虑采用动态显示部分,用P0口作为数码管数据(段选),P2口作为数码管控制(位选)。

动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任意时刻都只有一位数码管被点亮,但由于人眼存在视觉暂留效应,只要每位数码管间隔时间足够短,就可以给人以通俗显示的感觉。

上面第一部分已提到,我们采用了50ms左右的时间间隔,并且是合理的。

6位数码管,实验室的硬件是共阴极的,故我们的数码表采用{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

图3.4显示模块

3.5时间校对按键模块

本次设计要求了该简易数字钟必须具备时、分的调整功能。

故必须接入2个简单的按键(本设计设置问p1.4调时、p1.5调分,按键为实验箱单次脉冲按键模块),并且在软件部分必须引入这2个独立按键的子程序。

图3.5时间校对按键电路

4简易数字钟源程序

源程序

#include

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsignedchardispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsignedchardispbuf[8]={0,0,16,0,0,16,0,0};

unsignedchardispbitcnt;

unsignedcharsecond;

unsignedcharminite;

unsignedcharhour;

unsignedinttcnt;

unsignedcharmstcnt;

unsignedchari,j;

sbitP3_0=P3^0;

sbitP3_1=P3^1;

sbitP3_2=P3^2;

voidmain(void)

{

P2=0X00;

TMOD=0x02;

TH0=0x06;

TL0=0x06;

TR0=1;

ET0=1;

EA=1;

while

(1)

{

if(P3_0==0)

{

for(i=5;i!

=0;i--)

for(j=248;j!

=0;j--);

if(P3_0==0)

{

second++;

if(second==60)

{

econd=0;

}

dispbuf[0]=second%10;

dispbuf[1]=second/10;

while(P3_0==0);

}

}

if(P3_1==0)

{

for(i=5;i!

=0;i--)

for(j=248;j!

=0;j--);

if(P3_1==0)

{

minite++;

if(minite==60)

{

minite=0;

}

dispbuf[3]=minite%10;

dispbuf[4]=minite/10;

while(P3_1==0);

}

}

if(P3_2==0)

{

for(i=5;i!

=0;i--)

for(j=248;j!

=0;j--);

if(P3_2==0)

{

hour++;

if(hour==24)

{

hour=0;

}

dispbuf[6]=hour%10;

dispbuf[7]=hour/10;

while(P3_2==0);

}

}

}

}

voidt0(void)interrupt1using0

{

mstcnt++;

if(mstcn

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

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1