单片机课设报告211.docx
- 文档编号:25800727
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:30
- 大小:841.89KB
单片机课设报告211.docx
《单片机课设报告211.docx》由会员分享,可在线阅读,更多相关《单片机课设报告211.docx(30页珍藏版)》请在冰豆网上搜索。
单片机课设报告211
目录
1整体结构
1.1设计目的......................................1
1.2方案选择及构想.................................1
1.3最终要达到的试验结果...........................1
1.4整体连接图.....................................1
2硬件结构
2.1结构图........................................2
2.2音频功放电路..................................2
2.3LM286芯片图..................................3
2.4存储芯片AT24c16..............................3
2.5电路连接原理..................................4
3软件结构
3.1电子琴的软件系统总设计............................6
3.2电子琴存储音符....................................6
3.3红外遥控输入的解码处理............................7
3.4音符处理以及以扬声器的驱动........................9
4调试
4.1仪器仪表.........................................11
4.2系统调试.........................................11
4.3硬件调试.........................................12
4.4软件调试........................................12
4.5硬件软件联调....................................13
4.6测试结果.....................................................14
4.心得体会...........................................14
6.附件...............................................16
1.整体方案
1.1设计目的
1、加强对单片机和C语言的认识,充分掌握和理解设计各部分的工作原理、设计过程、选择芯片器件、模块化编程等多项知识。
2、用单片机模拟,使实现具体应用个人设计能够真正使用。
3、把理论知识与实践相结合,充分发挥个人能力,并在实践中锻炼自己。
4、提高实践动手能力,学习使用红外遥控器控制单片机。
1.2方案选择及构想
按键方案:
方案:
红外遥控上的按键1和2分别对应不同的歌曲。
构想:
1通过按红外遥控器的按键控制达到要求。
2用控制扬声器来发出对应的音符
3把单片机、24c16芯片、音频驱动连接起来,完成试验要求
1.3最终要达到的试验结果
成果:
当按下红外遥控器数字1时喇叭播放第一首歌,按下键2时播放第二首歌。
1.4整体连接图
2.硬件结构
本次课程设计的硬件电路比较简单,主要有51单片机一块、红外遥控及接收器、音频功放和扬声器构成。
2.1结构框图
2.2音频功放电路图
2.3LM386芯2.3LM386芯片图
GAINGAIN
-INBypass
+INVs
GNDVout
其引脚功能说明如下:
GAIN(1脚,8脚):
增益控制引脚,如果此两脚悬空,则增益为20V,如果两脚之间接一个大的极性电容,则增益可以达到200V,如果在和电容串联一个电阻,增益可设置为20~200V之间。
-IN(2脚):
负极性输入脚,在单极性输入时,此引脚接地。
+IN(3脚):
正极性输入脚,在单极性输入时,此引脚接输入信号。
GND(4脚):
接地端。
Vout(5脚):
电压输出端。
此引脚为音频功放电路的输出。
Vs(6脚):
电源脚,供电范围4~12V。
BYPASS(7脚):
旁路端。
此引脚可悬空或者接一个大电容到地。
2.4存储芯片AT24c16:
A0VCC
A1WP
A2SCL
GNDSDA
SDA(5脚):
串行地址\数据管脚:
这个双向引脚用来传送地址和输入输出数据。
这是一个开漏输出,以便与其它器件通过“线或”并接在双线总线上。
输入缓冲区集成施密特触发器用以提高抗干扰性能,输出驱动具有下降沿斜率控制。
次端口必须外加上拉电阻。
SCL(6脚):
串行时钟:
两线制总线的串行时钟输入。
数据在时钟的下降沿移出器件,在时钟上升沿移入器件,时钟端口同样具有施密特触发器用以提高抗干扰性。
WP(7脚):
写保护:
当WP为高电平时,存储器处于写保护状态,数据禁止写入,当WP为低电平时所有地址都能写入,这个管脚已经被内部下拉。
VCC(8脚):
电源电压:
5V。
GND(4脚):
地。
A0、A1、A2():
空脚。
2.5电路连接原理
存储芯片的引脚SDA与单片机的P3.2口相连,引脚SCL与单片机的P3.3口相连,VCC口接高电平,其他引脚都接地。
在VCC口接高电平的情况下,单片机通过这两个口的连接可以通过时钟的控制对AT24c16芯片进行读和写的操作。
功放板与单片机的链接:
单片机的电源引脚VCC与功放板的电源引脚VCC相连,地与功放板的地相连,单片机上的音频输出口P1.6与功放板上的音频输入口(J4的1口)相连,扬声器连接到功放板上从而发声。
红外接收器的连接:
一端连单片机的P3.3口,一端接地,一端接一个上拉电阻再接电源。
通过单片机的控制来实现红外的接收,信息的存储,以及音乐的播放工作。
实连图如下:
其程序如下:
if(a1==1)
{
Ir_work();
if(flag==1)
{
EX1=0;
i=0;
k=0;
while(i<83)
{
k=music1[i]+7*music1[i+1]-1;//第i个是音符,第i+1个是第几个八度
timer0h=a[k];//从数据表中读出频率数值
timer0l=b[k];//从数据表中读出频率数值
time=music1[i+2];//读出时间长度数值
i=i+3;
song(timer0h,timer0l,time);
}
s=1;
flag=0;
EX1=1;
}
}
if(flag==2)
{
i=0;
k=0;
EX1=0;
while(i<99)
{
k=music2[i]+7*music2[i+1]-1;
timer0h=a[k];
timer0l=b[k];
time=music2[i+2];
i=i+3;
song(timer0h,timer0l,time);
}
s=1;
flag=0;
EX1=1;
}
4.调试
4.1仪器仪表
单片机仿真器
KEILC
蜂鸣器
扩音器
LS1
4.2系统调试
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试
软件调试
软硬件联调
由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:
中心控制模块的调试,音乐播放模块的调试,按键控制模块的调试等,最后将各模块组合后进行整体测试。
4.3硬件调试
对各个模块的功能进行调试,主要调试各模块能否实现指定的功能。
4.4软件调试
软件调试采用单片机仿真器KEILC及微机,将编好的程序进行调试,主要是检查语法错误。
4.5硬件软件联调
将调试好的硬件和软件进行联调,主要调试系统的实现功能。
4.6测试结果
系统设计结果,送入音乐程序,按键遥控器上面1键或2键,则会播放歌。
5.心得体会
本学期为期一周的单片机课程设计在不知不觉中结束了,虽说这次课程设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新知识,回顾了以前的一些快要遗忘的知识点,而且使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的趣味,更加清楚地认识到了自己在软件开发及学习上的一些不足之处。
这次课设实施方式是团队分组合作,共同完成,让我们体验了一下团队开发项目的氛围。
虽说一些些技术我们在课堂上也曾学习过,但是大多停留在理论学习上,实际开发很少,而这次课程设计给了我们一个很好的边学习边实践的机会,对我们深入学习这些技术有很大帮助,深刻体会到了这些技术的实用性。
每当自己成功调试一段代码或者通过自己的努力克服一个技术困难,都颇有收获感。
这次实训让我们体验了软件开发的全过程,发现自己的不足,增加了一定的项目开发经验。
简短的回顾一下这几天我们所学习的:
课设之前,我们先明确了一下下周课程设计的要求和目的。
然后胡老师给我们详细的讲解了这一周我们要做什么,同时我们也分了小组,模拟体验一下团队开发,
此次课程设计软件与硬件相结合,考察了我们的焊接水平与编程能力.因为以前做过关于焊接的电工实习,所以对于我们通信专业的学生而言焊接是不成问题,也很顺利;可到了编程时就出现了很大的障碍,第一天开始程序编写还算顺利,本来还以为编程会很简单的,等到实际操作起来才知道它的复杂性,没有想像中的那么得心应手,理解流程是有思维的前提.其实本身程序的思维是正确的,只是步骤中有点小错误,当我们吧各自写好的功能拼在一起的时候出现了不少问题所以导致整个程序的结果很乱,大家都很郁闷,改了很多结果却出不来。
于是,到了第二天为了提高效率,我们便集中的调试程序直到成功,其实到最后发现错误其实是一个很小的地方。
系统以AT89C51为核心部件,利用软件编程,通过用软件,将数据写入到EEprom中通过红外遥感控制,利用扬声器唱出歌来。
能实现本设计题目的基本要求和发挥部分。
充分发挥软件编程的优点,可是当我们把成品做出来却发生了各种各样的问题。
首先,要往芯片中写入数据,要安装串口驱动,装了很久,特别是去实验室调一次就要装一次,而且实验室的电脑都装不了,很麻烦。
另外程序明明正确,可是通电后,扬声器缺不发声,最后原来是,扬声器的线没搞好混在一起了。
并不是什么大的问题。
到最后,扬声器能正确唱出歌来,可是蜂鸣器也在响,原来我们用的P1^5口正好是接了蜂鸣器的引脚,原来一个小问题不注意,也会造成一些不必要的错误。
在此次课程设计中给我印象深刻的是在平时我们就需要好好的查阅书籍或者上网搜集相关资料去解决问题。
此次实训最大的收获不是我学习到了多少知识而是这几天实训给我的感悟:
首先是心态。
一定要有一个积极的心态,独立解决问题的意识,培养扎实基础的认识。
不要什么东西都感觉跟简单(很多东西可能是看似简单)就不去做了或者不屑一做,以至于网上搜搜就可以了,这样很不好。
有自己的东西有自己的付出才会有程序运行成功时的喜悦和小自豪,这样也有助于培养自己的兴趣。
要时刻牢记态度决定一切。
其次是兴趣,感觉学习工作中兴趣很关键,只是一个引发人积极性的问题,有了兴趣就自觉了,效率自然就高了。
再次要敢于尝试和挑战。
不要安于现成的程序,而且不要害怕失败,在程序调试的过程中这点尤为重要,“发现出问题然后解决问题”是一个积累经验的过程,而且很高效。
最后要不懈追求。
对于源代码进行不断的完善,要尽可能的实现课题所要求的功能。
对于初学者或者开发较少的人来说,大量大写程序还是有必要的,但同时要注意思考,理解其实现的内在意义。
还可以自己添加一些有意义的功能来实现。
当看到自己编写的程序正常运行时,兴趣也会随之而来,乐此不疲,形成一个良性循环。
踉踉跄跄地忙碌了一周,我们单片机课程设计也终将告一段落。
设计实物也基本达到预期的效果,但由于能力和时间的关系,总是觉得有很多不尽人意的地方,譬如功能不全、外观粗糙,一首歌放完之后才能换另外一首。
但我可以自豪的说,这里面的每一段代码,都有我们的劳动成果。
当看着自己的程序,大家成天相伴的系统能够健康的运行,真是莫大的幸福和欣慰。
我相信其中的酸甜苦辣最终都会化为甜美的甘泉。
总而言之,单片机课程设计对于我们有很大的帮助,我们从中受益匪浅.
7.附件
#include
#include
#include"红外音乐.h"
uchariic_write_byte(ucharwdata)
{
ucharbit_cnt;
for(bit_cnt=0;bit_cnt<8;bit_cnt++)
{
if(wdata&0x80)SDA=1;
elseSDA=0;
wdata<<=1;
delay_10us();
SCL=1;
delay_10us();
SCL=0;
}
delay_10us();
SDA=1;
SCL=1;
delay_10us();
if(SDA==1)bit_cnt=0;
elsebit_cnt=1;
SCL=0;
returnbit_cnt;
}
uchariic_read_byte()
{
ucharbit_cnt,rdata;
SDA=1;
for(bit_cnt=0;bit_cnt<8;bit_cnt++)
{
SCL=0;
delay_10us();
SCL=1;
delay_10us();
rdata<<=1;
if(SDA==1)rdata|=0x01;
delay_10us();
}
SCL=0;
returnrdata;
}
uchariic_write_str(ucharsla,ucharsuba,uchar*s,ucharlen)
{
uchari;
iic_start();
if(iic_write_byte(sla)==0)return0;
if(iic_write_byte(suba)==0)return0;
for(i=0;i { if(iic_write_byte(*s++)==0)return0; } iic_stop(); return1; } uchariic_read_str(ucharsla,ucharsuba,uchar*s,ucharlen) { uchari; iic_start(); if(iic_write_byte(sla)==0)return0; if(iic_write_byte(suba)==0)return0; iic_start(); if(iic_write_byte(sla|0x01)==0)return0; for(i=0;i { *s++=iic_read_byte(); iic_ack(0); } *s=iic_read_byte(); iic_ack (1); iic_stop(); return1; } voiddelay_ms(uintz) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } voiddelay(ucharx)//延时x*0.14ms { uchari; while(x--) for(i=0;i<13;i++); } voiddelay1(uchart)//节拍延迟 { unsignedchart1; unsignedlongt2; for(t1=0;t1 for(t2=0;t2<7500;t2++) {;} TR0=0; } /*------------------------------------------------ 定时器0初始化 ------------------------------------------------*/ voidTIM0init()//定时器0初始化(用于音符的频率的控制) { TMOD=0x21;//定时器0工作方式2,TH0是重装值,TL0是初值 ET0=1;//开中断 TH1=0X00; TL1=0X00; TR1=1; } /*------------------------------------------------ 外部中断0初始化 ------------------------------------------------*/ voidEX0init() { ET1=1; IT1=1;//指定外部中断0下降沿触发,INT0(P3.2) EX1=1;//使能外部中断 EA=1;//开总中断 } #defineucharunsignedchar #defineuintunsignedint #definedelay_10us()_nop_();_nop_();_nop_();_nop_();_nop_();\ _nop_();_nop_();_nop_();_nop_();_nop_() #defineiic_start()SDA=1;SCL=1;delay_10us();SDA=0;delay_10us();SCL=0 #defineiic_stop()SDA=0;SCL=1;delay_10us();SDA=1;delay_10us() #defineiic_ack(X)SDA=(X)&0x01;delay_10us();SCL=1;delay_10us();SCL=0 #defineAT24C160xa0 //sbits=P3^7; sbits=P1^5; sbitSCL=P3^3; sbitSDA=P3^2; //sbitIR=P3^2;//红外接口标志 sbitIR=P3^3;//红外接口标志 voiddelay_ms(uintz); voiddelay1(uchart); voiddelay(ucharx); voidsong(uchartimer0h,uchartimer0l,uchartime); voidEX0init(); voidTIM0init(); //voidIr_work(); //voidIrcordpro(); uchariic_read_str(ucharsla,ucharsuba,uchar*s,ucharlen); uchariic_write_str(ucharsla,ucharsuba,uchar*s,ucharlen); uchariic_read_byte(); uchariic_write_byte(ucharwdata); #include #include #include"红外音乐.h" ucharirtime;//红外用全局变量 ucharIRcord[4]; uchartimer0h,timer0l,time,irpro_ok; ucharflag=0; ucharcodemusic1[]= { 5,2,2,6,1,2,1,2,4,2,2,2,3,2,1,1,2,1,3,1,2,2,2,4,5,2,3, 2,0,2,2,2,2,1,1,6,3,3,3,0,6,6,6,6,5,5,3,3,2,0,2, 2,2,2,1,1,5,3,0,6,6,6,1,3,2,2,3,2,0,2,2,2,2,1,6,1,1,1, }; //音阶频率表高八位 ucharcodea[]= { 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, }; //音阶频率表低八位 ucharcodeb[]= { 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i 0xEE,0x44,0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, }; ucharcodemusic2[]= { 5,0,1,5,0,1,3,1,1,2,1,1,2,1,1,1,1,1,3,1,1,3,1,1,2,1,1,2,1,4,5,0,1, 5,0,1,3,1,1,2,1,1,2,1,1,1,1,1,2,1,1,3,1,1,3,1,4,5,0,1,5,0,1,5,0,1, 5,0,1,3,1,1,2,1,1,2,1,1,1,1,1,3,1,1,3,1,1,2,1,1,2,1,4,2,1,1,1,1,1, 3,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,8,3,1,1,2,1,1,2,1,1,1,1,1,1,1,1,2,1,1, 2,1,6,3,1,1,2,1,2,1,1,1,1,1,1,5,0,1,6,0,1,5,0,1,5,0,6,3,1,1,2,1,1,2,1,1,1,1,1,1,1,1,2,1,1,2,1,6, 5,0,1,3,1,1,2,1,2,3,1,1,3,1,4, }; //一个音符有三个数字。 前为第几个音、中为第几个八度、后为时长(以半拍为单位)。 //6,2,3分别代表: 6,中音,3个半拍; //5,2,1分别代表: 5,中音,1个半拍; //3,2,2分别代表: 3,中音,2个半拍; //5,2,2分别代表: 5,中音,2个半拍; //1,3,2分别代表: 1,高音,2个半拍; voidIr_work()//红外键值散转程序 { switch(IRcord[2])//判断第三个数码值 { case0x0c: flag=1;break;//按下遥控器第一个按键CH-,则流水灯启动 case0x18: flag=2;break;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 报告 211