c语言单片机定时闹钟课程设计.docx

上传人:b****8 文档编号:8924708 上传时间:2023-05-16 格式:DOCX 页数:22 大小:115.93KB
下载 相关 举报
c语言单片机定时闹钟课程设计.docx_第1页
第1页 / 共22页
c语言单片机定时闹钟课程设计.docx_第2页
第2页 / 共22页
c语言单片机定时闹钟课程设计.docx_第3页
第3页 / 共22页
c语言单片机定时闹钟课程设计.docx_第4页
第4页 / 共22页
c语言单片机定时闹钟课程设计.docx_第5页
第5页 / 共22页
c语言单片机定时闹钟课程设计.docx_第6页
第6页 / 共22页
c语言单片机定时闹钟课程设计.docx_第7页
第7页 / 共22页
c语言单片机定时闹钟课程设计.docx_第8页
第8页 / 共22页
c语言单片机定时闹钟课程设计.docx_第9页
第9页 / 共22页
c语言单片机定时闹钟课程设计.docx_第10页
第10页 / 共22页
c语言单片机定时闹钟课程设计.docx_第11页
第11页 / 共22页
c语言单片机定时闹钟课程设计.docx_第12页
第12页 / 共22页
c语言单片机定时闹钟课程设计.docx_第13页
第13页 / 共22页
c语言单片机定时闹钟课程设计.docx_第14页
第14页 / 共22页
c语言单片机定时闹钟课程设计.docx_第15页
第15页 / 共22页
c语言单片机定时闹钟课程设计.docx_第16页
第16页 / 共22页
c语言单片机定时闹钟课程设计.docx_第17页
第17页 / 共22页
c语言单片机定时闹钟课程设计.docx_第18页
第18页 / 共22页
c语言单片机定时闹钟课程设计.docx_第19页
第19页 / 共22页
c语言单片机定时闹钟课程设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言单片机定时闹钟课程设计.docx

《c语言单片机定时闹钟课程设计.docx》由会员分享,可在线阅读,更多相关《c语言单片机定时闹钟课程设计.docx(22页珍藏版)》请在冰点文库上搜索。

c语言单片机定时闹钟课程设计.docx

c语言单片机定时闹钟课程设计

课程设计任务书

报告题目

定时闹钟

完成时间

12.22

学生姓名

专业班级

指导教师

职称

讲师

总体设计要求和技术要点

1.任务:

使用AT89C51单片机设计一个简易的定时闹钟。

2.要求:

定时闹钟的基本功能如下:

⏹显示格式为“时时:

分分”。

⏹由LED闪动来做秒计数表示。

⏹一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。

⏹程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:

00”,按下操作键K1~K4动作如下:

(1)K1—设置现在的时间。

(2)K2—显示闹钟设置的时间。

(3)K3—设置闹铃的时间。

(4)K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。

设置当前时间或闹铃时间如下。

(1)K1—时调整。

(2)K2—分调整。

(3)K3—设置完成。

(4)K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

工作内容及时间进度安排

第17周:

周1---周3:

立题、论证方案设计

周4---周5:

程序编写

第18周:

周1---周3:

软件仿真、系统调试

周4---周5:

验收答辩

课程设计成果

1.与设计内容对应的软件程序

2.课程设计总结报告

摘要

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

随着生活水平的提高,人们越来越追求人性化的事物。

传统的时钟已不能满足人们的需求。

而现代的时钟不仅需要模拟电路技术和数字电路技术而且更需要单片机技术,增加数字钟的功能。

利用软件编程尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,减小因元器件精度不够引起的误差。

本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件同时采用LED数码管显示器动态显示“时”、“分”的现代计时装置。

另外具有校时功能和定时器功能,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。

关键词:

单片机,定时器,中断,闹钟,LED

 

一、概述…………………………………………………………………………1

二、方案选择和与论证………………………………………………………………2

1.单片机型号的选择……………………………………………………………2

2.按键的选择……………………………………………………………………3

3.显示器的选择…………………………………………………………………3

4.发音部分的设计……………………………………………………………3

5.显示器驱动电路………………………………………………………3

6.电源的选择…………………………………………………………3

三、单元电路设计与分析…………………………………………………………4

1.系统原理图………………………………………………………………4

2.主程序部分的设计…………………………………………………………43.中断定时器的设置…………………………………………………………4

4.按键电路设计………………………………………………………………5

5.蜂鸣器驱动电路……………………………………………………………5

6.数码管显示电路……………………………………………………6

四、实验结果……………………………………………………………7

五、课程设计的心得…………………………………………………………………13

六、参考文献……………………………………………………………………14

 

一、概述

电子闹钟在科学技术高度发展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。

本文给出了一种以基于8051芯片电子闹钟设计方法,从而给人们带来更为方便的工作与生活。

1.51电子闹钟发展趋势

现代的快节奏生活给人们的精神上带来了很大压力。

如何排解或缓解这些压力已经成为很多人关心的问题。

单片机电子闹钟是具发前闹钟创新性的系统,它代表了时代的发展趋势。

2007年,无论从国内外行业发展趋势,还是从闹钟市场准入的要求来看,节能、环保、创新都已成为中国家电企业无法回避的大问题。

在原材料价格不断上涨、下游渠道商实力膨胀、价格战越来越激烈、行业利润日趋微薄的背景下,日前,中国的电子闹钟在节能化、环保化、创新型转变过程中,正进行新一轮闹钟赛跑。

目前,国内专业51电子闹钟厂家的数量正在迅速增长。

51电子闹钟市场在未来的三五年内会高速增长,新技术、新产品也会不断出现并投入应用。

2.本课题研究的主要内容

设计一个51电子闹钟

能随意设定走时起始时间。

(1)12小时/24小时两种制式可选,以适应不同的需要。

(2)能显示秒钟节奏,用LED的亮灭指示

(3)采用交直流供电电源。

与石英钟不同的是,电子钟一般采用数码管等显示介质,因而必须以交流供电为主,以直流电源为后备辅助电源,并能自动切换。

该设计主要包括:

按键、显示程序单元部分。

、AT89S51单片机芯片、74HC245驱动LED显示电路,集成电路74HC245和LM386各1个。

3.51电子闹钟简介

3.1开发的目的和意义

目的:

使用AT89C51单片机设计一个简易的定时闹钟。

程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:

00”,按下操作键K1~K4动作如下:

(1)K1—设置现在的时间。

(2)K2—显示闹钟设置的时间。

(3)K3—设置闹铃的时间。

(4)K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。

设置当前时间或闹铃时间如下。

(1)K1—时调整。

(2)K2—分调整。

(3)K3—设置完成。

(4)K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

意义:

电子闹钟已经是现代生活中经常用到的工具之一,传统的电子闹钟只是机械控制,另外,体积也很大,又不美观也不实用.而现在我设计的电子闹钟是用单片机做的.只要简单的设置好后,她就能按照主人的意思,定时的把你闹醒啦!

也能给人们的生活带来方便。

3.251电子闹钟的优点

(1)、简单好用、美观、体积小、实用。

(2)、用电量少、电压低,节能、环保、创新。

按键、显示程序单元部分。

AT89S51单片机芯片、74HC245驱动LED显示电路。

外接4个按钮组成键盘,AT89S51为51内核。

另外,AT89S51本身无专门的液晶驱动接口,因此,本时钟采用数码管显示方式。

数码管作为一种主动显示器件,具有亮度高、价格便宜等优点,而且市场上也有专门的时钟显示组合数码管。

 

51电子闹钟的用途:

我设计的电子闹钟是用单片机做的.只要简单的设置好后,她就能按照主人的意思,定时的把你闹醒啦!

也能给人们的生活、工作学习带来方便。

3.351电子闹钟的特点

1.帮助您排解或缓解那些来自现实生活的压力

2.数码管作为一种主动显示器件,亮度高、价格便宜等,显示数字清晰。

3.简单好用,可任意设24式时间。

4.使用LED发光,省电,灯泡寿命长。

5.只要简单的设置好后,她就能按照主人的意思,定时的把你闹醒啦!

也能给人们的生活、工作学习

二、方案的选择和论证

1.单片机型号的选择

通过对多种单片机性能的分析,最终认为AT89C51是最理想的电子时钟开发芯片。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程序存储器和1000次擦写循环,数据保留时间为10年,是最好的选择。

2.按键的选择

方案一:

4×4矩阵式键盘。

如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷,但程序较为复杂。

方案二:

独立式按键。

如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此,此方案适用于按键较少的情况。

如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单

由于并不需要经常修改时间和设置闹铃时间,而且方案二的程序简单,按键少、成本低,因此,选择方案二。

3.显示器的选择

方案一:

液晶显示器。

如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带。

但液晶显示器的驱动电路复杂,使用起来有一定的难度。

方案二:

用数码管作为显示器。

数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。

其缺点是功耗较大。

由于数码管使用起来较为方便,在夜间看时间也很方便,因此我选择了方案二。

4.发音部分的设计

通过三极管放大后驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。

5.显示器驱动电路

由于通过数码管公共极的电流较大且避免过多地使用分立元件,采用了一片74LS245来驱动段码,用P3口作位码驱动。

6.电源的选择

电源是单片机系统的重要组成部分,它不仅为系统提供多路电压源,还直接影响到系统的技术指标和抗干扰性能。

AT89C51单片机和一般的数字芯片一样,都是5V电压供电,所以可以共用一个5V电源。

三、单元电路设计和分析

1.设计原理

系统原理图

图1系统原理图

2.主程序部分的设计

程序部分主要采用了程序结构的模块化设计,避免了一些函数的不必要的重复书写,使程序变得单间易懂。

程序在执行时,主程序要须通过调用子函数就可完成相应的功能。

主程序流程图如下图。

图2主程序流程图

3.中断定时器的设置

数字电子钟设计中主要使用定时器T0中断ET0,利用ET0中断进行计时时间的自增,从而实现计时功能。

AT89C51有两个通用定时/计数器。

两者均可配置为定时器或事件计数器。

另外增加了定时器T0/T1,溢出时T0/T1脚自动翻转的功能选项。

用作“定时器”功能时,每经过一个机器周期,寄存器值加1。

用作“计数器”功能时,寄存器在对应的外部输入管脚T0/T1上每发生一次1到0的跳变时加1。

使用该功能时,外部输入每个机器周期被采样一次。

图3定时器工作原理[1]

 

4.键盘电路设计

键盘采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。

图4独立按键图5键盘输入电路

5.蜂鸣器驱动电路

发音部分是通过三极管放大驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。

图6蜂鸣器驱动电路

6.数码管显示电路

图7七段数码管

图8六个数码管

要同时使得6个数码管点亮,所需的IO口是很多的。

为了节省单片机的IO口,通常采用动态扫描的显示方法,将每个数码管的同名段连在一起,分6次向数码管写数据,每次对6个数码管写相同的数据,每次选通一个数码管,完成扫描,通过调整、缩短扫描的时间,由于人眼的视觉暂留作用,使得人们看起来就像同时显示一样,以达到动态显示的目的。

 

四、实验结果

#include"reg52.h"

#defineucharunsignedchar

#defineuintunsignedint

sbitwela=P2^7;

sbitdula=P2^6;

sbits1=P3^4;//模式的选择

sbits2=P3^5;//调高

sbits3=P3^6;//调低

sbits4=P3^7;//选择是否开启闹铃

sbitbeep=P2^3;

uchartt,num,t1,settime,bi;

ucharflag;//至位

intfen,miao,fen1=0,miao1=10;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

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

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

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

uchardis[]={0x40,0x40,0x40,0x40,0x40,0x40};

voidtimedisplay();

voiddisplay();

voidkeydisplay();

voidsetdisplay();

voiddisplay1();

voiddelay(ucharz)

{

uchari,j;

for(i=125;i>0;i--)

for(j=z;j>0;j--);

}

voidwarm()

{

if(bi==1)

{

beep=0;

TR1=1;

}

}

voidinit()

{

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

TH1=(65536-50000)/256;

TL1=(65536-50000)%6;

EA=1;

ET0=1;

ET1=1;

TR0=1;

}

voidkeyscan()

{

if(s4==0)

{

delay(5);

{

if(s4==0)

{

while(!

s4);

bi++;

if(bi==2)

{

bi=0;

}

}

}

}

if(s1==0)

{

delay(5);

if(s1==0)

{

while(!

s1);

num++;

if(num==3)

{

num=0;

}

}

}

if(num!

=0)

{

if(s2==0)

{

delay(5);

if(s2==0)

{

if(num==1)

{

miao1++;

if(miao1==60)

miao1=0;

}

if(num==2)

{

fen1++;

if(fen1==60)

fen1=0;

}

while(!

s2)

{

keydisplay();

}

}

}

if(s3==0)

{

delay(5);

if(s3==0)

{

if(num==1)

{

miao1--;

if(miao1==-1)

miao1=59;

}

if(num==2)

{

fen1--;

if(fen1==-1)

fen1=59;

}

while(!

s3)

{

keydisplay();

}

}

}

}

}

voidsetdisplay()//设置模式下的显示

{

dis[0]=0x40;

dis[1]=0x40;

dis[2]=table[0];

dis[3]=table[num];

dis[4]=0x40;

dis[5]=0x40;

display();

}

voidkeydisplay()//通过按键加减时的显示

{

if((flag==1)&&(num==2))

{

dis[0]=table[fen1/10]&0x00;

dis[1]=table[fen1]&0x00;

}

else

{

dis[0]=table[fen1/10];

dis[1]=table[fen1];

}

dis[2]=0x40;

if((flag==1)&&(num==1))

{

dis[3]=table[miao1/10]&0x00;

dis[4]=table[miao1]&0x00;

}

else

{

dis[3]=table[miao1/10];

dis[4]=table[miao1];

}

dis[5]=0x40;

display();

}

voiddisplay()//基本的动态显示

{

dula=1;//theone

P0=dis[0];

dula=0;

wela=1;

P0=0xfe;

wela=0;

delay

(1);

dula=1;//thetwo

P0=dis[1];

dula=0;

wela=1;

P0=0xfd;

wela=0;

delay

(1);

dula=1;//thethree

P0=dis[2];

dula=0;

wela=1;

P0=0xfb;

wela=0;

delay

(1);

dula=1;//thefour

P0=dis[3];

dula=0;

wela=1;

P0=0xf7;

wela=0;

delay

(1);

dula=1;//thefive

P0=dis[4];

dula=0;

wela=1;

P0=0xef;

wela=0;

delay

(1);

dula=1;//thesix

P0=dis[5];

dula=0;

wela=1;

P0=0xdf;

wela=0;

delay

(1);

}

voidtimedisplay()

{

dis[0]=table[fen/10];

dis[1]=table[fen];

dis[2]=0x40;

dis[3]=table[miao/10];

dis[4]=table[miao];

dis[5]=0x40;

display();

}

voidmain()

{

init();

while

(1)

{

keyscan();

if(num!

=0)

{

keydisplay();

}

if(num==0)

{

timedisplay();

}

}

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

tt++;

if(tt==20)

{

tt=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

}

}

}

if(!

num&&fen1==fen&&miao1==miao)

{

warm();

}

settime++;

if(settime==10)

{

flag=1;

}

if(settime==20)

{

settime=0;

flag=0;

}

}

voidtimer1()interrupt3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%6;

t1++;

if(t1==60)

{

t1=0;

beep=1;

}

}

五、课程设计的心得

回顾起此次单片机课程设计,我仍感慨颇多,学到了很多的东西。

觉得,一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。

对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。

在程序设计前期,设计出现部分不足:

如位选闪烁功能不能实现、闹钟的开启与关闭、间断蜂鸣声等。

这些只是软件设计时相应功能部分还不完善造成。

不过经仔细思考和程序的完善,最终将软件设计改进,并完全可以很好实现所有要求的功能。

另外,在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。

通过自己的不懈努力,我终于完成了毕业设计任务书上的任务要求。

从这次的课程设计中,我们真真正正的意识到:

要理论联系实际,把我们所学的理论知识用到实际当中。

去解决生活中的实际问题,这才叫真正学懂了,这才是技术,否则,那是骗人的。

六、参考文献

[1]胡汉才,单片机原理及应用[M],北京:

清华大学出版社,2004

[2]凌玉华,单片机原理及应用系统设计[M],长沙:

中南大学出版社,2006

[3]谭浩强,C程序设计教程[M].北京:

清华大学电出版社,2007

[4]胡汉才.单片机原理及其接口技术(第2版)[M].北京:

清华大学出版社,2004

 

教师评语及设计成绩

教师评语:

(指导教师手写)

 

 

课程设计成绩:

 

指导教师:

(签名)

日期:

年月日

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

当前位置:首页 > 经管营销 > 经济市场

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

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