




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机课程设计实验报告电子音调发生器姓名:日期:2009年 6 月 29 日星期目录一)实验目的错误 !未定义书签。二)设计任务及要求错误 !未定义书签。错误 !未定义书签。三)工作原理及设计思路四)实现功能设计错误 !未定义书签。六)电路设计错误 !未定义书签。调试错误 !未定义书签。实验体会错误 !未定义书签。一)实验目的1了解计算机发声原理。2 熟悉定时器和键盘扫描电路的工作原理及编程方法。(二)设计任务及要求利用实验平台上的开关k0-k7和蜂鸣器设计电子音调发生器,要求:1 利用实验平台上开关k0-k7进行音调选择,即拨动不同的开关产生不同的 音调,依次拨动K0K7蜂鸣器发出12345
2、67i八个音调。2 .编写2支歌曲,并可进行选择播放。作原理及设计思路音节由不同频率的方波产生,音节与频率的关系如表1所示。要产生音频方 波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的 时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的1/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在 ZKS-03实验仪上,产生方波的I/O脚选用,通过跳线选择器JP1将单片机的与 蜂鸣器的驱动电路相连。这样输出不同频率的方波,蜂鸣器便会发出不同的声音。 另外,音乐的节拍是由延时实现的,如果1拍为秒,1/4拍是秒。只要设定延时时间,就可求得
3、节拍的时间。延时作为基本延时时间,节拍值只能是它的整数倍, 每个音节相应的定时器初值 X可按下法计算:(1/2) *(1/f)=(12/fose)*(216-x)即 x=216-(fose/24f)其中f:音调频率,当晶振fose=时,音节“ 1”相应的定时器初值为X,则可得 x=63777D=F921H其它的可同样求得。表1音调频率(Hz)X(HEX)1262F9212294F9E13330FA8C4349FAD85392FB686440FBE97494FC5Bi523FC8F(四)实现功能设计实现两个主要功能:电子琴与音乐播放;一个辅助功能:在液晶上显示相关 信息。1、电子琴:4*4的矩阵
4、16个按键,按键0实现两个功能的切换,其余按键分别 发出音调低音5、6、7,中音1、2、3、4、5、6、7,高音1、2、3、4、5。发音的同时在液晶显示屏上显示出对应的音调。2、音乐播放:按键0实现两个功能的切换,按键1实现播放类型选择(单曲循 环播放、所有循环播放),其余按键分别对应一首歌。目前已经有 9首歌。 播放的同时,在液晶上显示出歌名。(五)软件设计根据要实现的功能,流程图如下:#in elude #in elude #defi ne #defi ne #defi ne #defi nenop _nop_() uehar un sig ned char uint un sig ned
5、 intP AI_BASE 15#define#define#defineMUSIC_NUM 9SCAN_CYCLE 500BEEP P3_3/* 液晶显示相关变量 */ sbit LCD_RS = P 2八7;sbit LCD_RW = P 2八6;sbit LCD_EN = P 2八5;static uchar th0_f; 0c0f0c0F0F Record();.);break; case 2: disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1; lcd_init(); lcd_s
6、tring( 6 Record();.);break;case 3:disptime_flag=0;th0_f=c_musicFreqkey-1/256; tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init();lcd_string(7 Record();.);break;case 5:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init(); lcd_string( 1 ); Record();break;case 5:disptime_
7、flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init(); lcd_string( 2 ); Record();break;case 6:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init(); lcd_string( 3 ); Record();break;case 7:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_
8、musicFreqkey-1%256;TR0 = 1;lcd_init(); lcd_string( 4 ); Record();break;case #:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init(); lcd_string( 5 ); Record();break;case 9: disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init(); lc
9、d_string( 6 ); Record();break;case 10:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1;lcd_init(); lcd_string( 7 ); Record();break;case 11:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1; lcd_init(); lcd_string( 1);Record();break;case #:disp
10、time_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1; lcd_init(); lcd_string( 2);Record();break;case 13:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0_f=c_musicFreqkey-1%256;TR0 = 1; lcd_init(); lcd_string( 3);Record();break;case 14:disptime_flag=0;th0_f=c_musicFreqkey-1/256;tl0
11、_f=c_musicFreqkey-1%256;TR0 = 1; lcd_init(); lcd_string( 4);Record();break;case 15: disptime_flag=0;P2_4=0; lcd_init();Record_flag+;if(Record_flag=1)Record_counter=0;Record_time=0; lcd_string( Record );else if(Record_flag=2)lcd_init();lcd_string( Record play );Record_music+Record_counter=0x00;Music_
12、flag=1;Rplay_flag=1;TH0=0;TL0=0;TR0=0;while(key=keyscan()!=15);else if (Record_flag=3)lcd_init();lcd_string( Electone );Music_flag=0;Rplay_flag=0;Record_flag=0;Freq_flag=1;break;case 16:P3_3=0;TR0=0;Record();break;if(key=0) P3_3=0;break;void Music(void)P2_4=0;Freq_flag=1;lcd_init();disptime_flag=1;l
13、cd_string( Music);Music_flag=0;key=16;delay(10);s_musicCounter=10; s_tableCounter=0;TR0=0;P3_3=0;while(1) if(s_musicCounter=1)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving( Happy Birthday ); / lcd_string( Happy Birthday ); else if(s_musicCounter=2)Music_flag=1; disptime_flag=0;lcd_init();lcd_mo
14、ving( Two Butterflies );else if(s_musicCounter=3) Music_flag=1; disptime_flag=0; lcd_init(); lcd_moving(Mouse Loves Rice );else if(s_musicCounter=4)Music_flag=1; disptime_flag=0;lcd_init();lcd_moving( Awakening );else if(s_musicCounter=5) Music_flag=1; disptime_flag=0;lcd_init(); lcd_moving( dae jan
15、g geum );else if(s_musicCounter=6) Music_flag=1; disptime_flag=0; lcd_init(); lcd_moving(walking on Road of Life );else if(s_musicCounter=7) Music_flag=1; disptime_flag=0; lcd_init();lcd_moving(Most romantic thing);else if(s_musicCounter=8) Music_flag=1; disptime_flag=0;lcd_init(); lcd_moving(After
16、1000 years);else if(s_musicCounter=9)Music_flag=1;disptime_flag=0;lcd_init();lcd_moving(Lonely life);else if(key10) TR0=0; P3_3=0; while(key2=(key=keyscan() nop;TR0=1;key2=key;if(key=0)P3_3=0;Freq_flag=0;Music_flag=0;K0_flag=0;TR0=0;break;else if(key=1)musicAutoFlag=musicAutoFlag; if(musicAutoFlag=1
17、) P2_4=1; else P2_4=0;else if(key=15) disptime();else if(key9&key=paiNum) paiCounter=0;if(Rplay_flag=2) if(TR0=0) TR0=1;s_musicCounter=0x20;switch(s_musicCounter)/*根据当前音乐编号查找下一个音乐标识码 */case 0x01:ucharTemp=c_music1s_tableCounter+;break; case 0x02:ucharTemp=c_music2s_tableCounter+;break; case 0x03:uch
18、arTemp=c_music3s_tableCounter+; break; case 0x04:ucharTemp=c_music4s_tableCounter+;break; case 0x05:ucharTemp=c_music5s_tableCounter+; break; case 0x06:ucharTemp=c_music6s_tableCounter+; break; case 0x07:ucharTemp=c_music7s_tableCounter+; break; case 0x08:ucharTemp=c_music8s_tableCounter+; break; ca
19、se 0x09:ucharTemp=c_music9s_tableCounter+; break;case 0x20:ucharTemp=Record_musics_tableCounter+;break;case 0x00:ucharTemp=c_music0s_tableCounter+; break; default:break;如果查到 0x00 则表示/* if(ucharTemp=0x00) 本首歌曲结束 */Freq_flag=0; paiNum=4*PAI_BASE;4*PAI_BASE*10ms=600m再继续播放 */P3_3=0;s_tableCounter=0;/*/*
20、/*停止发声 */* 本 首歌曲 结束 后停顿把喇叭关掉 */if(musicAutoFlag=1)功能打开则跳到下一首歌曲 */s_musicCounter+;if(s_musicCounter(uchar)MUSIC_NUM)s_musicCounter=0x01;如果歌曲自动循环播放else0x00 则表示是音乐标识码 */ paiNum=(ucharTemp&0x0f)*PAI_BASE; 位为节拍码 */*/*如果查到非音乐标识码的低四ucharTemp1=(ucharTemp&0xf0)4;四位为音频码 */if(ucharTemp1=0)零则表示不发音 */P3_3=0;Freq
21、_flag=0;temp=65536-SCAN_CYCLE;TH0temp=temp8;当于右移 8 位*/*/*音乐标识码的高如果音频码为/*temp/256TL0temp=temp-(temp8)8;/*temp/256当于右移 8 位*/*temp%256*/*如果音频码不为TL0temp=temp-(temp8)8);TH0=TH0temp;TL0=TL0temp;th0_f=TH0;/*temp%256*/*保存新的代表音频的 Timer0 周期值 */tl0_f=TL0;Freq_flag=1;程序说明: 在此程序中, 程序大部分时间在扫描 4*4 矩阵键盘,通过线反转法读入数据,
22、判断按键; 若实现的是电子琴功能,则用 1602显示按键对应的谱,若实现的是音乐播放功 能,则显示对应的歌名;音频产生由T0、 T1 两个定时器来完成, T0 实现 I/O/口的反转,产生音频, T1 实现延时,即音乐的节拍。主要分为三大块:1、键盘扫描; 2、液晶显示; 3、音频产生。本电路由89S52、LCD1602 16个按键、复位电路、12M晶振、7805、9V电 池等组成。完成单片机的基本连接即晶振及复位电路后,用 P1 口 8个口连接并 控制4*4,即16个按键构成的键盘,由P0 口以及、控制液晶显示器LCD1602 用输出不同音调的频率控制蜂鸣器发音。蜂鸣器电路:晶振及复位电路开
23、关连接电路:LCD1602电路连接:七)调试此次实验的的硬件电路很简单,外围电路只有一个 4*4 矩阵,复位电路,晶 振电路,蜂鸣器。主要是软件的编写与调试。在没加液晶显示前:问题一:程序写好,烧录在单片机中,单片机没有反应,经检查硬件电路没 有问题,最后发现是单片机坏了,换了一块单片机就可以用了。问题二:当使用电子琴功能的时候,按键不放手,会出现嘟嘟声声音不 连续改动程序,将放开按键设置为关定时器,这样按键不放声音就连续。问题三:功能无法切换。功能标志设定为 bit 型,判断功能的时候用 case 语句,运行时不知什么原因无法判别,将 case 语句改用 if 语句程序可以判别, 切换功能可
24、以实现。问题四:在播放音频的空隙时间有一个固定的音频杂音。检查电路,蜂鸣器 使用NPN管来驱动,在没有音频的时候若输出为高电平, 则三极管饱和导通,蜂 鸣器发声,在无需音频的地方加上 P3_3=0语句,可以消除杂音。效果明显。问题五:音乐循环播放功能无法切换。程序 if 条件出错,无法切换,改后 切换功能可以实现。加上液晶显示后: 问题六:按键不灵敏。重新写程序,在延时程序中加入键盘扫描,按键灵敏 且不影响其他功能的实现。八)实验体会硬件电路需要动脑子的地方少,键盘可以买到,只要插到P1 口就行,但 是为了锻炼一下自己的动手能力,自己买了 16个按键,一个一个焊上去,焊出 4*4 矩阵,这样对键盘也有根深层次的了解。每次写程序都有很多收获, 每次发现问题都会点燃我的激情, 体验解决问题 的快乐。此次课程设计也可以当作一个小项目来完成, 明确的自己要做的功能, 明确 的目的,就来整体规划,哪个端口怎么用,定时器怎么来分,然后就是一步一步 来实现需要的功能, 在写程序的过程中大脑中呈现出总的轮廓, 并分块来写, 这 样就不会乱了。在我看来,要完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 潍坊医学院《汽车液压系统与装置》2023-2024学年第二学期期末试卷
- 松原职业技术学院《循环流化床机组运行与事故分析》2023-2024学年第一学期期末试卷
- 山西中医药大学《销售管理》2023-2024学年第二学期期末试卷
- 石家庄理工职业学院《工程法学》2023-2024学年第二学期期末试卷
- 辽宁省本溪市本溪满族自治县2024-2025学年三下数学期末质量跟踪监视模拟试题含解析
- 南京邮电大学《西南联大历史文化》2023-2024学年第二学期期末试卷
- 疫苗接种在减少传染病跨境传播中的作用考核试卷
- 皮革制品的塑料替代品与环境友好材料考核试卷
- 仁果类果树种植园气候变化应对考核试卷
- 疗养院护理临床教学效果评估考核试卷
- 物业经理面试:问题和答案大全
- 2023年高考生物全国通用易错题13致死类的遗传题(解析版)
- 余华读书分享名著导读《文城》
- 中建项目装饰装修工程施工方案
- 大学生心理健康教育(第3版)PPT完整全套教学课件
- 2021年上海市中考二模化学试卷汇编多选题
- GB/T 18323-2022滑动轴承烧结轴套尺寸和公差
- 新概念二册课文电子版
- 高速公路单位、分部 分项工程划分
- 危险废物清单
- ISO9001管理体系实战案例 质量目标
评论
0/150
提交评论