单片机时钟闹钟课程设计DOC.docx

上传人:b****4 文档编号:26986342 上传时间:2023-06-24 格式:DOCX 页数:35 大小:1.15MB
下载 相关 举报
单片机时钟闹钟课程设计DOC.docx_第1页
第1页 / 共35页
单片机时钟闹钟课程设计DOC.docx_第2页
第2页 / 共35页
单片机时钟闹钟课程设计DOC.docx_第3页
第3页 / 共35页
单片机时钟闹钟课程设计DOC.docx_第4页
第4页 / 共35页
单片机时钟闹钟课程设计DOC.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

单片机时钟闹钟课程设计DOC.docx

《单片机时钟闹钟课程设计DOC.docx》由会员分享,可在线阅读,更多相关《单片机时钟闹钟课程设计DOC.docx(35页珍藏版)》请在冰豆网上搜索。

单片机时钟闹钟课程设计DOC.docx

单片机时钟闹钟课程设计DOC

单片机课程设计

说明书

单片机时钟设计

 

学生姓名:

刘芳学号:

1105044105

学院:

计算机与控制工程学院

专业:

电气工程及其自动化

指导教师:

余红英

 

2014年6月

 

中北大学

课程设计任务书

13/14学年第二学期

 

学院:

计算机与控制工程学院

专业:

 电气工程及其自动化

学生姓名:

刘芳

学号:

1105044105 

课程设计题目:

单片机时钟

起迄日期:

6月2日~6月13日

课程设计地点:

 电气工程系综合实验室

指导教师:

余红英

负责人:

刘天野

 

下达任务书日期:

2014年6月2日

课程设计任务书

1.设计目的:

本设计包括确定控制任务、系统总体方案设计、硬件系统设计、软件程序的设计等,以便使学生掌握有关单片机控制的设计思想和设计方法。

为学生今后从事单片机控制系统开发工作打下基础。

学习proteus仿真软件实现电路的仿真。

 

2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等):

 本课程设计的基本要求是使学生全面掌握单片机控制系统设计的基本理论,熟悉掌握单片机的编程方法,用89C52系列单片机及六位数码管显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可以实现时分调整、秒表/时钟功能转换、省电(关闭显示)、定时设定提醒(蜂鸣器)等功能。

 

3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕:

1.根据题目要求的指标,通过查阅有关资料,确定系统设计方案,并设计其硬件电路图。

2.画出电路原理图,分析主要模块的功能及他们之间的数据传输和控制关系。

3.用Proteus软件绘制硬件电路图并仿真。

4.软件设计包括流程图、用汇编语言或C语言对软件进行编译,并能通过调试。

课程设计任务书

4.主要参考文献:

1.孙涵芳.MCS-51/96系列单片机原理及应用(修订版).北京航空航天大学出版社.1994

2.李朝青.单片机原理及接口技术(第3版).北京航空航天大学出版社.2005

5.设计成果形式及要求:

1.硬件电路图

2.软件流程图和程序清单

3.编写课程设计报告。

6.工作计划及进度:

20146月2日~6月5日查找资料,确定方案

6月6日~6月8日设计硬件电路,绘制电路原理图

6月9日~6月11日软件设计,并调试通过

6月12日~6月13日编写课程设计报告,答辩或成绩考核

负责人审查意见:

 

签字:

年月日

1引言

本设计是定时闹钟的设计,由单片机AT89C52芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。

设计中采用单片机利用AT89C52,它是低功耗、高性能的CMOS型8位单片机。

片内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。

另外, AT89C52单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进—步可以扩充控制电器的启停。

设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。

课设准备中我们根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真试验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。

设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声音,持续一定时间。

显示采用的六位数码管电路,显示实际时间和闹钟设置。

1.1设计目的

本设计包括确定控制任务、系统总体方案设计、硬件系统设计、软件程序的设计等,以便使学生掌握有关单片机控制的设计思想和设计方法。

为学生今后从事单片机控制系统开发工作打下基础。

学习proteus仿真软件实现电路的仿真。

1.2设计内容和要求

本课程设计要求学生掌握单片机控制系统设计的基本理论,掌握单片机的编程方法,用89C52系列单片机及六位数码管显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可以实现时分调整、秒表/时钟功能转换、省电(关闭显示)、定时设定提醒(蜂鸣器)等功能。

2系统总体方案及硬件设计

2.1总体设计

单片机时钟应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。

电子时钟的系统框图如2-1所示:

图2-1电子时钟的系统框图

2.2硬件材料

硬件材料如表2-1所示:

表2-1硬件材料

2.3 系统时钟电路设计 

对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。

但由于原理图中的C2、C3电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(30±10 PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。

实验表明,这2个电容元件对闹钟的走时误差有较大关系。

 

图2-2系统时钟电路

2.4系统复位电路的设计 

智能系统一般应有手动或上电复位电路。

复位电路的实现通常有两种方式:

1)RC复位电路;2)专用µP监控电路。

前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。

对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。

 本次课程设计采用了上电按钮电平复位电路。

 

图2-3系统复位电路

2.5 闹钟指示电路设计 

闹铃指示可以有声或光两种形式。

本系统采用声音指示。

关键元件是蜂鸣器。

蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。

市场上的有源蜂鸣器分为3V、5V、6V等系列,以适应不同的应用需要。

闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。

其电路设计参见系统原理图。

 

图2-4闹钟指示电路

2.6 电子闹钟的显示电路设计 

本次课程设计采用了6位数码管显示电路。

在6位LED显示时,为了简化电路,降低成本,采用动态显示的方式, 6个LED显示器共用一个8位的I/O, 6位LED数码管的位选线分别由相应的P2. 0~P2. 5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。

译码显示电路将“时”、“分”、“秒”计数器的输出状态菁七段显示译码器译码,通过6位LED七段显示器显示出来。

到达定时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现闹铃。

校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。

图2-5数码管显示电路

2.7按键电路

图2-6按键电路

表2-2按键功能表

S2

打开/关闭闹钟

S3

闹钟时间/实时切换

S4

秒表/实时切换

S6

打开/关闭节能

S7

时加1/秒表开始暂停

S8

时减1/秒表复位

S9

分加1

S10

分减1

 

3软件设计

3.1主程序流程图

程序通过入口使系统初始化,再由数码管显示更新,形成时钟显示。

如图3-1所示。

图3-1主程序流程图

 

3.2数码管显示更新流程图

在实时模式下,数码管显示实时;在秒表模式下,数码管显示秒表时间;在闹钟设定模式下,数码管显示闹钟设定。

模式可由按键选择。

如图3-2所示。

图3-2数码管显示更新流程图

 

3.3外部中断1服务函数流程图

CPU响应外部中断1后,启动现场保护。

通过按键选择不同模式。

按键5可使节能模式打开、关闭;按键6可进行秒表、实时切换;按键7可进行闹钟、实时切换;按键8可使闹钟模式打开、关闭。

如图3-3所示。

图3-3外部中断1服务函数流程图

3.4外部中断0服务函数流程图

CPU响应外部中断0,现场保护启动。

在定时模式下,按键1用于时加1,按键2用于时减1,按键3用于分加1,按键4用于分减1;在秒表模式下,按键1用于秒表开始、暂停功能的实现,按键2用于秒表复位;在闹钟设定模式下,按键1用于时加1,按键2用于时减1,按键3用于分加1,按键4用于分减1。

如图3-4所示。

图3-4外部中断0服务函数流程图

 

3.5定时器溢出流程图

秒每次自加1,到60分加1;分到60,时加1;时到24,清零重新开始。

如图3-5所示。

图3-5定时器溢出流程图

4Proteus软件仿真 

本次课程设计所采用的程序调试软件为keiluvision4集成调试软件,所采用的仿真软件为proteus pro7.8 SP2软件。

 

本次试验的效果图如下所示:

图4-1实验效果图

5设计过程中遇到的问题及解决方法 

在设计的过程中遇到问题是不可避免的,我遇到了很多问题,如下所示;

1.做实物时无法驱动数码管显示,后来了解到可以加锁存器,如74LS253,74LS573等等,还可以加三极管用来加大电流。

当然如果换成液晶显示屏的话就不需要考虑驱动不了的问题了。

 

2.烧程序时没发烧进去,需要改变最高和最低波特率,才能按照步骤把程序烧进去。

 

3.仿真时没问题的电路,在做好实物时发现无法运行。

原因可能是程序出现问题,或者在连实物时线路连接错误等等都有可能。

这是很难的一部分,需要查找出原因。

在做实物的过程中我进行的很多检查,有很多连接错误,最终又重新焊接的。

 

6课程设计体会

本次课程设计我们做了单片机时钟,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可以实现时分调整、秒表/时钟功能转换、省电(关闭显示)、定时设定提醒(蜂鸣器)等功能。

这次课程设计让我受益匪浅,无论从知识上还是其他的各个方面。

上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。

但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。

在这次课程设计中又让我体会到了合作与团结的力量。

团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。

此外,使我对这们功课有了更深刻的认识和了解。

首先对于硬件电路的工作原理有了进一步系统的学习,同样就有了进一步的认识,使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。

课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。

小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。

参考文献

[1]孙涵芳.MCS-51/96系列单片机原理及应用(修订版).北京航空航天大学出版社.1994

[2]李朝青.单片机原理及接口技术(第3版).北京航空航天大学出版社.2005

 

附1:

源程序代码

MAIN

/******************************************

Description:

数字钟主程序,首先初始化变量、I/O口、外设,

然后单片机进入无条件循环,若中断触发,则进行实时处理。

******************************************/

//Start

/*包含头文件*/

#include

#include

#include

#include

#include

/************************

主程序

入口参数:

无;返回值:

************************/

voidmain(void)

{

Timer_Init();//定时器初始化

Keyboard_Init();//按键初始化

Display_Init();//数码管显示初始化

EN_Bell=1;//关闭蜂鸣器

while

(1)//无条件循环

{

Display_Updata();//数码管显示更新

}

}

DELAY

/******************************************

Description:

数字钟简单延时函数

******************************************/

//Start

/*包含头文件*/

#include

#include

#include

#include

#include

/*大致延时2uS*/

voidDelayUs(unsignedchart)

{

while(--t);

}

/*大致延时1mS*/

voidDelayMs(unsignedchart)

{

while(t--)

{

DelayUs(245);

DelayUs(245);

}

}

KEYBOARD

/******************************************

Description:

数字钟按键处理函数

******************************************/

//Start

/*包含头文件*/

#include

#include

#include

#include

#include

/************************

按键初始化程序

入口参数:

无;返回值:

************************/

voidKeyboard_Init(void)

{

EA=1;

IE0=0;//外部中断0清零

IT0=1;//下降沿触发

EX0=1;//外部中断0允许

IE1=0;//外部中断1清零

IT1=1;//下降沿触发

EX1=1;//外部中断1允许

}

voidOpen_Stopwatch(void)//秒表开始或暂停工作

{

ET1=~ET1;//开定时器1中断

TR1=~TR1;//允许定时器1工作

TF1=0;//定时器1溢出标志清零

}

voidRes_Stopwatch(void)//秒表复位

{

ET1=0;//关定时器1中断

TR1=0;//禁止定时器1工作

TF1=0;//定时器1溢出标志清零

s_1=0;

m_1=0;

h_1=0;

}

/*外部中断0中断服务程序*/

voidInt_0(void)interrupt0

{

DelayMs(15);//延时去抖

if(EN_Play==0x00)

{//实时

switch(P1&0xf0)

{

case0xe0:

{if(h<23)h++;}break;//时加1

case0xd0:

{if(h>0)h--;}break;//时减1

case0xb0:

{if(m<60)m++;}break;//分加1

case0x70:

{if(m>0)m--;}break;//分减1

default:

;break;

}

}

if(EN_Play==0x01)

{//秒表

switch(P1&0xf0)

{

case0xe0:

{Open_Stopwatch();}break;//秒表开始或暂停工作

case0xd0:

{Res_Stopwatch();}break;//秒表复位

default:

;break;

}

}

if(EN_Play==0x02)//闹钟设定

{

switch(P1&0xf0)

{

case0xe0:

{if(h_2<23)h_2++;}break;//时加1

case0xd0:

{if(h_2>0)h_2--;}break;//时减1

case0xb0:

{if(m_2<60)m_2++;}break;//分加1

case0x70:

{if(m_2>0)m_2--;}break;//分减1

default:

;break;

}

}

IE0=0;//中断清零

}

voidEN_Stopwatch(void)//秒表/实时切换

{

if(EN_Play==0x01)

EN_Play=0x00;

else

EN_Play=0x01;

}

voidEN_Alarm(void)//闹钟/实时切换

{

if(EN_Play==0x02)

EN_Play=0x00;

else

EN_Play=0x02;

}

voidSel_Alarm(void)//闹钟/实时切换

{

Open_Alarm=~Open_Alarm;

if(Open_Alarm)

s_2=0x01;

else

{

s_2=0x00;

EN_Bell=1;//关闭蜂鸣器

}

}

voidInt_1(void)interrupt2

{

DelayMs(15);//延时去抖

switch(P1&0x0f)

{

case0x0e:

{EN_Dis=~EN_Dis;}break;//打开或关闭节能模式

case0x0d:

{EN_Stopwatch();}break;//秒表/实时切换

case0x0b:

{EN_Alarm();}break;//闹钟/实时切换

case0x07:

{Sel_Alarm();}break;//打开或关闭闹钟

default:

;break;

}

IE1=0;//中断清零

}

KEYBOARD..H

/******************************************

Description:

数字钟头文件,申明keyboard.c中的全局函数、全局变量

******************************************/

//Start

#ifndef__KEYBOARD_H__//作用:

防止keyboard.h被重复引用

#define__KEYBOARD_H__

/*按键初始化程序*/

externvoidKeyboard_Init(void);//全局函数申明

#endif

//Nomore

Display.c

/******************************************

Description:

数字钟数码管显示程序,通过两个74HC573和两个片选信号,

分时输出段码和位码。

******************************************/

//Start

/*包含头文件*/

#include

#include

#include

#include

#include

/*定义常量*/

unsignedcharcodeTable_Duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//显示段码值0~9

unsignedcharcodeTable_Wei[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

//分别对应相应的数码管点亮,即位码

/*定义变量*/

unsignedcharTable_Dis[6]={0x00,0x00,0x00,0x00,0x00,0x00};

unsignedcharj,EN_Play;//数码管位计数、显示模式标志

bitEN_Dis;//节能模式标志

bitOpen_Alarm;//闹钟打开标志

/************************

数码管显示初始化程序

入口参数:

无;返回值:

************************/

voidDisplay_Init(void)

{

j=0;

s=0;

m=0;

h=0;

s_1=0;

m_1=0;

h_1=0;

s_2=0;

m_2=0;

h_2=0;

Open_Alarm=0;

EN_Dis=1;

EN_Play=0x00;

Count_Bell=0;

}

/************************

数码管段码计算程序

入口参数:

无;返回值:

************************/

voidDisplay_Actual(void)//实时

{

Table_Dis[5]=s%10;

Table_Dis[4]=s/10;

Table_Dis[3]=m%10;

Table_Dis[2]=m/10;

Table_Dis[1]=h%10;

Table_Dis[0]=h/10;

}

voidDisplay_Stopwatch(void)//秒表

{

Table_Dis[5]=s_1%10;

Table_Dis[4]=s_1/10;

Table_Dis[3]=m_1%10;

Table_Dis[2]=m_1/10;

Table_Dis[1]=h_1%10;

Table_Dis[0]=h_1/10;

}

voidDisplay_Alarm(void)//闹钟

{

Table_Dis[5]=

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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