Mega16的综合运用.doc_第1页
Mega16的综合运用.doc_第2页
Mega16的综合运用.doc_第3页
Mega16的综合运用.doc_第4页
Mega16的综合运用.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

西南科技大学10届创新实践班论文meg16的综合运用the comprehensive use of meg16团队成员:, 单位:创新实践班,学号:2010005 , 单位:创新实践班,学号:20090163. , 单位:创新实践班, 学号:20010004指导教师: 摘要:用meg16使其能够拥有计数器,时钟,音乐播放器,花灯的综合功能。abstract:making the meg16 to be the comprehensive use of the counter, clock, music player and changing led.关键词:计数器,时钟,蜂鸣器,跑马灯。keyword: counter, clock, music player and changing led.目录摘要:2关键词:21使用说明31.1计数器使用说明31.2时钟使用说明31.3音乐播放器使用说明31.4跑马灯使用说明32设计目的33原理细分33.1时钟计时实现原理33.2 跑表显示与技术存储原理33.3音乐播放器33.31pwm音乐播放器说明33.32过程实现及方法说明33.4跑马灯3参考文献31使用说明1.1计数器使用说明按下k2,灯d10亮了,准备进行计数,再按下k3进行计数。接着,按k1记录第一次数据,按下k2记录第二次数据。最后按k1显示第一次记录的数据,按k2显示第二次记录的数据。1.2时钟使用说明先按复位键进行复位。再按下k1键进行时间记录。本计数器最多可记录一个钟的时间。误差说明:每一小时误差为一分钟。1.3音乐播放器使用说明按下k5键进行音乐准备,按k6第一手歌播放。再按复位键,按k5进行音乐准备,按k7第二首歌进行播放。再按复位键,按下k5进行进行音乐准备,按k8键第三首歌进行播放。1.4跑马灯使用说明先按复位键进行复位,再按下k4进行花灯演示。2设计目的综合运用假期所学的关于c语言,单片机,等方面的知识,开发已有知识和器材的潜能,为以后的课程设计打下基础,特别是对c语言的深度使用,和对单片机运用方面了解。其次培养团队分工合作的能力,使得大家更加的了解对方。培养程序模块的思想,运用现学知识,将能做的项目做到最好。结合现在单片机的迅速发展和现在沿海地区信息化产业升级,我们组努力培养自己这方面的的能力。随着单片机运用的地日益普及,和信息化程度的逐渐加深,我国越来越需要关于单片机的开发与运用方面的人才。我们组为实现四个现代化,做四有新人而努力奋斗。3原理细分3.1时钟计时实现原理一、时钟函数流程图: 在该函数中,通过timer的自加来表示一秒钟的时间,通过中断函数的使用(系统中断时间为1毫秒),但由于程序的某些条件的限制需要timer自加到1010时才近似于一秒,在程序中,变量的命名及相关定义为:count-indi-s (个位秒)、count-ten-s (十位秒)、count-indi-mit(个位分)、count-ten-mit(十位分)。当timer自加到1010时,count-indi-s由零自加,并且timer变为0,再次循环判断条件,当count-indi-s自加到10时,count-ten-s由零自加,并且count-indi-s变为0,再次循环判断条件,当count-ten-s自加到6时,count-indi-mit由零自加,并且count-ten-s变为0,再次循环判断条件,当count-indi-mit自加到10时,count-ten-mit由零自加,并且count-indi-mit变为0,再次循环判断条件,当count-ten-mit自加到6时,变为0,整个程序按上述再次循环。二、时钟函数的内部模块: 1、分秒之间的转换模块:该模块主要实现分秒之间的转换,而其中的每一个变量的数值都会记录,并且在如下模块中使用。 2、数码管显示模块: 这一模块紧接着上一模块,在此模块中,你会看到数组名为num、num-的数组,它们定义在主函数中,其定义为:其中,num数组表示的是数码管不带有小数的的数字编码,num-数组表示的是数码管带有小数点的编码,在上述模块中,对portb的操作是为了保护portb的端口位,只让规定的位打开,从而实现数码管的位选操作,上述的带有count为头的变量由分秒转换模块给出,从而实现portd的位操作,再通过delay-time-ms()的毫秒延时函数,于是数码管通过while的死循环进行数码显示。三、时钟模块的误差统计:3.2 跑表显示与技术存储原理一、跑表函数流程图: 二、跑表计时模块:该模块中,stopwatch-count用来最低位计数,该位在数码管中显现不出来,但通过函数delay-time-us(16)的调用可以较为精确的得出千分位的毫秒计数,而流程图中所描述的秒与毫秒的进位关系,通过变量stopwatch-hundred-percent-ms(毫秒的百分位),stopwatch-ten-percent-ms(毫秒十分位),stopwatch-indi-s(秒的个位),stopwatch-ten-s(秒的十位),等变量来描述。三、跑表的显示函数:该模块的显示依照时钟显示模块,数组num、num-为前面所定义的类型与内容。四、按键计数模块:在该模块中,通过数组same-key-press的元素数值来记录相应按键按下的次数。五、按键按下后状态保存模块:在该模块中,利用数组stopwatch-final-state来保存相应按键第一次按下时的数码管端口状态,用以显示使用。六、数值显示模块(部分):在该模块中,利用前面保存的端口状态与按键条件标记sign的数值来进行判断,并通过无限循环来进行显示,该模块中的stopwatch-state数组的数值有前面的stopwatch-final-state数组来传递。3.3音乐播放器次流程图介绍了关于音乐播放器的程序书写。最后整合到一个主函数中。3.31pwm音乐播放器说明寄存器说明:tccr0tccro:本音乐播放软件采用64分频并且打开tcnt0 与ocr0 的匹配模式,查pdf 可得tccr0赋值为0x0b;tccr0 = 0x0b英文参考文献:mega16数据手册,原文摘录如下。本音乐播放其中对com端口和foco端口不做定义,故直接将位设为0 ,对于wgm01和wgm02及cs01、cs02端口分别定义分频大小和波形产生模式。最终采用64分频,和ctc模式及时ocr启动模式tcnt0、ocr0对于寄存器tcnt0和ocr0而眼,两者采用匹配方式得到中断时间。本程序中对其赋值为。tcnt0 = 0x00;ocr0 = 0x01;说明:在此中断种即说明,处理器计数一次及中断。时间为 8 us tifr、timsk在数据手册中对这两个寄存器的定义与开启中断匹配相关原文如下。 bit 1 ocf0: output compare flag 0the ocf0 bit is set (one) when a compare match occurs between the timer/counter0and the data in ocr0 output compare register0. ocf0 is cleared by hardware whenexecuting the corresponding interrupt handling vector. alternatively, ocf0 is cleared bywriting a logic one to the flag. when the i-bit in sreg, ocie0 (timer/counter0 comparematch interrupt enable), and ocf0 are set (one), the timer/counter0 comparematch interrupt is executed. bit 1 ocie0: timer/counter0 output compare match interrupt enablewhen the ocie0 bit is written to one, and the i-bit in the status register is set (one), thetimer/counter0 compare match interrupt is enabled. the corresponding interrupt isexecuted if a compare match in timer/counter0 occurs, i.e., when the ocf0 bit is set inthe timer/counter interrupt flag register tifr.本说明只摘引部分文献,详细询英文数据手册p80 。本程序采用tcnt0和ocr0相互匹配得到中断时间,所以将tifr和timsk设为0x02tifr = 0x02timsk = 0x023.32过程实现及方法说明首先其中main函数中具体实现代码如下(部分摘录)函数过程为,首先确认按键被按下,然后判断被按下的按键的位置,接着选择歌曲进行播放。(上图表现的只有其中一首歌曲的选择和播放代码)代码关键点说明赋值给ocr0确定中断时间从而确定音符 经过计算可以得到如果tcnt0=0x00而且ocr0=0x01时每次中断使用的时间为8us,得到这个数据之后,可知道根据赋值的不同。(查找音符的频率,从而确定每次鸣叫所需要的时间。用基数乘以需要的数即可得到特定频率)interrupt time(中断时间) = count * 8 us中断时间改变之后得到的频率就不一样了,这是模拟音乐的关键所在!也是因为这个模拟方式的原因pwm模拟的只是音符的频率而没有模拟其振幅,所以音色有失真的情况。音符的实现是通过微观的中断时间不同而实现的,在宏观时间上表现为频率不同(即音符),同时由于实现方式的局限所以,音色的问题是蜂鸣器的瓶颈3.4跑马灯首先用icc写入meg16的跑马灯的程序。该程序主要由meg16c端口电位的变化所形成的。灯的变化有四灯交替闪,和全部灯一起闪,灯闪着从两边向中间亮。还有灯从一边想另一边灭掉,再从一边向亮起来,再是灯从两边向中间灭,再从中间向两边亮。其中包括了灯像一个弹球一样向两边弹。其次就是用progisp将程序调入单片机里。 其中工作量最大的一部分就是关于跑马灯程序的写法

温馨提示

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

评论

0/150

提交评论