数字电子打铃器数电课程设计.docx

上传人:b****8 文档编号:11342146 上传时间:2023-02-28 格式:DOCX 页数:27 大小:592.07KB
下载 相关 举报
数字电子打铃器数电课程设计.docx_第1页
第1页 / 共27页
数字电子打铃器数电课程设计.docx_第2页
第2页 / 共27页
数字电子打铃器数电课程设计.docx_第3页
第3页 / 共27页
数字电子打铃器数电课程设计.docx_第4页
第4页 / 共27页
数字电子打铃器数电课程设计.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

数字电子打铃器数电课程设计.docx

《数字电子打铃器数电课程设计.docx》由会员分享,可在线阅读,更多相关《数字电子打铃器数电课程设计.docx(27页珍藏版)》请在冰豆网上搜索。

数字电子打铃器数电课程设计.docx

数字电子打铃器数电课程设计

 

重庆科技大学

 

课程设计报告

(数字电子技术)

院(系):

_电气与信息学院___专业班级:

自动化

学生姓名:

陈东武学号:

设计地点(单位)_自动控制工程实验室________

设计题目:

_数字电子打铃器_____

完成日期:

2010年7月2日

指导教师评语:

_______________________________________

____________________________________________________________________________________________________________________________________________________________________________________________________________________

成绩(五级记分制):

________________

指导教师(签字):

________________

一,课程设计的目的

本课程设计是在学完《数字电子技术基础》《数字电子技术实验》之后,集中一周时间,进行的复杂程度较高,综合性较强的设计课题的实践环节,通过该教学环节,要求达到以下目的:

1.使学生进一步掌握数字电子技术的理论知识,培养学生工程设计能力和综合分析问题,解决问题的能力;

2.使学生基本掌握常用电子电路的一般设计方法,提高电子电路的设计和实验能力;

3.熟悉并学会选用电子元器件,为以后从事生产和科研工作打下一定的基础。

4、利用51单片机做,可以比较超前的学习单片机原理及C语言编程。

二,课程设计任务及指标要求

2.1设计任务

设计并制作一个用于学校的电子打铃器

电路设计指标要求和给定的条件:

2.1.1电子表的功能:

包括计时,对时,定时的功能

A.计时:

计时显示格式中有时/分/秒。

B.对时:

可以通过按键,设定电子表的时间。

C.定时:

可以通过按键,设定电子表的“响闹”时间,具有“闹”钟的功能。

2.1.1打铃器的功能:

包括打铃,打铃设置功能

2.2设计要求

1)设计时要综合考虑实用,经济并满足性能指标要求;

2)必须独立完成设计课题;

3)合理选用元器件;

4)按时完成设计任务并提交设计报告。

三、设计框图、方案及思路

3.1、设计方案概述

3.1.1本次课程设计采用的方案有:

方案一:

利用函数信号发生器来进行脉冲信号的输出、利用74LS160、74LS90或74160N来设置十进制、六进制和二十四进制的进位输出、利用数码显示器来显示时间、利用或门、与门、非门、与非门、等电路元件进行组合、级联后设计达到要求。

实现总原理图:

 

方案二:

利用STC89C51作为主控芯片,外接数码管电路和最小系统电路,功放驱动电路构成一个智能打铃器。

3.1.2方案选择

由于方案一利用组合逻辑电路和时序逻辑电路实现起来,需要的器件和步骤很多,比较繁琐,而且时间比较仓促,所以本次设计主要是以方案二来实现,即用单片机系统控制来实现。

本打铃器系统主要有51单片机最小系统、晶振电路、电源电路、闹铃信号放大电路构成。

实现了计时、对时调整时钟,设定电子表的“响闹”时间,具有“闹”钟的功能,整点报时等功能。

利用单片机编写程序,实现定时打铃和整点报时,通过设定打铃时间,,如果相等就进行开关电铃,不等则返回。

3.2、总体设计方案

3.2.1总体设计框图

3.3、设计原理分析

3.3.1校时模式

有时数字时钟会不准,这就需要校时来调节。

第一次按下Mode键,第一个指示灯亮,进入校时设置模式,可以开始对数字时钟的小时部分校时调节,按下Up键时增加,Down键是减;第二次按下Mode键,第二个指示灯亮,进入分钟部分校时调节。

秒钟部分通过小数点闪烁显示,闪一次就是一秒。

3.3.2定时模式

第三次按下Mode键,第三个指示灯亮,进入定时打铃设置模式,可以开始对闹铃的时钟部分进行设置,按下Up键时增加,Down键是减;第四次按下Mode键,可以对闹钟分钟部分进行设置。

本次课程设计的打铃器,铃声是用C语言编写的音乐小曲《两只老虎》,使得闹铃更动感,具有人性化和美感。

另外本打铃器还添加了整点报时功能,并且打铃的次数可以

3.3.3工作模式

第五次按下Mode键,指示灯都灯不亮,可以调节闹铃模式是否开和关,当按下Up键,数码管显示为00时,为关闭闹铃状态,显示为01时,为闹铃开启状态;当时钟走到所定的闹铃时刻,闹铃就开始响,直到小曲播放完停止;第六次按下Mode键,指示灯也都不亮,数码管上显示"85.00"或"85.01",可以设置是否整点报时:

数码管上显示"85.00"表示整点报时功能关闭,01表示报时功能开启,按UP或DN键可在00或01间循环选择。

 

四、各单元电路的设计原理及调试

4.1、硬件部分

4.1.1芯片部分

本部分用AT89C51单片机芯片,复位电路,晶振电路构成单片机最小系统,通过把编写好的程序烧录到C51芯片进行控制。

 

4.1.2放大电路

由于通过控制后,从单片机端口输出的驱动信号微弱,为了更好的达到效果,就需把驱动信号放大。

这里用LM386芯片构成功放电路。

 

4.1.3数码管部分

通过数码管部分,可以显示当前时间,还可以显示闹铃、整点报时的设置状态。

本次设计的初始化为时间为0时0分。

通过调节可以对准当前时间。

 

4.1.4电源部分

通过电源部分给单片机供电,AT89C51的稳态电压为5V。

 

4.1.5按键部分

通过按键部分,可以对时钟进行设置:

调整时钟进行对时,设置闹铃,关闭或启动闹铃,设置整点报时的开和关

 

4.16总实物图

4.2软件部分

4.2.1定时器T0的检测

 

 

4.2.2T0中断服务程序框图

 

 

4.2.3闹铃打铃流程

 

五、设计、安装及调试中的体会

在调试过程中,数码管经常显示断码,有一位不能正常显示数字,经过查阅资料才了解到管显示原理:

最常用的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。

数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。

而共阳极就是将八个LED的阳极连在一起。

其原理图如下。

其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。

一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。

显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。

数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。

所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。

可以看出两个编码的各位正好相反。

共阳极组和共阴极组所送的编码是不同,刚开始我们做共阴极组,但送的是共阳极组编码,才至此调试现象。

后来输送共阴极组编码,调试成功。

其他方面的调试都没什么大问题。

本次课程设计还算顺利。

六、本次课程设计的心得体会

为期一周的数字电子技术课程设计结束了,我收获了很多。

本次课程设计虽然我没有用组合逻辑电路和时序逻辑电路来实现,但我利用这次课程设计的机会,自学了单片机,利用单片机,C语言编程来控制,实现了和用纯硬件完成的功能相同的电子打铃器,而且用软件代替了很多复杂的硬件电路。

这点让我感到很高兴,节约了硬件的花费成本。

在以后的工程实践中这点也是值得考虑的一部分。

由于时间的仓促,也就没时间在做一个纯硬件的打铃器。

但在此过程中我和其他组员也查了资料,探讨这个设计方案,并借此课程设计机会学习了一下硬件电路设计方面的知识。

当然,在此过程中我也曾遇到过硬件,软件方面的问题,但通过图书馆看书、网上查阅资料,得到了解决办法。

在本次数字电子技术课程中,老师和同学们也给了很大帮助。

在此我对老师和同学们表示衷心的感谢。

 

七、参考文献

1、C程序设计(第三版)谭浩强著,清华大学出版社,2005年7月

2、电子CAD——基于Protel99SE(高等职业教育“十一五”精品课程规划教材)及力主编,北京邮电大学出版社,2008年

3、付家才电子工程实践技术,化学出版社,2003年9月

4、高吉祥电子技术基础实验与课程设计,电子工业出版社,2005年6月

5、康华光电子技术基础模拟部分(第五版),高等教育出版社,2007年12月

6、康华光电子技术基础数字部分(第五版),高等教育出版社,2007年12月

7、例说51单片机(C语言版)人民邮电出版社,2008年4月

八、附录

附件1整机电路图

附件2程序清单

#include"reg51.h"

#include

#defineTHCO0xee

#defineTLCO0x0

#defineFREQ11059200

unsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x38};

//共阴极数码管,0-9段码表

unsignedcharData_Buffer[4]={0,0,0,0};

//四个数码管显示数值,数组变量定义

unsignedcharHour=0,Min=0,Sec=0;//实时时间

unsignedcharN_Hour=0,N_Min=0;//闹钟时间

bitN_flag=0;//1\0:

贪睡功能开启或关闭

bitBrush_flag=0;//更新数码管标志

sbitP10=P1^0;//四个数码管的位码口定义

sbitP11=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

sbitK_Mode=P2^0;//按键定义

sbitK_UP=P2^1;

sbitK_DN=P2^2;

sbitLED1=P2^3;//四个指示灯

sbitLED2=P2^4;

sbitLED3=P2^5;

sbitLED4=P2^6;

sbitPIN_MSC=P1^4;//音乐输出端口//

unsignedcharMode=0;

//MODE,0:

实时时钟;1:

修改小时;2:

修改分钟,3:

修改闹钟小时,4:

修改闹钟分钟,5:

启停闹钟;6:

整点报时

bitN_Ring=0;//启动闹铃标志,1:

启动

bitN_keyclose=0;//1:

贪睡功能开启时,有键按下,即关闭贪睡闹钟

unsignedcharZD_time=1;//整点报时

bitZD_N_flag=1;//整点报时功能开启否

unsignedcharcodemusic_table[]={//两只老虎,高4位为音乐节拍,低4位为音符

0x31,0x32,0x33,0x31,0x31,0x32,0x33,0x31,0x33,0x34,0x45,0x33,0x34,0x45,

0x25,0x16,0x25,0x14,0x33,0x31,0x25,0x16,0x25,0x14,0x33,0x31,

0x31,0x35,0x41,0x31,0x35,0x41,

0

};

unsignedcharcodemusic_l_tab[8]={0,1,2,3,4,6,8,16};//节拍延时单位

unsignedcharcodemusic_freq_tab[16]={

0xff,0xea,//0休止符

255-FREQ/24/1049/256,//1do高字节//255-FREQ/24/x/256

255-FREQ/24/1049%256,//1do低字节//256-FREQ/24/x%256

255-FREQ/24/1178/256,256-FREQ/24/1178%256,//2re

255-FREQ/24/1322/256,256-FREQ/24/1322%256,//3mi

255-FREQ/24/1400/256,256-FREQ/24/1400%256,//4fa

255-FREQ/24/1572/256,256-FREQ/24/1572%256,//5suo

255-FREQ/24/1665/256,256-FREQ/24/1665%256,//6la

255-FREQ/24/1869/256,256-FREQ/24/1869%256,//7xi

};

unsignedchartemp_TH1;

unsignedchartemp_TL1;

voidmusic_delay(unsignedcharn);//音乐节拍延时

voidmusic_play(unsignedchar*msc);//播放音乐子程序

 

voidmain()

{

TMOD=0x11;//定时器0初始化

TH0=THCO;

TL0=TLCO;

TR0=1;

ET0=1;

EA=1;

TR1=0;

ET1=1;

while

(1)

{

if(N_Ring==1)//闹铃启动

{

music_delay(10);

music_play(music_table);//播放音乐一次

}

else

{

if(ZD_N_flag==1&&ZD_time!

=0)//整点报时功能开启,且报时次数不为0

{

while(ZD_time>0)//整点响ZD_time次

{

PIN_MSC=0;

music_delay(4);

PIN_MSC=1;

music_delay(4);

ZD_time--;

}

}

}

if(Brush_flag==1)//更新数码管显示

{

Brush_flag=0;

if(Mode<=2)//实时时间

{Data_Buffer[0]=Hour/10;

Data_Buffer[1]=Hour%10;

Data_Buffer[2]=Min/10;

Data_Buffer[3]=Min%10;}

elseif(Mode<=4)//闹钟时间

{

Data_Buffer[0]=N_Hour/10;

Data_Buffer[1]=N_Hour%10;

Data_Buffer[2]=N_Min/10;

Data_Buffer[3]=N_Min%10;

}

elseif(Mode==5)

{

Data_Buffer[0]=10;//L段码序号

Data_Buffer[1]=10;

Data_Buffer[2]=0;

Data_Buffer[3]=N_flag;

}

elseif(Mode==6)

{

Data_Buffer[0]=8;//B段码序号

Data_Buffer[1]=5;//S

Data_Buffer[2]=0;

Data_Buffer[3]=ZD_N_flag;

}

}

}

}

voidtimer0()interrupt1

{

staticunsignedcharBit=0;//静态变量,退出程序后,值保留

staticunsignedcharcount=0,K_count=0;

staticunsignedchartime_n=0;

TH0=THCO;

TL0=TLCO;

count++;

if(count>=200)//秒计时,定时器定时5ms,计200次为一秒

{

count=0;

Sec++;

if(Sec>=60)

{

Sec=0;

Min++;Brush_flag=1;//更新数码管显示

if(Min>=60)//时间计时

{

Min=0;Hour++;

if(Hour>=24)Hour=0;

ZD_time=Hour;//整点响

}

if(N_Hour==Hour&&N_Min==Min)//闹钟相等

{N_Ring=1;N_keyclose=1;}

elseN_Ring=0;//贪睡功能关闭,则最多闹一分钟

if(N_keyclose&&N_flag)//贪睡功能开启,且未按键关闭

{

if(time_n==0)N_Ring=1;//第一次需开启闹钟

time_n++;

if(time_n>=5){time_n=0;}//后4分钟关闭闹钟

}

elsetime_n=0;

if(Min==30)

{

ZD_time=1;//半点响一声

}

}

}

Bit++;

if(Bit>=4)Bit=0;

P1|=0x0f;//先关位码

P0=Duan[Data_Buffer[Bit]];//开段码

if(count<100&&Bit==1)P0|=0x80;//0.5S中间小数点亮,之后灭,不断循环

switch(Bit)//送位码

{

case0:

P10=0;break;

case1:

P11=0;break;

case2:

P12=0;break;

case3:

P13=0;break;

}

if(K_Mode==0||K_UP==0||K_DN==0)//有键按下,低电平按下

{

K_count++;

if(K_count>=30)//消除抖动处理

{

if(N_flag==0&&N_Ring==1)//贪睡功能关闭,且闹铃启动

{N_Ring=0;return;}

K_count=0;

Brush_flag=1;

if(K_Mode==0)//修改Mode,

{

Mode++;

if(Mode>=7)Mode=0;

if(Mode==0){LED1=1;LED2=1;LED3=1;LED4=1;}//实时时间

elseif(Mode==1)LED1=0;//修改小时

elseif(Mode==2){LED1=1;LED2=0;}//修改分钟

elseif(Mode==3){LED2=1;LED3=0;}//修改分钟

elseif(Mode==4){LED3=1;LED4=0;}//修改分钟

}

elseif(K_UP==0)

{

if(N_Ring==1&&N_flag==1)

{N_Ring=0;N_keyclose=0;return;}//关闭闹铃

if(Mode==1)//实时时间小时加

{Hour++;if(Hour>=24)Hour=0;}

elseif(Mode==2)//实时时间分钟加

{Min++;if(Min>=60)Min=0;}

elseif(Mode==3)//闹钟时间小时加

{N_Hour++;if(N_Hour>=24)N_Hour=0;}

elseif(Mode==4)//闹钟时间分钟加

{N_Min++;if(N_Min>=60)N_Min=0;}

elseif(Mode==5)N_flag=!

N_flag;

elseif(Mode==6)ZD_N_flag=!

ZD_N_flag;

}

elseif(K_DN==0)

{

if(Mode==1)//小时减

{

if(Hour==0)Hour=23;

elseHour--;

}

elseif(Mode==2)//分钟减

{

if(Min==0)Min=59;

elseMin--;

}

elseif(Mode==3)//小时减

{

if(N_Hour==0)N_Hour=23;

elseN_Hour--;

}

elseif(Mode==4)//分钟减

{

if(N_Min==0)N_Min=59;

elseN_Min--;

}

elseif(Mode==5)N_flag=!

N_flag;

elseif(Mode==6)ZD_N_flag=!

ZD_N_flag;

}

}

}

elseK_count=0;

}

//---------------------------------------------------------------------------//

voidmusic_int_t1(void)interrupt3using1//定时中断1//

{

PIN_MSC=~PIN_MSC;

TH1=temp_TH1;

TL1=temp_TL1;

}

//---------------------------------------------------------------------------//

voidmusic_delay(unsignedcharn)//延时ms毫秒

{

//延时125*n毫秒

unsignedchari=125,j;

do{

do{

for(j=0;j<230;j++)_nop_();

}while(--i);

}while(--n);

/*inti;

for(;ms>0;ms--)

{for(i=1;i<124;i++)

{;}

}

*/

 

}

//---------------------------------------------------------------------------//

voidmusic_play(unsignedchar*msc)//音乐

{

unsignedcharmusic_long;//节拍

unsignedcharmusic_data=0;//音符数据

temp_TH1=0xff;

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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