电子线路课程设计-音乐倒数计数器.doc_第1页
电子线路课程设计-音乐倒数计数器.doc_第2页
电子线路课程设计-音乐倒数计数器.doc_第3页
电子线路课程设计-音乐倒数计数器.doc_第4页
电子线路课程设计-音乐倒数计数器.doc_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

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

文档简介

信息工程学院课程设计(论文)湖北民族学院信息工程学院课程设计报告书题目: 音乐倒数计数器 课 程:电子线路课程设计专 业:电子信息科学与技术班 级:0309409 学 号:030940924 学生姓名:郑黎指导教师: 杨庆 2011年 12 月 26 日 信息工程学院课程设计任务书学 号030940924学生姓名郑黎专业(班级)电子信息科学与技术设计题目音乐倒数计数器设计技术参数定时闹钟的基本功能如下。l 字符型lcd(162)显示器。l 显示格式为“time 分分:秒秒”。用4个按键操作来设置当前想要倒计数的时间。一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。程序执行后工作指示灯led闪动,表示程序开始执行,按下操作键k1k4动作如下。l k1可调整倒计数的时间160分钟。l k2设置倒计数的时间为5分钟,显示“0500”。l k3设置倒计数的时间为10分钟,显示“1000”。l k4设置倒计数的时间为20分钟,显示“2000”。复位后lcd的画面应能显示倒计时的分钟和秒数,此时按k1键则在lcd上显示出设置画面。此时,若: a. 按操作键k2增加倒计数的时间1分钟。 b. 按操作键k3减少倒计数的时间1分钟。 c. 按操作键k4设置完成。设计要求利用at89c51单片机结合字符型lcd显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。参考资料1谭浩强.c程序设计m.北京:清华大学出版社20082郭天祥.51单片机c语言教程m.北京:电子工业出版社20113张毅刚.单片机原理及应用m.北京:高等教育出版社20114康华光.电子技术基础(模拟部分)m.北京:高等教育出版社2009 2011年12 月26 日学生姓名: 郑黎 学号: 030940924 专业(班级): 0309409 课程设计题目: 音乐倒数计数器 成绩: 指导教师: 年 月 日信息工程系课程设计成绩评定表摘 要本设计是基于at89c52单片机的音乐倒数计数器,根据单片机技术原理,通过硬件电路设计与软件设计,制作出的音乐倒数计数器能稳定运行,并能正常播放音乐。该设计硬件部分主要包括按键电路、复位电路、lcd显示电路以及蜂鸣器组成,其中k1键作为第二功能键加入外部中断0,用以切换时间选择模式。计数值为零时,通过定时器t1调节音频,是蜂鸣器发出不同的音调。本设计利用keil uvision4作为编程软件进行源程序设计及调试,同时使用proteus7.7进行硬件电路的搭建仿真。关键字:单片机 音乐 计数器 proteus 蜂鸣器 目 录1 任务提出与方案论证71.1 采用555定时器71.2 采用单片机控制.72 总体设计82.1 系统硬件设计82.2 系统软件设计83 详细设计及仿真93.1硬件电路详细设计93.2软件详细设计123.3 系统仿真.144 总结16参考文献17附录.181 任务提出与方案论证21世纪电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,而作为创新的倒数计数器更是在普通家庭中广泛应用。1.1 采用555定时器555定时器是一种模拟和数字功能相结合的中规模集成器件。555定时器的功能主要由两个电压比较器决定。两个电压比较器的输出电压控制rs触发器和放电管的状态。在电源与地之间加上电压,当5脚悬空时,则电压比较器a1的反相输入端的电压为2vcc/3,a2的同相输入端的电压为vcc/3.若触发输入端tr的电压小于vcc/3,则比较器a2的输出为1,可使rs触发器置1,使输出端out=1.如果阈值输入端th的电压大于2vcc/3,同时tr端的电压大于vcc/3,则a1的输出为1,a2的输出为0,可将rs触发器置0,使输出为0电平。本方案由于555定时器回差太小、且不能调整、功能上有所欠缺等缺点不宜选择。1.2 采用单片机控制单片机具有性能高、速度快、体积小、价格低、稳定可靠、应用广泛、通用性强等突出优点。它在硬件结构、指令系统、i/o端口、功率消耗及可靠性等方面均有其独特之处,其最显著的特点之一就是具有非常有效的控制功能。而led显示器具有体积小、重量轻、工作电压低、功耗极低、稳定可靠、成本低、控制驱动方便、接口简单易用、模块化结构紧凑等特点,同时外接的继电器可以完成对大电流的控制,功能更加全面。这个方案价格便宜,编程简单,专用性强,功能可随着单片机的选择而调整,比较适合本设计综上所述,方案1.2有很大的优势,可以利用单片机和lcd显示器来实现定时倒数,通过蜂鸣器来发出音乐。2 总体设计2.1 系统硬件设计以at89c52单片机作为主控制器,外加按键电路、复位电路、lcd显示电路和蜂鸣器构成。其系统框图如下:at89c52按键电路lcd显示蜂鸣器复位电路2.2 系统软件设计本设计将各个功能部分分别封装为函数,故在主函数只需进行相关的初始化即可。在主函数的大循环中设置播放音乐的标志位flag_m,在while(1)不断检测flag_m是否为真,若为真,表示定时时间已到,播放预先设置的音乐-千年之恋。其主函数框图如下:开始相关的初始化设置nflag= =1y播放音乐3 详细设计及仿真在本设计中利用了单片机的两个外部中断,以及定时器t0/t1,使得电路在运行的过程中更加灵敏及稳定。软件的设计上将各功能封装成函数,便于调用和调试。最后用proteus7.7搭建电路仿真,系统能正常运行。3.1硬件电路详细设计3.1.1 at89c52单片机at89c52是一个低电压,高性能cmos 8位单片机,片内含8k bytes的可反复擦写的flash只读程序存储器和256 bytes的随机存取数据存储器(ram),器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准mcs-51指令系统,片内置通用8位中央处理器和flash存储单元,at89c52单片机在电子行业中有着广泛的应用。如图1所示:图13.1.2 lcd1602液晶显示电路设计与原理工业字符型液晶,能够同时显示16x02即32个字符(16列2行)。1602字符型lcd通常有14条引脚线或16条引脚线的lcd,多出来的2条线是背光电源。vcc(15脚)和地线gnd(16脚),其控制原理与14脚的lcd完全一样。1602液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a”。proteus7.7中的1602液晶只有14个引脚,少了背光电源的两根引脚,完全兼容。本设计中,液晶的数据口与单片机的p0口相连。如图2所示:图23.1.3 复位电路当mcs -5l系列单片机的复位引脚rst(全称reset)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果rst持续为高电平,单片机就处于循环复位状态。上电复位要求接通电源后,自动实现复位操作。当单片机已在运行当中时,按下复位键后松开,也能使rst为一段时间的高电平,从而实现上电或开关复位的操作。如图3所示:图33.1.4 按键电路题目中要求通过按键来设置定时的时间,并且能为160间的任意时间,根据要求以k1作为第二功能选择位,来更改时间设置的模式。不按k1时,按下k2、k3、k4分别为定时5分钟,10分钟,20分钟;按下k1后,初始为30分钟(为方便上下调节选择30为初始值),然后再按k2为加1分钟,按k3为减1分钟,按k4为设置完成。为了系统能更加灵敏的工作,加按键均加入了中断若有按键按下,系统能立即反应,并执行相应中断服务子程序。k1连接外部中断0,k2,k3,k4通过一个三输入与门连接至外部中断1,并分别连接pi.0,pi.1,pi.2口,供中断服务子程序查询。如图4所示:图43.1.5 蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 ;蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“h”或“ha”表示。单片机驱动他激蜂鸣器的方式有两种:一种是pwm 输出口直接驱动,另一种是利用i/o 定时翻转电平产生驱动波形对蜂鸣器进行驱动。本设计选择利用i/o 定时翻转电平产生驱动波形对蜂鸣器进行驱动。利用i/o 定时翻转电平来产生驱动波形的方式必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。比如为2500hz 的蜂鸣器的驱动,可以知道周期为400s,这样只需要驱动蜂鸣器的i/o 口每200s 翻转一次电平就可以产生一个频率为2500hz,占空比为1/2duty 的方波,再通过三极管放大就可以驱动这个蜂鸣器了。由于蜂鸣器的工作电流一般比较大,以致于单片机的i/o 口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。如图5所示:图53.2 软件详细设计在本程序中设置了两个标志位flag_m,flag,分别作为音乐播放标志位和时间设置模式选择标志位。若flag=1,再由外部触发检测k2k4的状态,if(k2=0) time_m+; lcd_display(time_m,0); if(k3=0) time_m-;lcd_display(time_m,0); if(k4=0) flag=0; lcd_display(time_m,0);time_m为所定时的时间若flag=0,if(k2=0)temp=5;lcd_display(5,0);if(k3=0)temp=10;lcd_display(10,0);if(k4=0)temp=20;lcd_display(20,0);time_m=temp;本程序设计关键以及难点在于实现音乐的播放,以下详细解释用程序实现播放音乐的过程。3.2.1 音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。3.2.2音调的确定不同音高的乐音是用c、d、e、f、g、a、b来表示,这7个字母就是音乐的音名,它们一般依次唱成do、re、mi、fa、so、la、si,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即tone。把c、d、e、f、g、a、b这一组音的距离分成12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐器上,cd、de、fg、ga、ab两音之间隔着一个黑键,他们之间的距离就是全音;ef、bc两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上号或者b号的叫变化音。叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。例如高音do的频率(1046hz)刚好是中音do的频率(523hz)的一倍,中音do的频率(523hz)刚好是低音do频率(266 hz)的一倍;同样的,高音re的频率(1175hz)刚好是中音re的频率(587hz)的一倍,中音re的频率(587hz)刚好是低音re频率(294 hz)的一倍。1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的i/o反相,然后重复计时此半周期时间再对i/o反相,就可在i/o脚上得到此频率的脉冲。2)利用at89c51的内部定时器使其工作在计数器模式1下,改变计数值th1及tl1以产生不同频率的方法。此外结束符和休止符可以分别用代码00h和ffh来表示,若查表结果为00h,则表示曲子终了;若查表结果为ffh,则产生相应的停顿效果。3)例如频率为523hz,其周期t=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将i/o反相,就可得到中音do(523hz)。计数脉冲值与频率的关系公式如下:n=fi2frn:计算值;fi:内部计时一次为1us,故其频率为1mhz;4) 其计数值的求法如下:t=65536-n=65536-fi2fr例如:设k=65536,f=1000000=fi=1mhz,球低音do(261hz)。中音do(523hz)。高音的do(1046hz)的计算值t=65536-n=65536-fi2fr=65536-10000002fr=65536-500000/fr低音do的t=65536-500000/262=63627低音do的t=65536-500000/523=64580低音do的t=65536-500000/1047=650593.2.3节拍的确定若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。3.2.4 编码do re mi fa so la si分别编码为17,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。表4.4 简谱对应的简谱码、t值、节拍数简谱发音简谱码t值节拍码节拍数5低音so16426011/4拍6低音la26440022/4拍7低音ti36452433/4拍1中音do46458041拍2中音re56468451又1/4拍3中音mi66477761又1/2拍4中音fa76482082拍5中音so864898a2又1/2拍6中音la964968c3拍7中音tia65030f3又3/4拍1高音dob650582高音rec651103高音mid651574高音fae651785高音sof652173.3 系统仿真根据前面的硬件、软件的设计,在proteus7.7上进行仿真试验,结果显示系统一切运行正常。系统硬件设计的总电路图如下:单片机上电复位后,显示如下:(在这里的1602液晶上加入了自己的学号和名字)不按k1,直接按k2时,显示:按下k1后,再按k2,显示: 按下复位按键后,显示: 系统复位了当计数值为0时,蜂鸣器也能放出音乐。经测试,本设计完全能够正常工作,完成了各项要求。4 总结课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节。在本次设计中遇到了很多问题,特别是程序细节上的问题,但只要自己能沉下心来认真、细心、耐心的去调试程序,最后所有的问题便一个一个均迎刃而解,这也让我认识到,在项目设计的过程中一定要经的住问题的考验,只要我们认真仔细的排查问题的原因,最终还是能够解决的。总之,这次设计从软件编写、调试到软硬件联机调试,我倾注了大量的时间和心血,当然也收获了很多。在此认识到,要学好硬件或软件,一定要踏实下来做项目,这样我们的收获才是最大的,最直接的。参考文献1谭浩强.c程序设计m.北京:清华大学出版社20082郭天祥.51单片机c语言教程m.北京:电子工业出版社20113张毅刚.单片机原理及应用m.北京:高等教育出版社20114康华光.电子技术基础(模拟部分)m.北京:高等教育出版社2009附录源程序代码:#include#define uchar unsigned char#define uint unsigned int/特殊功能位声明sbit k2=p10;sbit k3=p11;sbit k4=p12;sbit lrs=p13;sbit len=p14;sbit fm=p15;/全局变量声明uchar flag,flag_m;uchar time_m,time_s;uchar num;uchar time_l,time_h;/函数声明void init_break();void init_t0();void init_t1();void init_lcd();void lcd_w_cmd(uchar);void lcd_w_data(uchar);void lcd_display(uchar,uchar);void flag_0();void flag_1();void delay(uint);void delay16(uint);void play_music();/uchar code table_name=zheng li;/-简谱-/编程规则:字节高位是简谱,低位是持续时间,/代表多少个十六分音符/1-7代表中央c调,8-e代表高八度,0代表停顿/最后的0是结束标志uchar code qnzl= /千年之恋0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xa8,0x08,/前奏0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/竹林的灯火 到过的沙漠 0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,/七色的国度 不断飘逸风中 0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,/有一种神秘 灰色的旋涡 0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,/将我卷入了迷雾中 0x63,0xa1,0xa2,0x62,0x92,0x82,0x52,/看不清的双手 0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7c,0x02,/一朵花传来谁经过的温柔 0x61,0x71,0x82,0x71,0x62,0xa2,0x71,0x76,/穿越千年的伤痛 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,/只为求一个结果 0x61,0x71,0x82,0x71,0x62,0xa3,0x73,0x62,0x53,/你留下的轮廓 指引我 0x42,0x63,0x83,0x83,0x91,0x91,/黑夜中不寂寞 0x61,0x71,0x82,0x71,0x62,0x0a2,0x71,0x76,/穿越千年的哀愁 0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,/是你在尽头等我 0x61,0x71,0x82,0x71,0x62,0xa3,0x73,0x62,0x53,/最美丽的感动 会值得 0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff/结束标志/用一生守候;/-简谱音调对应的定时器初值-/适合11.0592m的晶振uchar code t1_cuzhi= 0xff,0xff,/占位 0xfc,0x8e,/中央c调1-7 0xfc,0xed, 0xfd,0x43, 0xfd,0x6a, 0xfd,0xb3, 0xfd,0xf3, 0xfe,0x2d, 0xfe,0x47,/高八度1-7 0xfe,0x76, 0xfe,0xa1, 0xfe,0xc7, 0xfe,0xd9, 0xfe,0xf9, 0xff,0x16 ;/*主函数*/void main()init_break();init_t0();init_t1();init_lcd();lcd_display(0,0);/play_music();while(1)if(flag_m=1)play_music();/*外部中断*/void init_break() /外部中断初始化ea=1;ex0=1;ex1=1;it0=1;it1=1;void extern0() interrupt 0flag=1;time_m=30;/设置初始化为30,便于上下调节lcd_display(time_m,0);void extern1() interrupt 2if(flag=1)flag_1();elseflag_0();void flag_0()uchar temp;if(k2=0) temp=5;lcd_display(5,0);if(k3=0)temp=10;lcd_display(10,0);if(k4=0)temp=20;lcd_display(20,0);time_m=temp;tr0=1;void flag_1()if(k2=0)time_m+;/lcd_set_dis(time_m);lcd_display(time_m,0);if(k3=0)time_m-;/lcd_set_dis(time_m); lcd_display(time_m,0);if(k4=0)delay(10);if(k4=0)flag=0;while(!k4); /松手检测lcd_w_cmd(0x0c);/开显示,关光标 lcd_display(time_m,0);tr0=1;/*倒数定时器t0*/void init_t0()th0=(65536-50000)/256;/50ms溢出tl0=(65536-50000)%256;et0=1;tmod=0x11;/tr0=1;void timer0_t0() interrupt 1th0=(65536-50000)/256;/50ms溢出tl0=(65536-50000)%256;num+;if(num=20)num=0;if(time_s=0)time_s=59;time_m-;elsetime_s-;if(time_m=0&time_s=0)tr0=0;lcd_display(time_m,time_s);flag_m=1;lcd_display(time_m,time_s);/*lcd1602*/void init_lcd()len=0;lcd_w_cmd(0x38);lcd_w_cmd(0x0c); /开显示,不显示光标lcd_w_cmd(0x06); /写一个字符后地址指针加1lcd_w_cmd(0x01); /显示清0,数据指针清0lcd_w_cmd(0x80); /设置数据地址指针void lcd_w_cmd(uchar cmd) /液晶写命令lrs=0;p0=cmd;delay(5);len=1;delay(5);len=0;void lcd_w_data(uchar dat) /液晶写数据lrs=1;p0=dat;

温馨提示

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

评论

0/150

提交评论