xx工程学院-单片机课程设计报告.doc_第1页
xx工程学院-单片机课程设计报告.doc_第2页
xx工程学院-单片机课程设计报告.doc_第3页
xx工程学院-单片机课程设计报告.doc_第4页
xx工程学院-单片机课程设计报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

目 录一、题目二、设计任务(要求)三、总体方案四、原理框图五、系统模块详细设计与调试六、设计总结七、源程序及硬件(PCB、)电路图、实物图一、 题目 电子琴设计(液晶)二、 设计任务(要求)1. 设计一个9键的键盘,并将其中的7个键设计成7个音调。2. 能弹奏想要表达的音乐。3. 该电子琴包含12首示例歌曲或者音乐,由特定的功能键进行控制:DEMO。4. 另外设置两个功能键。功能键1:使电子琴自动从音调1播放到音调7,达到顺序播放的效果。功能键2:使电子琴自动从音调7播放到音调1,达到倒序播放的效果。三、 总体方案 (一)、本次课程设计的课题是7音键电子琴的设计,要想完成课程设计的要求,必须要达到的要求如下:1、软件编写正确且具有较高的实时性(反应时间小于0.1秒)。2、7个音调发音准确并有明显区别。3、硬件电路设计正确且线路板焊点饱满、圆润,无虚焊等现象。本次设计提出了用AT89S52单片机为核心控制元件,设计一个简易的电子琴. 本方案以AT89S52单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块在主控模块上设有17个按键和扬声器.根据使用者的操作随意弹奏想要表达的音乐。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。 AT89S52具有高速度、低电压、低功耗、且可靠性和成本都比较低的特点。因此本次毕业设计采用AT89S52单片机作为整个电路核心控制器件。对于本交通控制系统使用一片AT89S52系列的单片机,不需要外扩展存储器,就能实现显示、预制状态、动态调节的功能,因而整体结构简单。AT89S52的运用能够使设计的7音电子琴系统满足于实用。设计电路时运用AT89S52单片机的接口来实现各种输入、输出功能。P0、P1口用来作输出口,向液晶电路输出信号;P2口实现一个矩阵键盘的功能;P3.6控制声控电路信号输出口。同时设计了一个直流稳压电路增加电路的适应性,增加了电路的适用性,使整个系统更加紧凑,工作十分稳定。音乐频率一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。单片机11.0592MHZ晶振,高中低音符与单片机计数T0相关的计数值如下表所示 : 音 符 频 率 简码值(T值)低3 M33064021低4 FA349 64103低5 SO392 64260低6 LA44064400低7 SI49464524中 1 DO52364580 中 2 RE58764684中 3 M65964777中 4 FA69864820中 5 SO78464898中 6 LA88064968中 7 SI98865030高 1 DO106465058高 2 RE117565110高 3 M131865157高 4 FA139765178(二)、根据硬件电路进行软件设计 1、完成相应程序初始化,其中包括单片机的初始化和液晶显示的初始化。2、编写完成键盘扫描功能的主要程序void main(其中包含对定时器0/计数器0的初始化)。3、 按题目要求,设置三个功能键SB(顺序播放控制键)、DB(倒序播放控制键)、DEMO(自动演示歌曲控制键),编写相关部分的子程序sb(顺序播放子程序)、db(倒序播放子程序)和music_1(歌曲1子程序)delay(延时子程序)和time() interrupt 1(定时器1中断子程序),并在主程序适当位置调用。4、 实现主要功能的程序编写好以后,需要通过液晶将音调数目显示出来。通过对液晶相关资料的了解,编写液晶显示子程序DISPLAY(其中含显示数字部分CCW_PR、显示符号部分CCW_PR1),并在主程序相应部分进行调用。(其中还包含用PCToLCD2002软件生成相应显示数字和汉字的字模表CCTAB)5、 本次课程设计的延时子程序所控制的延时时间,我用了软件延时实现其功能,其中的参数我用软件 单片机小精灵V1.3 进行了延时的精确计算其效果和硬件延时同样具有高精度。6、 液晶显示功能为,按下音调键,将显示音调值或者为键值并在屏幕上一直显示圣殿指环四个汉字。 四、 原理框图(程序流程图) 不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。然后再检测按键释放成不成功,也就是平时所说的松手检测,不成功就不断再检测,成功就返回按键检测。 T0初始化并允许中断和液晶显示初始化开始键盘扫描调用子程序是否有按键按下(去抖动)按键释放NY继续调用子程序完成Y五、 系统模块详细设计与调试 三个功能模块简介1、 键盘扫描模块由电路原理图可知,本课程设计的4*4矩阵键盘由单片机的P2口控制,且由P2口的高位(P24-P27)控制列,低位(P20-P23)控制行。本矩阵键盘由列输入,行读入键值,所以决定了键盘的扫描方式为列扫描方式。P2=0xef; /第一列扫描,并给P2口赋初值temp=P2; /读入P2口的键值temp=temp&0x0f;if(temp!=0x0f) delay(5); temp=P2; temp=temp&0x0f; if(temp!=0x0f) temp=P2; temp=temp&0x0f; switch(temp) case 0x0e:key=0;break; case 0x0d:key=1;break; case 0x0b:key=2;break; case 0x07:key=3;break; 2、 液晶显示模块 编写程序时,通过PCToLCD2002软件生成相应显示数字和汉字的字模表CCTAB,调用指导老师的显示汉字中的子程序CCW_PR及CCW_PR1将数字用汉字的大小显示,符号用汉字一半的大小显示。3、 音调控制模块该模块是给计数器装入计数初值然后开计数器,开始计数产生溢出中断,调用中断子程序输出高低电平(方波的产生),发出音调,然后不断进行松手检测,直到松手检测成功即松开按键,停止声音的发出。 switch(temp) case 0x0e:key=0;break; case 0x0d:key=1;break; case 0x0b:key=2;break; case 0x07:key=3;break; LCD_allblack(0); display_English(key); TH0=tablekey/256; TL0=tablekey%256; TR0=1; while(temp!=0x0f) temp=P2; temp=temp&0x0f; TR0=0; spk=1; 中断子程序: void time() interrupt 1 /中断 TH0=tablekey/256;TL0=tablekey%256;spk=spk; 调试中发现的问题及解决方法: 在整个程序的编写我采用了分模块编写的方法,然后逐个进行软件编译并下载至硬件电路进行实践检测,最后完成了程序的正确编写。1. 键盘扫描遇见的问题在完成键盘扫描程序的编写和编译之后,我将程序下载到硬件电路的CPU中,发现按键按下之后很久才有了音调的产生,按键如果按的时间太短,就不会发音。由上述的问题中可以知道键盘的检测部分能够完成键盘扫描功能并且发音功能也能正确完成,但为什么会出现上述问题呢?经过再次对程序的仔细阅读,发现其中按键的扫描时间和延时子程序所控制的时间有关系,最后经过修改延时子程序的延时时间进行了调整,发现上述问题的原因是在去抖动的延时扫描时间太长,导致了上述问题的发生。经过对延时扫描时间调小,问题得到解决。2. 按键功能实现遇见的问题此次所设计的3个功能键分别是倒序播放控制键、顺序播放控制键、音乐自动比方演示键。其前两个子程序如下:void sb() /顺序播放 for(key=0;key+;key=0)TH0=tablekey/256;TL0=tablekey%256;TR0=1;delay(10);TR0=0; 其中sb和db的子程序设计为同理设计,但是在硬件电路上调试并不成功,问题是:顺序播放功能能够正确实现,同理设计的倒序播放功能却不能正确实现。开始怀疑是硬件电路的按键焊接不正确或者有板子焊坏问题,由此对程序中的按键进行了调换,让完好的按键代替实现该功能,但是仍旧不能够解决问题。请教了老师,对程序执行进行了跟踪,发现仍旧没有程序错误。老师对此也无解。最后我将倒序播放的功能实现程序改写为和歌曲播放的子程序相仿,该按键的功能得到了解决。在此个问题上,我到现在仍旧没有得到答案。void db() /倒序播放 TR0=1;key=6;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=5;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=4;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=3;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=2;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=1;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=0;TH0=tablekey/256;TL0=tablekey%256;delay(15);spk=1;TR0=0; 3. 液晶显示遇见的问题在液晶显示时,发现液晶完全没有显示,尽管我调整了很多次对比度,还是用同学的完全正确的程序进行调试,液晶屏仍旧不显示。最后不得不请教老师,才发现自己犯了一个很低级的错误,还有液晶显示对比度调节的电阻还未焊接,经过老师的指点,焊接好所缺的电阻后,液晶得以正常显示,顺利完成了程序的液晶调试部分。六、 设计总结这次设计,我的程序能够实现12个音调的发声,播放两首歌曲,及课程设计所要求的7个音调的顺(倒)序播放外加液晶显示部分含有数字和汉字的显示。在这次课程设计的过程中,我遇到了很多问题,也学到了很多东西。我从中感悟到,在遇到种种问题难以解决的时候,如果问问自己:我做好充分的准备了吗,我想这答案十有八九是显然没有。所以,通过这次课程设计,我明白了一点那就是:准备是必须的,只有充分的准备才能在遇到问题的时候锦囊妙计更好地找出解决问题的方法,不至于无谓地浪费时间。在遇到难题的时候一定要戒焦躁,多向老师和同学请教。老师的指导是肯定必不可少的,只有跟更优秀的人学习才能使自己变得优秀。当然,在研究的过程中,也不可忽略了同学提的意见,因为其中的一些可能就是解决的问题的方法。这次的课程设计收获颇多,着实地培养了我对单片机的兴趣。希望以后有更多的机会可以在这方面得到更多的锻炼。最后要谢谢各位老师的指导。七、源程序及硬件(PCB、)电路图、实物图#include#define uint unsigned int#define uchar unsigned char#define DATA P0 /数据口sbit E1 = P11;sbit E2 = P12;sbit RW = P13;sbit A0 = P10;uchar temp,key;sbit spk=P36;void delay(uint z);/延时void sb();void db();void music_1();/void music_2();uint code table= 64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, ;unsigned char code ZM16= 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/0,0 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/1,4 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/2,5 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/3,6 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/4,8 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/5,9 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/6,10 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/7,12 ;uchar code xingming32= 0x02,0xF2,0x12,0x12,0x1E,0x00,0x80,0x80,0xFF,0xA0,0x90,0x88,0x86,0x84,0x80,0x00,0x01,0x03,0x41,0x81,0x7F,0x00,0x00,0x40,0xFF,0x40,0x23,0x0C,0x10,0x60,0x20,0x00,/*圣,0*/0x00,0x00,0xF8,0x28,0xE8,0x28,0x28,0x28,0x08,0xFF,0x08,0x0A,0xEC,0x48,0x00,0x00,0x80,0x60,0x1F,0x41,0x27,0x19,0x49,0x57,0x20,0x11,0x0E,0x13,0x20,0x40,0x30,0x00/*殿,1*/0x02,0xF2,0x12,0x12,0x1E,0x00,0x80,0x80,0xFF,0xA0,0x90,0x88,0x86,0x84,0x80,0x00,0x01,0x03,0x41,0x81,0x7F,0x00,0x00,0x40,0xFF,0x40,0x23,0x0C,0x10,0x60,0x20,0x00,/*指,0*/0x00,0x00,0xF8,0x28,0xE8,0x28,0x28,0x28,0x08,0xFF,0x08,0x0A,0xEC,0x48,0x00,0x00,0x80,0x60,0x1F,0x41,0x27,0x19,0x49,0x57,0x20,0x11,0x0E,0x13,0x20,0x40,0x30,0x00/*环,1*/ ; void Master_Command(uchar nCommand1) A0=0;RW=0; E1=1; DATA=nCommand1; E1=0;RW=1;void Slaver_Command(uchar nCommand2) A0=0;RW=0; E2=1; DATA=nCommand2; E2=0;RW=1;void Master_Writedata(uchar nDatacode1) A0=1;RW=0; E1=1; DATA=nDatacode1; E1=0;RW=1;void Slaver_Writedata(uchar nDatacode2) A0=1;RW=0; E2=1; DATA=nDatacode2; E2=0;RW=1;void LCD_Init() Master_Command(0XE2);Slaver_Command(0XE2); Master_Command(0XAE);Slaver_Command(0XAE); Master_Command(0XA4);Slaver_Command(0XA4); Master_Command(0XA9);Slaver_Command(0XA9); Master_Command(0XA0);Slaver_Command(0XA0); Master_Command(0XEE);Slaver_Command(0XEE); Master_Command(0X00);Master_Command(0XC0); Slaver_Command(0X00);Slaver_Command(0XC0); Master_Command(0XAF);Slaver_Command(0XAF);void SetPage(uchar page0,uchar page1) /0,1是上屏,2,3是下屏,前面控制左屏,后面控制右屏 Master_Command(0XB8|page1);Slaver_Command(0XB8|page0);void SetAddress(uchar address0,uchar address1) Master_Command(address1&0X7F);Slaver_Command(address0&0X7F);void LCD_allblack(uint ping)/0为上屏,1为下屏 uchar i; uchar page; if(ping=0) page=0; if(ping=1) page=2; SetPage(page,page); SetAddress(0,0); for(i=0;i61;i+) Master_Writedata(0); for(;i122;i+) Slaver_Writedata(0); SetPage(page+1,page+1); SetAddress(0,0); for(i=0;i61;i+) Master_Writedata(0); for(;i122;i+) Slaver_Writedata(0); void display_C(uint dispage,uint disC) uint memory=0; uint pc_write=0; memory=pc_count; SetPage(dispage,dispage); for(;pc_write16;pc_count+) SetAddress(pc_count,pc_count); Master_Writedata(xingmingdisCpc_write+); pc_count=memory; SetPage(dispage+1,dispage+1); for(;pc_write32;pc_count+) SetAddress(pc_count,pc_count); Master_Writedata(xingmingdisCpc_write+); void display_English(uint disEnlish) uint memory=0; uint pc_write=0; uint pc=0; SetPage(0,0); for(;pc_write8;pc+) SetAddress(pc,pc); Master_Writedata(ZMdisEnlishpc_write+); pc=memory; SetPage(1,1); for(;pc_write0;b-) for(a=207;a0;a-);/ 100ms z-; void time() interrupt 1 /中断 TH0=tablekey/256;TL0=tablekey%256;spk=spk; void sb() /顺序播放 for(key=0;key+;key=11)TH0=tablekey/256;TL0=tablekey%256;TR0=1;delay(10);TR0=0; void db() /倒序播放 TR0=1;key=6;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=5;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=4;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=3;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=2;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=1;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=0;TH0=tablekey/256;TL0=tablekey%256;delay(15);spk=1;TR0=0; void music_1() /歌曲1 TR0=1;key=4;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=4;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=5;TH0=tablekey/256;TL0=tablekey%256;delay(15);key=4;TH0=tablekey/256;TL0=tablekey%256;delay(20);key=7;TH0=tablekey/256;TL0=tab

温馨提示

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

评论

0/150

提交评论