单片机时钟闹钟课程设计_第1页
单片机时钟闹钟课程设计_第2页
单片机时钟闹钟课程设计_第3页
单片机时钟闹钟课程设计_第4页
单片机时钟闹钟课程设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计说明书单片机时钟设计学生姓名:刘芳学号: 1105044105 学 院: 计算机与控制工程学院 专 业: 电气工程及其自动化 指导教师: 余红英 2014年 6 月中北大学 课程设计任务书 13/14 学年第 二 学期学 院:计算机与控制工程学院专 业: 电气工程及其自动化学 生 姓 名:刘芳学 号:1105044105 课程设计题目:单片机时钟起 迄 日 期:6月2日 6月13日课程设计地点: 电气工程系综合实验室指 导 教 师:余红英负责人:刘天野  下达任务书日期: 2014年 6月2日课 程 设 计 任 务 书1设计目的:本设计包括

2、确定控制任务、系统总体方案设计、硬件系统设计、软件程序的设计等,以便使学生掌握有关单片机控制的设计思想和设计方法。为学生今后从事单片机控制系统开发工作打下基础。学习proteus仿真软件实现电路的仿真。2设计内容和要求(包括原始数据、技术参数、条件、设计要求等):  本课程设计的基本要求是使学生全面掌握单片机控制系统设计的基本理论,熟悉掌握单片机的编程方法,用89C52系列单片机及六位数码管显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可以实现时分调整、秒表/时钟功能转换、省电(关闭显示)、定时设定提醒(蜂鸣器)等功能。3设计工作任务及工

3、作量的要求包括课程设计计算说明书(论文)、图纸、实物样品等:1根据题目要求的指标,通过查阅有关资料,确定系统设计方案,并设计其硬件电路图。2画出电路原理图,分析主要模块的功能及他们之间的数据传输和控制关系。3. 用Proteus软件绘制硬件电路图并仿真。4. 软件设计包括流程图、用汇编语言或C语言对软件进行编译,并能通过调试。 课 程 设 计 任 务 书4主要参考文献:1.孙涵芳.MCS-51/96系列 单片机原理及应用(修订版).北京航空航天大学出版社.1994 2.李朝青.单片机原理及接口技术(第3版).北京航空航天大学出版社.20055设计成果形式及要求:1. 硬件电路图2. 软件流程图

4、和程序清单3. 编写课程设计报告。6工作计划及进度:2014 6月2日 6月5日 查找资料,确定方案6月 6日 6月 8 日 设计硬件电路,绘制电路原理图6月 9 日 6月11日 软件设计,并调试通过6月12日6月13日 编写课程设计报告,答辩或成绩考核负责人审查意见:  签字: 年 月 日目 录1 引言11.1设计目的11.2设计内容和要求12 系统总体方案及硬件设计2 2.1总体设计22.2硬件材料22.3 系统时钟电路设计 32.4系统复位电路的设计 32.5 闹钟指示电路设计 42.6 电子闹钟的显示电路设计

5、0;52.7按键电路63软件设计7 3.1 主程序流程图73.2数码管显示更新流程图83.3 外部中断1服务函数流程图93.4外部中断0服务函数流程图103.5定时器溢出流程图114.Proteus软件仿真 125设计过程中遇到的问题及解决方法 136课程设计体会14参考文献15附1:源程序代码16附2:系统原理图28附3:PCB图29附4:实物图30单片机课程设计说明书1 引言本设计是定时闹钟的设计,由单片机AT89C52芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。设计中采用单片机利用AT89C52,它是低功耗、高性能的CMOS型8位单片机。片

6、内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。另外,  AT89C52单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进步可以扩充控制电器的启停。设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。课设准备中我们根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真试验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声

7、音,持续一定时间。显示采用的六位数码管电路,显示实际时间和闹钟设置。1.1设计目的本设计包括确定控制任务、系统总体方案设计、硬件系统设计、软件程序的设计等,以便使学生掌握有关单片机控制的设计思想和设计方法。为学生今后从事单片机控制系统开发工作打下基础。学习proteus仿真软件实现电路的仿真。1.2设计内容和要求本课程设计要求学生掌握单片机控制系统设计的基本理论,掌握单片机的编程方法,用89C52系列单片机及六位数码管显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可以实现时分调整、秒表/时钟功能转换、省电(关闭显示)、定时设定提醒(蜂鸣器)等功能。

8、2 系统总体方案及硬件设计2.1总体设计单片机时钟应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。电子时钟的系统框图如2-1所示:图2-1 电子时钟的系统框图2.2硬件材料硬件材料如表2-1所示:表2-1 硬件材料2.3 系统时钟电路设计 对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于原理图中的C2、C3电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(30±10 PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温

9、度系数要尽可能低。实验表明,这2个电容元件对闹钟的走时误差有较大关系。  图2-2 系统时钟电路2.4系统复位电路的设计 智能系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:)RC复位电路;)专用µ监控电路。前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。 本次课程设计采用了上电按钮电平复位电路。  图2-3 系统复位电路2.5 闹钟指示电路设计 闹铃指示可以有声或光两种形式。本系统采用声音指示。关键元

10、件是蜂鸣器。蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。市场上的有源蜂鸣器分为3、5、6等系列,以适应不同的应用需要。闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。其电路设计参见系统原理图。  图2-4 闹钟指示电路2.6 电子闹钟的显示电路设计 本次课程设计采用了6位数码管显示电路。在6位LED显示时,为了简化电路,降

11、低成本,采用动态显示的方式, 6个LED显示器共用一个8位的I/O, 6位LED数码管的位选线分别由相应的P2. 0P2. 5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。译码显示电路将“时”、“分”、“秒”计数器的输出状态菁七段显示译码器译码,通过6位LED七段显示器显示出来。到达定时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现闹铃。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。图2-5 数码管显示电路2.7按键电路 图2-6 按键电路表2-2 按键功能表S2打开/关闭闹钟S3闹钟时间

12、/实时切换S4秒表/实时切换S6打开/关闭节能S7时加1/秒表开始暂停S8时减1/秒表复位S9分加1S10分减13软件设计3.1 主程序流程图程序通过入口使系统初始化,再由数码管显示更新,形成时钟显示。如图3-1所示。 图3-1 主程序流程图3.2数码管显示更新流程图在实时模式下,数码管显示实时;在秒表模式下,数码管显示秒表时间;在闹钟设定模式下,数码管显示闹钟设定。模式可由按键选择。如图3-2所示。 图3-2 数码管显示更新流程图3.3 外部中断1服务函数流程图CPU响应外部中断1后,启动现场保护。通过按键选择不同模式。按键5可使节能模式打开、关闭;按键6可进行秒表、实时切换;按键7可进行闹

13、钟、实时切换;按键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 定时器溢出流程图4 Pr

14、oteus软件仿真 本次课程设计所采用的程序调试软件为keil uvision4集成调试软件,所采用的仿真软件为proteus pro 7.8 SP2软件。 本次试验的效果图如下所示:图4-1 实验效果图5设计过程中遇到的问题及解决方法 在设计的过程中遇到问题是不可避免的,我遇到了很多问题,如下所示;1.做实物时无法驱动数码管显示,后来了解到可以加锁存器,如74LS253,74LS573等等,还可以加三极管用来加大电流。当然如果换成液晶显示屏的话就不需要考虑驱动不了的问题了。 2.烧程序时没发烧进去,需要改变最高和最低波特率,才能按照

15、步骤把程序烧进去。 3.仿真时没问题的电路,在做好实物时发现无法运行。原因可能是程序出现问题,或者在连实物时线路连接错误等等都有可能。这是很难的一部分,需要查找出原因。在做实物的过程中我进行的很多检查,有很多连接错误,最终又重新焊接的。6 课程设计体会本次课程设计我们做了单片机时钟,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可以实现时分调整、秒表/时钟功能转换、省电(关闭显示)、定时设定提醒(蜂鸣器)等功能。 这次课程设计让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。但在实习中见过甚至使用了单片机及其

16、系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。在这次课程设计中又让我体会到了合作与团结的力量。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。此外,使我对这们功课有了更深刻的认识和了解。首先对于硬件电路的工作原理有了进一步系统的学习,同样就有了进一步的认识,使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一

17、个过程。小组人员的配合相处,以及自身的动脑和努力,都是以后工作中需要的。参考文献1 孙涵芳.MCS-51/96系列 单片机原理及应用(修订版).北京航空航天大学出版社.1994 2 李朝青.单片机原理及接口技术(第3版).北京航空航天大学出版社.2005附1:源程序代码MAIN/*Description :数字钟主程序,首先初始化变量、I/O口、外设, 然后单片机进入无条件循环,若中断触发,则进行实时处理。*/ Start/*包含头文件*/#include <reg52.h>#include <delay.h>#include <keyboard.h>#in

18、clude <display.h>#include <timer.h>/*主程序入口参数:无;返回值:无*/void main(void)Timer_Init( );/定时器初始化Keyboard_Init( );/按键初始化Display_Init( );/数码管显示初始化EN_Bell = 1;/关闭蜂鸣器while(1)/无条件循环Display_Updata( );/数码管显示更新DELAY/*Description :数字钟简单延时函数*/ Start/*包含头文件*/#include <reg52.h>#include <delay.h&g

19、t;#include <keyboard.h>#include <display.h>#include <timer.h>/*大致延时2uS*/void DelayUs(unsigned char t) while(-t);/*大致延时1mS*/void DelayMs(unsigned char t) while(t-) DelayUs(245);DelayUs(245);KEYBOARD/*Description :数字钟按键处理函数 */ Start/*包含头文件*/#include <reg52.h>#include <delay.

20、h>#include <keyboard.h>#include <display.h>#include <timer.h>/*按键初始化程序入口参数:无;返回值:无*/void Keyboard_Init(void)EA = 1;IE0 = 0;/外部中断0清零IT0 = 1;/下降沿触发EX0 = 1;/外部中断0允许IE1 = 0;/外部中断1清零IT1 = 1;/下降沿触发EX1 = 1;/外部中断1允许void Open_Stopwatch(void)/秒表开始或暂停工作ET1 = ET1;/开定时器1中断TR1 = TR1;/允许定时器1工作

21、TF1 = 0; /定时器1溢出标志清零void Res_Stopwatch(void) /秒表复位ET1 = 0; /关定时器1中断TR1 = 0; /禁止定时器1工作TF1 = 0;/定时器1溢出标志清零s_1 = 0;m_1 = 0;h_1 = 0;/*外部中断0中断服务程序*/void Int_0(void) interrupt 0DelayMs(15);/延时去抖if(EN_Play = 0x00)/实时switch(P1&0xf0)case 0xe0:if(h < 23)h+;break;/时加1case 0xd0:if(h > 0)h-;break;/时减1c

22、ase 0xb0:if(m < 60)m+;break;/分加1case 0x70:if(m > 0)m-;break;/分减1default:;break;if(EN_Play = 0x01) /秒表switch(P1&0xf0)case 0xe0:Open_Stopwatch( );break; /秒表开始或暂停工作case 0xd0:Res_Stopwatch( );break;/秒表复位default:;break;if(EN_Play = 0x02)/闹钟设定switch(P1&0xf0)case 0xe0:if(h_2 < 23)h_2+;brea

23、k;/时加1case 0xd0:if(h_2 > 0)h_2-;break;/时减1case 0xb0:if(m_2 < 60)m_2+;break;/分加1case 0x70:if(m_2 > 0)m_2-;break;/分减1default:;break;IE0 = 0;/中断清零void EN_Stopwatch(void)/秒表/实时切换if(EN_Play = 0x01)EN_Play = 0x00;elseEN_Play = 0x01;void EN_Alarm(void) /闹钟/实时切换if(EN_Play = 0x02)EN_Play = 0x00;else

24、EN_Play = 0x02;void Sel_Alarm(void) /闹钟/实时切换Open_Alarm = Open_Alarm;if(Open_Alarm)s_2 = 0x01;elses_2 = 0x00;EN_Bell = 1; /关闭蜂鸣器void Int_1(void) interrupt 2DelayMs(15);/延时去抖switch(P1&0x0f)case 0x0e:EN_Dis = EN_Dis;break;/打开或关闭节能模式case 0x0d:EN_Stopwatch( );break;/秒表/实时切换case 0x0b:EN_Alarm( );break

25、;/闹钟/实时切换case 0x07:Sel_Alarm( );break;/打开或关闭闹钟default:;break;IE1 = 0;/中断清零KEYBOARD.H/*Description :数字钟头文件,申明keyboard.c中的全局函数、全局变量*/ Start#ifndef _KEYBOARD_H_ /作用:防止keyboard.h被重复引用#define _KEYBOARD_H_/*按键初始化程序*/extern void Keyboard_Init(void);/全局函数申明#endif/ No moreDisplay.c/*Description :数字钟数码管显示程序,通

26、过两个74HC573和两个片选信号, 分时输出段码和位码。*/ Start/*包含头文件*/#include <reg52.h>#include <delay.h>#include <keyboard.h>#include <display.h>#include <timer.h>/*定义常量*/unsigned char code Table_Duan10 =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/显示段码值09unsigned char code Table_Wei6

27、= 0xfe,0xfd,0xfb,0xf7,0xef,0xdf;/分别对应相应的数码管点亮,即位码/*定义变量*/unsigned char Table_Dis6 = 0x00,0x00,0x00,0x00,0x00,0x00;unsigned char j,EN_Play;/数码管位计数、显示模式标志bit EN_Dis;/节能模式标志bit Open_Alarm;/闹钟打开标志/*数码管显示初始化程序入口参数:无;返回值:无*/void Display_Init(void)j = 0;s = 0;m = 0;h = 0;s_1 = 0;m_1 = 0;h_1 = 0;s_2 = 0;m_2

28、 = 0;h_2 = 0;Open_Alarm = 0;EN_Dis = 1;EN_Play = 0x00;Count_Bell = 0;/*数码管段码计算程序入口参数:无;返回值:无*/void Display_Actual(void) /实时Table_Dis5 = s%10;Table_Dis4 = s/10;Table_Dis3 = m%10;Table_Dis2 = m/10;Table_Dis1 = h%10;Table_Dis0 = h/10;void Display_Stopwatch(void) /秒表Table_Dis5 = s_1%10;Table_Dis4 = s_1/

29、10;Table_Dis3 = m_1%10;Table_Dis2 = m_1/10;Table_Dis1 = h_1%10;Table_Dis0 = h_1/10;void Display_Alarm(void) /闹钟Table_Dis5 = s_2%10;Table_Dis4 = s_2/10;Table_Dis3 = m_2%10;Table_Dis2 = m_2/10;Table_Dis1 = h_2%10;Table_Dis0 = h_2/10;/*数码管显示更新程序入口参数:无;返回值:无*/void Display_Updata(void)if(EN_Dis)switch(EN

30、_Play)/显示模式选择case 0x00:Display_Actual( );break; /实时case 0x01:Display_Stopwatch( );break;/秒表case 0x02:Display_Alarm( );break;/闹钟default:;break;for(j = 0;j < 6;j+)P2 = Table_Weij; /取位码 LATCH2=1; /位锁存 LATCH2=0;if(j = 1)|(j = 3)P2 = Table_DuanTable_Disj|0x80; /取段码else P2 = Table_DuanTable_Disj; /取段码

31、LATCH1=1; /段锁存 LATCH1=0;DelayMs(2);elseP2 = 0xff;LATCH1 = 1; LATCH2 = 1;Keyboard.h/*Description :数字钟头文件,申明display.c中的全局函数、全局变量 */ Start#ifndef _DISPLAY_H_ /作用:防止display.h被重复引用#define _DISPLAY_H_sbit LATCH1 = P07;/数码管段锁存sbit LATCH2 = P06;/数码管位锁存extern bit EN_Dis,Open_Alarm;/全局变量申明extern unsigned char

32、 EN_Play;/*数码管显示初始化程序*/extern void Display_Init(void);/全局函数申明/*数码管显示更新程序*/extern void Display_Updata(void);/全局函数申明#endif/ No moreTimer.c/*Description :数字钟定时器程序,*/ Start/*包含头文件*/#include <reg52.h>#include <delay.h>#include <keyboard.h>#include <display.h>#include <timer.h>/*定义变量*/unsigned char s,m,h,Count_Bell,i,k;/秒、分、时、蜂鸣次数、定时器溢出次数unsigned char s_1,m_1,h_1;/秒表秒、分、时unsigned char s_2,m_2,h_2;/闹钟秒、分、时/*定时器初始化程序入口参数:无;返回值:无*/void Timer_Init(void)i = 0;TMOD = 0x11;/定时器0、1工作于16位定时器模式TH0 = 0x3c;/初值高八位TL0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论