电子音乐发生器报告单片机设计实验报告.docx
《电子音乐发生器报告单片机设计实验报告.docx》由会员分享,可在线阅读,更多相关《电子音乐发生器报告单片机设计实验报告.docx(41页珍藏版)》请在冰豆网上搜索。
![电子音乐发生器报告单片机设计实验报告.docx](https://file1.bdocx.com/fileroot1/2022-11/21/30c4da6c-fed3-4765-a9e6-79a2787136eb/30c4da6c-fed3-4765-a9e6-79a2787136eb1.gif)
电子音乐发生器报告单片机设计实验报告
2013年小学期单片机设计实验报告
题目:
电子音乐发生器
班级:
班序号:
实验组号:
学生:
指导教师:
期中检查
教师评语
指导教师签字:
年月日
电子音乐发生器
――2011211****班
实验摘要
此次本组制作的基于pic单片机的电子音乐发生器是具有液晶显示屏提示的音乐简单演奏、播放等功能的演示作品。
在目前很多简单音乐播放器件(如贺卡、礼品中的简单音乐单元)中,这样的简单电路和rom编程原理都是可以通用的,而且电路搭接、布局简单,十分适合电路原理学习、汇编语言编程零基础训练以与简单礼品核心部分制作参考。
整个系统中,微控制器采用了Microchip公司的PIC16F877,软件设计中涉与PORTB\PORTC\PORTD\PORTE用作普通数字I/O脚功能。
本实验用单片机PORTB\D接收来自键盘输入的指令信息,由此确定lcd液晶屏幕显示以与喇叭播放容,再通过PORTC\D\E输出声音或字幕信息。
Abstract
Inthisexperiment,ourgroupmadethispicmicrocontrollerbasedelectronicmusicgeneratorisasimpleLCDpromptsmusicplaying,playbackandotherfunctionstothepresentation.Inthecurrentlotofsimplemusicplaybackdevices(suchasgreetingcards,giftofsimplemusicalelements),suchasimplecircuitandromprogrammingprinciplescanallbegeneric,andthecircuitlap,thelayoutissimple,verysuitablecircuitschematiclearnassemblylanguagezero-basedtrainingprogramandasimplegiftcorepartoftheproductionreference.
Throughoutthesystem,themicrocontrollerusesMicrochip'sPIC16F877,softwaredesigninvolvesPORTB\PORTC\PORTD\PORTEusedasanormaldigitalI/Opinfunctions.TheexperimentwiththemicrocontrollerPORTB\Dreceivescommandsfromthekeyboardinputinformation,therebydeterminingtheLCDscreendisplayandspeakerstoplaythecontent,andthenthroughPORTC\D\Eoutputsoundorsubtitleinformation.
关键字
单片机——microcontroller芯片——CMOSchip
lcd液晶显示屏——LCDscreen
输入输出端口——I/Opin
一.实验论证与比较
电子音乐发生器采用以Microchip公司的PIC16F877芯片为核心的简单控制系统,外部电路连接有喇叭、键盘、lcd液晶显示屏以与其他必要系统调节元件。
在将所要实现的功能用汇编语言加以实现并烧入rom中,作为实验进行过程中的硬件部分实现人员,我在本次实验中的主要工作是相关资料搜集、软件的入手使用、相关乐谱搜集与乐理知识简单介绍、实验记录与图形绘制和最终的硬件设计与焊接实现。
其中,困难的部分在于,理论上认为电子音乐发生器模拟真正乐器的仿真实现方法,与现实电路实现起来有着一定的差别,在长音、乐谱存储播放上,编程的同组搭档也费了不少脑筋和时间。
二.系统总体设计
系统模块总体框图
程序流程图
三.硬件连接
单片机与输出元件连接
音乐发生器的声音输出单元十分简单,即pic16f877单片机的RC0端口与喇叭单元信号输入端以导线连接即可。
而单片机与lcd液晶显示则需要相应管脚与单片机RE0\1和RD0-7管脚(10个)以导线连接。
单片机与输入元件连接
输入元件中,键盘输入需单片机RD7-4和RB3-0端口(8个)相连。
硬件连接为我的最主要分工部分,其中,各部分的外围支持电路(如4M有源晶振、重置电路、喇叭的放大电路、电源供应电路等的详细情况请见下图,具体硬件原理图)
具体硬件原理图(设计、手绘,12组硬件部分负责学生:
冰宇)
四.调试过程
软件程序部分
虽然软件部分是由本组队友完成的,但是基本原理上在平时的合作中我也学到了很多容易些的原理,而且在理解了程序控制和输出原理的基础上完成硬件设计和实现也就更加有利了。
首先,曲目存储形式,在参考资料“两只老虎”简谱的简单乐理解释之后,存储过程中由于1/4音符(该曲为“4/4拍”歌曲,即“以四分音符为一拍、每小节有4拍”,该曲中有设置1/4拍的必要,详细见附件“简谱1”)的原因导致程序曾多次需要重新编写。
硬件部分
硬件部分设计实现由我负责,硬件部分的完成分为:
电路图的设计、面包板上的电路实现、万能板上的电路实现三部分。
绘制基本电路图并根据电路图搭接面包板上的电路,但是由于面包板搭接存在不稳定性,电路时常会有输出失常的情况发生,在最后一次电路终于正常工作、各项参数均正常之后,听取实验室老师的建议,直接进行焊接,在考虑了手中现有万能板的条件之后,重新绘制适合于该万能板布局的电路图,并着手焊接和测试。
调试过程中的经验总结:
1、市面上学生自行购买的万能板与教师下发的教学用万能板有着很大区别,其用法也有不同,教学用万能板有置相连的焊点,这样的结构十分适合初次焊接整个电路的学生使用。
2、焊接很多管脚与输出元件的部分时,强烈建议焊接之后立即使用万用表测量焊点是否真正焊上,否则在电路出现问题时再查找将有可能浪费不必要的时间。
3、要在各种学习中贯彻“微积分”的思想,化整为零,分步击破,再将它们重新组合以求得整体效果的实现,同时,焊一部分就验一部分,焊接完成的部分与时检验,这样才能最大限度保证电路整体的正常工作。
(详细请参考本实验报告第七部分附录中的各部分分解硬件原理图)4、边分析边检查,猜想可能造成此现象的各种原因,逐个检验。
5、仔细读图,避免管脚接错这样的低级错误。
五.参考文献:
PIC单片机实用教程——基础篇
学海
航空航天大学
使用说明:
的确是一本不可或缺的教材,本书列举了很多实用的具有实战意义的例子,单片机入门就是通过把这本书里的好例子一字一行敲进电脑去来实现的。
PIC单片机实用教程——提高篇
学海
航空航天大学
使用说明:
继承了前面基础篇的风格,例子也具有实战意义,主要讲RA、TMR2的使用和CCP模块的PWM脉宽调制功能。
六.实验心得体会
在本次小学期实验过程中,我们组(12组,A网)遇到的最严重的问题,但同时却并非实验本身学习问题,时间存在着客观限制,由于实验时间在期末考试之后,实验结束即意味着组员订票返乡,由于暑假铁路客运订票高峰一票难求的原因,我们组不得不非常无奈而遗憾地选择了一个相对简单的题目(本组软件负责的队友同学其实本来是非常中意于“单片机智能车”这个题目的,但是未能如愿为之尝试、努力和钻研,实在是一大遗憾)并以相对紧凑的实验节奏完成了实验,实验完成功能:
LCD显示的电子音乐发生器,用时:
30个教学单元(第11天完成验收)。
首先,总结实验中学到的知识与技能,本次实验中参考正规科研实验的模式编写并保存了“实验日记”和出于个人兴趣录制的实验中期检验的录像,虽然记录并不完整,但是还是有利于回忆经验教训的(此部分参见附录和报告附带文件夹)。
在硬件设计,尤其是万能板焊接前的具体电路设计阶段,由于不得不考虑手中现有材料的限制,曾经出现严重的元件错接在高电平上的事故,好在接通电源前与时发现并更正,否则该元件极有可能发生爆炸。
由于焊接工作台与测试区分离,在焊接过程中时常有忘记携带图纸、镊子等状况,不仅让实验习惯不好的我吃到了苦头,更是让我理解了实践过程中对人各方面能力综合考验的道理。
其次,总结实验中个人心得体会,实验中曾经遇到十分棘手的问题,如下实验日记:
2013.6.29第一次理论课,实验介绍与题目引导
2013.7.1进入实验室,试验箱介绍,尝试霹雳灯(下载成功未成功运行),尝试d盘中程序计数器(led灯显示计数数值)(下载、运行均成功)
2013.7.2第二次理论课(讲解硬件),继续实验,实验设计报告编写、实验报告试写、题目权衡确定、其他组成果观摩与教师交流硬件支持问题、总结实验箱使用经验教训(尤其关于下载和实验箱电源接触不良与程序下载运行之间的关系,总结理论与实际差距问题)
2013.7.3实验进入胶着状态,虽然仍然在不懈研究代码和硬件之间的关系,但一无所获……(上午),下午,电子音乐发生器程序输出端口暂定rc0。
2013.7.4由于突发不可抗力原因,实验节奏被迫打乱,开始系统学习汇编语言且进度不可控,上午理论学习,下午理论学习同时查阅资料,同组同学发现编程中对于二进制常数填写中00000000B不可用,需改用B’00000000’的形式,实现按键控制led发光二极管依照指令发光。
晚上对程序进行重新修改后,基本实现按键控制指定led发光,同时控制喇叭发出c大调七个音阶的声音,实验取得阶段性胜利。
面包板出现问题且查找原因整整2天无果,正是由于电子音乐发生器是一个并不困难的题目,才更加让人如鲠在喉、如芒在背。
现在回想起实验当时的困扰和不解,有如只身一人前往一处人烟稀少的“一线天”景点,但是不幸在通过石缝时整个人被卡在正中间,一转头都会擦到鼻子的狭窄和精神上的窒息感,此时唯有解决当前的问题才能艰难蹭出石缝……但是当终于从压迫身心的“石缝”中脱险时,才能发现天空是如此蔚蓝高远、回想起来心中感慨万千。
焊接过程中由于操作不当烫伤了手指,还目睹了旁边实验台烙铁使用不当导致的爆炸,这些都时刻提醒着我们实验过程中“规使用、安全第一”,(旁边实验台爆炸时,一个火球从烙铁导线出喷出来,发出爆鸣声,随后发现烙铁导线完全炸断、插排断电保护)否则伤与自身、他人,造成安全隐患、财产损失、甚至伤亡都是有可能的。
由于我们组从7月1日实验开始每天8:
30-11:
30、14:
00-17:
00和18:
00-21:
00的3个实验单元均按时签到进行实验,同时我们寻求老师关于元件基本使用方法的帮助、旁边13组同学也十分热心地介绍了他们自己购买的元件使用方法、网上资料也相对简单易懂,本组进度会较其它组稍微快一点,实验第七天开始有很多其它组同学来询问关于元件基本使用方法、乐理知识(我稍有乐器学习的经历,对其他制作有音乐发生作品的同学能有些帮助吧)、焊接经验、电路工作中出现错误的问题等等,在尽力提供帮助时,我深刻地感受到帮助与我同样带着焦虑无奈眼神的人是一件多么有意义的事!
实验中面包板会时不时出现故障的原因到最后也没有彻底明了,也许这就是实验的魅力所在,对我来说,与其说在实验中领悟了“通信工程的真谛”,到不如说参透了“人生不是考试题,不是所有的事情都能有答案”这样的禅理。
最后,感实验中悉心教导我们的老师,对实验开始心毛躁、急功近利的我耐心疏导,对一双双焦急无奈的眼睛安慰宽抚,对粗心大意有时浪费元件的同学与时批评,老师们在实验中对我们的教育、树立的模价值的不可估量。
实验中,老师为与时监督、指导我们而早起晚睡,为了给同学演示焊接、修理损坏器件而不慎被烙铁烫伤,这些都让我们有了一份感动,同时更加激起我们学习的动力。
老师在实验中教会了我们什么是自己能够独立完成的、什么应该查找相关资料,资料要沉住气来读才能理解、错误要一个点一个点测才能找到并纠正。
我们也应该更多靠自己,在老师忙碌的时候不妨在一旁静心重新审视自己的电路,即是体谅他人又是给心灵以沉淀的机会,老师不会落下任何一个学生,在实验中老师总能在挤得水泄不通的教2-324一个个帮助前来求助的同学,在严厉的教导中我们感受到的是老师的认真负责、诲人不倦。
实验虽然结束了,学习却不会结束,在今后的日子里,我相信我将更有信心克服困难,执着向前。
2013年8月4日
七、附录
各部分分解硬件原理图:
实验中期检验效果图:
实验最后硬件实现图(请参考实验报告附带录像):
焊接过程中管脚座布局图和背面焊点:
简谱1(两只老虎):
简谱2(情非得已):
statusequ3h
rp0equ5h
portbequ6h
trisbequ86h
portcequ7h
triscequ87h
portdequ8h
trisdequ88h
porteequ09h
triseequ89h
date1equ20h
date2equ21h
date3equ23h
ADCON1equ9fh
n1equd'1'
n4equd'1'
n5equd'95';5
n6equd'85';34
n7equd'75';2
n8equd'65';1
n10equd'105';6
n11equd'50';-5
n12equd'6'
n13equd'120'
n2equd'230'
n3equd'1'
option_regequ81h
option_bequ22h
intconequ0bh
tmr0equ01h
so0equd'256'-d'160'
doequd'256'-d'120'
reequd'256'-d'106'
miequd'256'-d'94'
faequd'256'-d'90'
soequd'256'-d'80'
laequd'256'-d'72'
xiequd'256'-d'64'
do1equd'256'-d'60'
re1equd'256'-d'53'
mi1equd'256'-d'47'
;**************************
org0000h
main
nop
bsfstatus,rp0
movlw00h
movwftrisc
movlwb'11111111'
movwftrisb
movlw00h
movwftrisd
movlwb'00000000'
movwftrise
MOVLW6H
MOVWFADCON1
movlwb'00000011'
movwfoption_reg
bcfstatus,rp0
movlw00h
movwfportc
movlwb'00000000'
movwfporte
;**********************************
calldown
movlwb'00000001'
movwfportd
calldown
movlwb'00111000';setfunction
movwfportd
calldown
movlwb'00001000';closedisplay
movwfportd
calldown
movlwb'00000110';clearscreen
movwfportd
calldown
movlwb'00001100';clearscreen
movwfportd
calldown
bcfporte,0
movlwb'00000001
movwfportd
calldown
movlwb'00000001'
movwfporte
movlwb'01110111'
movwfportd
calldown
movlwb'01100101'
movwfportd
calldown
movlwb'01101100'
movwfportd
calldown
movlwb'01100011'
movwfportd
calldown
movlwb'01101111'
movwfportd
calldown
movlwb'01101101'
movwfportd
calldown
movlwb'01100101'
movwfportd
calldown;welcome
movlwb'10100000'
movwfportd
calldown
movlwb'01110100'
movwfportd
calldown;to
movlwb'01101111'
movwfportd
calldown
movlwb'10100000'
movwfportd
calldown
movlwb'01110101';use
movwfportd
calldown
movlwb'01110011'
movwfportd
calldown
movlwb'01100101'
movwfportd
calldown
bcfporte,0;nextrow
movlwb'11000000'
movwfportd
calldown
movlwb'00000001'
movwfporte
movlwb'01000011'
movwfportd
calldown
movlwb'00111010'
movwfportd
calldown
movlwb'01110011'
movwfportd
calldown
movlwb'01110100'
movwfportd
calldown
movlwb'01100001'
movwfportd
calldown
movlwb'01110100'
movwfportd
calldown
movlwb'01100101'
movwfportd
calldown
movlwb'01101101'
movwfportd
calldown
movlwb'01100101'
movwfportd
calldown
movlwb'01101110'
movwfportd
calldown
movlwb'01110100'
movwfportd
calldown
;***********************
start
movlwb'01111111'
movwfportd
btfssportb,3
callone
movlwb'00000000'
movwfportc
btfssportb,2
calltwo
movlwb'00000000'
movwfportc
btfssportb,1
callthree
movlwb'00000000'
movwfportc
btfssportb,0
callfour
movlwb'10111111'
movwfportd
btfssportb,3
callfive
movlwb'00000000'
movwfportc
btfssportb,2
callsix
movlwb'00000000'
movwfportc
btfssportb,1
callseven
movlwb'00000000'
movwfportc
btfssportb,0
calleight
movlwb'00000000'
movwfportc
movlwb'11011111'
movwfportd
btfssportb,3
callnine
movlwb'00000000'
movwfportc
btfssportb,2
callten
movlwb'00000000'
movwfportc
movlwb'11011111'
movwfportd
btfssportb,1
callaa
btfssportb,0
callbb
movlwb'00000000'
movlwb'11101111'
movwfportd
btfssportb,3
callcc
gotostart
ccbcfporte,0
movlwb'00000001'
movwfportd
calldown
movlwb'00000001'
movwfporte
movlwb'00110000'
movwfportd
calldown
movlwb'00101101'
movwfportd
calldown
movlwb'00111001'
movwfportd
calldown
movlwb'00111010'
movwfportd
calldown
movlwb'11110000'
movwfportd
calldown
movlwb'01101100'
movwfportd
calldown
movlwb'01110101'
movwfportd
calldown
movlwb'01100011'
movwfportd
calldown
movlwb'01101011'
movwfportd
calldown
bcfporte,0
movlwb'11000000'
movwfportd
calldown
movlwb'00000001'
movwfporte
movlwb'01000001'
movwfportd
calldown
movlwb'00101100'
movwfportd
calldown
movlwb'01000010'
movwfportd
calldown
movlwb'00111010'
movwfportd
calldown
mov