北交大单片机课设电子时钟分解.docx

上传人:b****5 文档编号:6907481 上传时间:2023-01-12 格式:DOCX 页数:19 大小:379.01KB
下载 相关 举报
北交大单片机课设电子时钟分解.docx_第1页
第1页 / 共19页
北交大单片机课设电子时钟分解.docx_第2页
第2页 / 共19页
北交大单片机课设电子时钟分解.docx_第3页
第3页 / 共19页
北交大单片机课设电子时钟分解.docx_第4页
第4页 / 共19页
北交大单片机课设电子时钟分解.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

北交大单片机课设电子时钟分解.docx

《北交大单片机课设电子时钟分解.docx》由会员分享,可在线阅读,更多相关《北交大单片机课设电子时钟分解.docx(19页珍藏版)》请在冰豆网上搜索。

北交大单片机课设电子时钟分解.docx

北交大单片机课设电子时钟分解

 

单片机课程设计

实验报告

课题:

电子时钟

姓名:

学号:

专业班级:

指导教师:

实验时间:

2014年6月5日

一、设计目的

通过电子时钟综合设计,使学生学会利用8051定时器时间计时处理功能,了解按键扫描及控制LED数码管显示原理,掌握单片机和按键以及LED数码管硬件电路设计及控制程序的设计方法。

思考按键消除抖动、LED动态显示与静态显示的特点,从而提高学生解决实际问题的能力。

二、设计任务及要求

利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟,要求:

1.在4位数码管上显示当前时间。

显示格式“时时分分”

2.由LED闪动做秒显示。

3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。

当闹玲时间到蜂鸣器发出声响,按停止键使可使闹玲声停止。

三、硬件设计

1.显示模块

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。

方法是将所有位的段选线相应并联,由一个8位I/O口控制,从而形成段选线的多路复用,同时各位的公共端分别由相应的I/O线控制,实现分时选通。

硬件电路图如下,图中10k电阻起到限流作用;三极管起到驱动数码管的作用。

若不使用三极管,数码管发光微弱。

2.闹铃模块

闹铃声由交流蜂鸣器产生,电路图如下。

当P2.4输出不同频率的方波,.蜂鸣器便会发出不同的声音。

3.整体硬件电路图

四、软件设计

1.计时模块

利用单片机定时器0完成计时功能。

定时器0计时中断程序每隔1ms中断一次并当作一个计数,每中断一次计数加1,当计数1000次时,则表示1s到了,秒变量加1。

当秒变量达到60时,秒变量清零同时分变量加1。

分变量达到60时,分变量清零同时时变量加1。

当时变量达到24时,时变量清零。

由于实验要求由LED闪动做秒显示,因此每隔0.5s即计数500次时,P1^1(驱动LED灯)取反一次,从而实现LED灯闪动一次为1s,秒变量加1。

该模块流程图如下:

程序如下:

voidDelay(intm)//延时函数

{

inty=m/10;

while(--m);

}

voidInit_Timer0()//计时器初始化函数

{

TMOD=0x11;

TH0=0xEE;

TL0=0x00;

ET0=1;

TR0=1;

EA=1;

}

voidInit_Timer1()//计时器初始化函数

{

TMOD=0x11;

ET1=1;

TR1=0;

EA=1;

}

voidtime0(void)interrupt1//计时函数

{

TH0=0xee;

TL0=0x00;

i++;

if(i==199)

{

P1=_cror_(P1,1);//循环位移

second++;

if(second==60)

{

second=0;

minute++;

if(minute==60)

{

minute=0;

hour++;

if(hour==24)

{

hour=0;

}

}

}

i=0;

}

}

2.显示模块

为在各位LED上分别显示不同的字符,需要采用循环扫描显示的方法,即在某一时刻只选通一条位选线,并输出该位的字段码,其余位则处于关闭状态。

可见,各位LED显示的字符并不是同时出现的,但由于人眼的视觉暂留及LED的余辉,可以达到同时显示的效果。

程序流程图如下:

采用动态显示时,需要确定LED各位显示的保持时间。

由于LED从导通到发光有延时,时间太短会造成发光微弱,显示不清晰;如果显示时间太长,则会占用较多的CPU时间。

程序如下:

voiddisplay(uintx,uinty)//数码管显示函数

{

qian=x/10;

bai=x%10;

shi=y/10;

ge=y%10;

s1=0;

if(j==1)//设置模式下调整位闪烁函数

{

s_flag++;

if(s_flag<=20)

{

P0=0xff;

}

else

{

P0=digseg[qian];

if(s_flag==40)

s_flag=0;

}

}

elseP0=digseg[qian];

Delay(500);

s1=1;

s2=0;

if(j==1)

{

s_flag++;

if(s_flag<=20)

{

P0=0xff;

}

else

{

P0=digseg[bai];

if(s_flag==40)

s_flag=0;

}

}

elseP0=digseg[bai];

Delay(500);

s2=1;

s3=0;

if(j==2)

{

s_flag++;

if(s_flag<=20)

{

P0=0xff;

}

else

{

P0=digseg[shi];

if(s_flag==40)

s_flag=0;

}

}

elseP0=digseg[shi];

Delay(500);

s3=1;

s4=0;

if(j==2)

{

s_flag++;

if(s_flag<=20)

{

P0=0xff;

}

else

{

P0=digseg[ge];

if(s_flag==40)

s_flag=0;

}

}

elseP0=digseg[ge];

Delay(500);

s4=1;

}

3.按键判断及处理程序

按键的闭合与否,反映在电压上就是呈现出高电平或低电平。

由于机械触点的弹性作用,在闭合及断开的瞬间,电压信号伴随有一定时间的抖动,抖动时间与按键的机械特性有关,一般是5~10ms。

为了保证CPU确认一次按键动作,既不重复也不遗漏,必须消除抖动的影响。

通过软件消除抖动的方法为:

在程序执行过程中检测到有按键按下时,调用一段延时(约10ms)子程序,然后判断该按键的电平是否仍然保持在闭合状态,如果是,则确认有键按下。

按键判断流程图如下:

按键处理流程图如下:

程序如下:

charcheck_K1(void)//按键检测函数

{

if(KEY1==0)

{

Delay(2000);//防抖动

if(KEY1==0)

{

while(KEY1==0);

return1;

}

}

return0;

}

charcheck_K2(void)

{

if(KEY2==0)

{

Delay(2000);

if(KEY2==0)

{

while(KEY2==0);

return1;

}

}

return0;

}

 

charcheck_K3(void)

{

if(KEY3==0)

{

Delay(2000);

if(KEY3==0)

{

while(KEY3==0);

return1;

}

}

return0;

}

 

charcheck_K4(void)

{

if(KEY4==0)

{

Delay(2000);

if(KEY4==0)

{

while(KEY4==0);

return1;

}

}

return0;

}

4.音乐响铃模块

音乐闹铃程序:

单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。

这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。

众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。

另外,音乐的节拍是由延时实现的。

在单片机音乐演奏程序中,包括了两个数据表,其中存放了事先算好的各种音符频率所对应的半周期的定时时间初始值。

有了这些数据,单片机就可以演奏低音、中音、高音,三个八度共21个音符。

演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。

通过调用延迟来实现节拍数。

乐曲的数据,也要写个数据表:

表中每三个数字,说明了一个音符,它们分别代表:

第一个数字是音符的数值;第二个数字是123之一,代表低音、中音、高音;第三个数字是时间长度,以半拍为单位。

乐曲数据表的结尾是三个0。

音节与频率的关系如下表所示

音调

X

音调

X

音调

X

低音1

F921

中音1

FC8F

高音1

FE47

低音2

F9E1

中音2

FCEE

高音2

FE77

低音3

FA8C

中音3

FD44

高音3

FEA2

低音4

FAD8

中音4

FD6B

高音4

FEB6

低音5

FB68

中音5

FDB4

高音5

FEDA

低音6

FBE9

中音6

FDF4

高音6

FEFA

低音7

FC5B

中音7

FE2D

高音7

FF16

程序流程图如下:

程序如下:

codeunsignedcharyinyue[]={1,1,5,5,6,6,5,0,4,4,3,3,2,2,1,0,5,5,4,4,3,3,2,0,5,5,4,4,3,3,2,0};//蜂鸣器音乐音符表

uintmusic1[]={0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc};//不同频率对应计数器处初值(高八位)

uintmusic2[]={0x21,0xe1,0x8c,0xd8,0x68,0xe9,0x5b,0x8f};//不同频率对应计数器初值(低八位)

for(y=0;y<=32;y++)//音乐播放

{

display(hour,minute);

if(check_K2())

{

TR1=0;

beep=1;

break;

}

if(y==32)y=0;

if(yinyue[y]==0)

{

Delay(60000);

}

else

{

TH1=music1[yinyue[y]-1];

TL1=music2[yinyue[y]-1];

beep=0;

TR1=1;

Delay(20000);

TR1=0;

beep=1;

Delay(40000);

}

}

5.主函数流程图

voidmain()

{

uintflag=0;

P1=0x7f;

Init_Timer0();

Init_Timer1();

display(hour,minute);

while

(1)

{

if(check_K3())//显示模式切换

{

flag++;

if(flag==3)

flag=0;

}

if(setflag==0)

{

if(flag==0)

display(hour,minute);

if(flag==1)

display(minute,second);

if(flag==2)

{

if(alarmflag==1)

{

s1=0;s2=0;s3=0;s4=0;

P0=0xbf;

Delay(500);

s2=1;s2=1;s3=1;s4=1;

}

if(alarmflag==-1)

{

display(a_hour,a_minute);

}

if(check_K4())

{

alarmflag=-alarmflag;

}

}

}

if(check_K1())

{

setflag++;

j=1;

if(setflag==1||setflag==2)

Set_timer();

}

if(a_hour==hour&&minute==a_minute&&second<2&&alarmflag==-1)//闹钟时间判定

{

for(y=0;y<=32;y++)//音乐播放

{

display(hour,minute);

if(check_K2())

{

TR1=0;

beep=1;

break;

}

if(y==32)y=0;

if(yinyue[y]==0)

{

Delay(60000);

}

else

{

TH1=music1[yinyue[y]-1];

TL1=music2[yinyue[y]-1];

beep=0;

TR1=1;

Delay(20000);

TR1=0;

beep=1;

Delay(40000);

}

}

}

}

}

五、软件实现功能

1.设置当前时间

2.设置时间时,显示屏闪烁

3.采用“时时分分”或“分分秒秒”的形式显示当前时间

4.以1s为间隔进行流水灯操作

5.开启或关闭闹钟

6.设置闹钟时间

7.到达闹钟时间后,蜂鸣器响起,显示屏闪烁闹钟时间,按下指定键后,蜂鸣器关闭

8.蜂鸣器发出指定音乐的声音

六、实验感想

经过为期两周的单片机课设,通进对两个软件学习和完成一个时钟秒表设计并进行简单调试,我学到了很多东西!

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

在我的课设时也遇到过这样或那样的问题,感谢同学们和助教的帮助,在他们的指导下,在自己的的努力下,我最终顺利的完成了实验。

在整个的课设的过程中我学习了很多的东西,使我眼界打开,感受颇深。

简单的软件与硬件学习使我了解到了人生学习的真谛,课设虽然结束了,但学习还没结束,电子的世界将为我打开,只有继续以从中获得感受作为指导思想走下去,在不断前进中去提升自己,才能真正提升自己的能力。

七、参考文献

[1]戴胜华,蒋大明,杨世武等.单片机原理与应用[M].北京:

北京交通大学出版社,2008

[2]程一风.基于单片机的电子时钟的仿真[J].无线互联科技,2013,(8):

88-88.

[3]万定勇.基于AVR单片机的异步电子时钟的制作[J].城市建设理论研究(电子版),2013,(19).

[4]胡恩.电子时钟设计[J].安徽科技,2012,

(2):

43-46.

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

当前位置:首页 > 人文社科

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

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