单片机课设报告211.docx

上传人:b****9 文档编号:25800727 上传时间:2023-06-14 格式:DOCX 页数:30 大小:841.89KB
下载 相关 举报
单片机课设报告211.docx_第1页
第1页 / 共30页
单片机课设报告211.docx_第2页
第2页 / 共30页
单片机课设报告211.docx_第3页
第3页 / 共30页
单片机课设报告211.docx_第4页
第4页 / 共30页
单片机课设报告211.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

单片机课设报告211.docx

《单片机课设报告211.docx》由会员分享,可在线阅读,更多相关《单片机课设报告211.docx(30页珍藏版)》请在冰豆网上搜索。

单片机课设报告211.docx

单片机课设报告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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1