1、数字电子打铃器数电课程设计重庆科技大学课程设计报告(数字电子技术) 院(系):_电气与信息学院 _ 专业班级: 自动化 学生姓名: 陈东武 学 号: 设计地点(单位)_ 自动控制工程实验室 _ _ _设计题目:_ 数字电子打铃器 _ _ _ 完成日期: 2010年 7 月 2 日 指导教师评语: _ _ _ 成绩(五级记分制):_ _指导教师(签字):_ _ 一,课程设计的目的本课程设计是在学完数字电子技术基础数字电子技术实验之后,集中一周时间,进行的复杂程度较高,综合性较强的设计课题的实践环节,通过该教学环节,要求达到以下目的:1. 使学生进一步掌握数字电子技术的理论知识,培养学生工程设计能
2、力和综合分析问 题,解决问题的能力;2. 使学生基本掌握常用电子电路的一般设计方法,提高电子电路的设计和实验能力; 3. 熟悉并学会选用电子元器件,为以后从事生产和科研工作打下一定的基础。4、利用51单片机做,可以比较超前的学习单片机原理及C语言编程。二,课程设计任务及指标要求2.1 设计任务设计并制作一个用于学校的电子打铃器电路设计指标要求和给定的条件:2.1.1 电子表的功能:包括计时,对时,定时的功能A. 计时: 计时显示格式中有 时/分/秒。B. 对时: 可以通过按键,设定电子表的时间。C. 定时: 可以通过按键,设定电子表的“响闹”时间,具有“闹”钟的功能。2.1.1 打铃器的功能:
3、包括打铃,打铃设置功能2.2 设计要求1) 设计时要综合考虑实用,经济并满足性能指标要求; 2) 必须独立完成设计课题;3) 合理选用元器件;4) 按时完成设计任务并提交设计报告。三、设计框图、方案及思路3.1、设计方案概述3.1.1 本次课程设计采用的方案有:方案一:利用函数信号发生器来进行脉冲信号的输出、利用74LS160、74LS90或74160N来设置十进制、六进制和二十四进制的进位输出、利用数码显示器来显示时间、利用或门、与门、非门、与非门、等电路元件进行组合、级联后设计达到要求。实现总原理图: 方案二: 利用STC89C51作为主控芯片,外接数码管电路和最小系统电路,功放驱动电路构
4、成一个智能打铃器。3.1.2 方案选择 由于方案一利用组合逻辑电路和时序逻辑电路实现起来,需要的器件和步骤很多,比较繁琐,而且时间比较仓促,所以本次设计主要是以方案二来实现,即用单片机系统控制来实现。本打铃器系统主要有51单片机最小系统、晶振电路、电源电路、闹铃信号放大电路构成。实现了计时、对时调整时钟,设定电子表的“响闹”时间,具有“闹”钟的功能,整点报时等功能。利用单片机编写程序,实现定时打铃和整点报时,通过设定打铃时间,如果相等就进行开关电铃,不等则返回。3.2、总体设计方案3.2.1总体设计框图.3、设计原理分析3.3.1 校时模式有时数字时钟会不准,这就需要校时来调节。第一次按下 M
5、ode键,第一个指示灯亮,进入校时设置模式,可以开始对数字时钟的小时部分校时调节,按下Up 键时增加,Down键是减;第二次按下 Mode键,第二个指示灯亮,进入分钟部分校时调节。秒钟部分通过小数点闪烁显示,闪一次就是一秒。3.3.2定时模式第三次按下Mode 键,第三个指示灯亮,进入定时打铃设置模式,可以开始对闹铃的时钟部分进行设置,按下Up 键时增加,Down键是减;第四次按下Mode 键,可以对闹钟分钟部分进行设置。本次课程设计的打铃器,铃声是用C语言编写的音乐小曲两只老虎,使得闹铃更动感,具有人性化和美感。另外本打铃器还添加了整点报时功能,并且打铃的次数可以3.3.3 工作模式第五次按
6、下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
7、放大电路由于通过控制后,从单片机端口输出的驱动信号微弱,为了更好的达到效果,就需把驱动信号放大。这里用LM386芯片构成功放电路。4.1.3 数码管部分通过数码管部分,可以显示当前时间,还可以显示闹铃、整点报时的设置状态。本次设计的初始化为时间为0时0分。通过调节可以对准当前时间。4.1.4 电源部分通过电源部分给单片机供电,AT89C51的稳态电压为5V。4.1.5 按键部分通过按键部分,可以对时钟进行设置:调整时钟进行对时,设置闹铃,关闭或启动闹铃,设置整点报时的开和关4.16 总实物图4.2 软件部分4.2.1定时器T0的检测4.2.2 T0中断服务程序框图 4.2.3 闹铃打铃流程五、
8、设计、安装及调试中的体会在调试过程中,数码管经常显示断码,有一位不能正常显示数字,经过查阅资料才了解到管显示原理:最常用的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。其原理图如下。其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g
9、,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。可以看出两个编码的各位正好相反。共阳极组和共阴极组所送的编码是不同,刚开始我们做共阴极组,但送的是共阳极组编码,才至此调试现象。后来输送共阴极组编码,调试成功。其他方面的调试都没什么大问题。本次课程设计还算顺利。六、本次课程设计的心得体会为期一周的数字电子技术课程设计结束了,我收获
10、了很多。本次课程设计虽然我没有用组合逻辑电路和时序逻辑电路来实现,但我利用这次课程设计的机会,自学了单片机,利用单片机,C语言编程来控制,实现了和用纯硬件完成的功能相同的电子打铃器,而且用软件代替了很多复杂的硬件电路。这点让我感到很高兴,节约了硬件的花费成本。在以后的工程实践中这点也是值得考虑的一部分。由于时间的仓促,也就没时间在做一个纯硬件的打铃器。但在此过程中我和其他组员也查了资料,探讨这个设计方案,并借此课程设计机会学习了一下硬件电路设计方面的知识。当然,在此过程中我也曾遇到过硬件,软件方面的问题,但通过图书馆看书、网上查阅资料,得到了解决办法。在本次数字电子技术课程中,老师和同学们也给
11、了很大帮助。在此我对老师和同学们表示衷心的感谢。七、参考文献1、C程序设计(第三版)谭浩强著,清华大学出版社,2005年7月2、电子CAD基于Protel 99 SE(高等职业教育“十一五”精品课程规划教材) 及力主编,北京邮电大学出版社,2008年3、付家才 电子工程实践技术,化学出版社,2003年9月4、高吉祥 电子技术基础实验与课程设计,电子工业出版社,2005年6月5、康华光 电子技术基础 模拟部分(第五版),高等教育出版社,2007年12月6、康华光 电子技术基础 数字部分(第五版),高等教育出版社,2007年12月7、例说51单片机(C语言版) 人民邮电出版社,2008年4月八、附
12、录附件1 整机电路图附件2 程序清单#include reg51.h#include #define THCO 0xee#define TLCO 0x0#define FREQ 11059200unsigned char code Duan=0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x38;/共阴极数码管,0-9段码表unsigned char Data_Buffer4=0,0,0,0;/四个数码管显示数值,数组变量定义unsigned char Hour=0,Min=0,Sec=0;/实时时间unsigned char N_Hou
13、r=0,N_Min=0;/闹钟时间bit N_flag=0;/10:贪睡功能开启或关闭bit Brush_flag=0;/更新数码管标志sbit P10=P10; /四个数码管的位码口定义sbit P11=P11;sbit P12=P12;sbit P13=P13;sbit K_Mode=P20; /按键定义sbit K_UP=P21;sbit K_DN=P22;sbit LED1=P23; /四个指示灯sbit LED2=P24;sbit LED3=P25; sbit LED4=P26;sbit PIN_MSC=P14; / 音乐输出端口 /unsigned char Mode=0; /MO
14、DE, 0:实时时钟;1:修改小时;2:修改分钟,3:修改闹钟小时,4:修改闹钟分钟,5:启停闹钟; 6:整点报时bit N_Ring=0;/启动闹铃标志,1:启动bit N_keyclose=0;/1:贪睡功能开启时,有键按下,即关闭贪睡闹钟unsigned char ZD_time=1;/整点报时bit ZD_N_flag=1;/整点报时功能开启否unsigned char code music_table= /两只老虎,高4位为音乐节拍,低4位为音符 0x31,0x32,0x33,0x31,0x31,0x32,0x33,0x31,0x33,0x34,0x45,0x33,0x34,0x45
15、, 0x25,0x16,0x25,0x14,0x33,0x31,0x25,0x16,0x25,0x14,0x33,0x31, 0x31,0x35,0x41,0x31,0x35,0x41, 0 ;unsigned char code music_l_tab8=0,1,2,3,4,6,8,16;/节拍延时单位 unsigned char code music_freq_tab16= 0xff,0xea, /0 休止符 255-FREQ/24/1049/256, /1 do 高字节 /255-FREQ/24/x/256 255-FREQ/24/1049%256, /1 do 低字节 /256-FRE
16、Q/24/x%256 255-FREQ/24/1178/256,256-FREQ/24/1178%256, /2 re 255-FREQ/24/1322/256,256-FREQ/24/1322%256, /3 mi 255-FREQ/24/1400/256,256-FREQ/24/1400%256, /4 fa 255-FREQ/24/1572/256,256-FREQ/24/1572%256, /5 suo 255-FREQ/24/1665/256,256-FREQ/24/1665%256, /6 la 255-FREQ/24/1869/256,256-FREQ/24/1869%256,
17、/7 xi ;unsigned char temp_TH1;unsigned char temp_TL1; void music_delay(unsigned char n); /音乐节拍延时void music_play(unsigned char *msc); /播放音乐子程序void main() 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); /播放音
18、乐一次 else if(ZD_N_flag=1&ZD_time!=0)/整点报时功能开启,且报时次数不为0 while(ZD_time0) /整点响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_Buffer0=Hour/10; Data_Buffer1=Hour%10; Data_Buffer2=Min/10; Data_Buffer3=Min%10; else if(Mod
19、e=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; else N_Ring=0;/贪睡功能关闭,则最多闹一分钟 if(N_keyclose&N_flag)/贪睡功能开启,且未按键关闭 if(time_n=0)N_Ring=
20、1; /第一次需开启闹钟 time_n+; if(time_n=5)time_n=0;/后4分钟关闭闹钟 else time_n=0; if(Min=30) ZD_time=1; /半点响一声 Bit+; if(Bit=4)Bit=0; P1|=0x0f; /先关位码 P0=DuanData_BufferBit; /开段码 if(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)
21、Mode=0; if(Mode=0)LED1=1;LED2=1;LED3=1;LED4=1;/实时时间 else if(Mode=1)LED1=0; /修改小时 else if(Mode=2)LED1=1;LED2=0;/修改分钟 else if(Mode=3)LED2=1;LED3=0;/修改分钟 else if(Mode=4)LED3=1;LED4=0;/修改分钟 else if(K_UP=0) if(N_Ring=1&N_flag=1) N_Ring=0;N_keyclose=0;return;/关闭闹铃 if(Mode=1) /实时时间小时加 Hour+; if(Hour=24)Hou
22、r=0; else if(Mode=2)/实时时间分钟加 Min+; if(Min=60)Min=0; else if(Mode=3)/闹钟时间小时加 N_Hour+; if(N_Hour=24)N_Hour=0; else if(Mode=4)/闹钟时间分钟加 N_Min+; if(N_Min=60)N_Min=0; else if(Mode=5) N_flag=!N_flag; else if(Mode=6) ZD_N_flag=!ZD_N_flag; else if(K_DN=0) if(Mode=1) /小时减 if(Hour=0)Hour=23; else Hour-; else i
23、f(Mode=2) /分钟减 if(Min=0)Min=59; else Min-; else if(Mode=3) /小时减 if(N_Hour=0)N_Hour=23; else N_Hour-; else if(Mode=4) /分钟减 if(N_Min=0)N_Min=59; else N_Min-; else if(Mode=5) N_flag=!N_flag; else if(Mode=6) ZD_N_flag=!ZD_N_flag; else K_count=0; /-/void music_int_t1 (void) interrupt 3 using 1 /定时中断1/ PIN_MSC=PIN_MSC; TH1=temp_TH1; TL1=temp_TL1; /-/ void music_delay(unsigned char n) /延时 ms 毫秒 /延时 125*n 毫秒 unsigned char i=125,j; do do for (j=0; j0;ms-) for(i=1;i124;i+) ; */ /-/ void music_play(unsigned char *msc) /音乐 unsigned char music_long; /节拍 unsigned char music_data=0; /音符数据 temp_TH1=0xff;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1