您的当前位置:首页正文

单片机课程设计报告2

2024-09-08 来源:好走旅游网
河海大学计算机及信息工程学院(常州)

课程设计报告

题 目 电 子 琴 专业 学号 0862910234 授课班号 275507 学生姓名 郭 凌 羽 指导教师 金 纪 东 完成时间 2010年11月18日

摘要

此次课程设计以“电子琴”为设计题目,采用51单片机最小系统为控制核心,以8个红外光电对管作为电子琴琴键,由LM386组成的音频驱动模块驱动扬声器发声。实现了14阶音频的弹奏发声以及自动播放发声功能,能够进行简单的弹奏和音乐播放。

目录

1、设计任务及要求....................................................3 1.1基本功能........................................................................................3

1.2课题要求及指标...............................................................................3

2

2、总体框图设计.......................................................3 3、原理电路设计.......................................................4 3.1 51单片机最小系统设计......................................................................4

3.2光电对管感应电路..............................................................................4 3.2.1红外检测基本单元电路.................................................................4 3.2.2光电感应整体电路设计.................................................................5 3.3 音频驱动电路设计.............................................................................6

4、系统程序设计.......................................................7 5、总结....................................................................10

5.1遇到的困难...........................................................................................10

5.2最终实物效果图....................................................................................10

一、 设计任务及要求

1.1基本功能:

该课题基本思路是利用单片机定时器来产生固定频率的方波信号以推动喇叭发出旋律。通过手触光电对管改变光电对管的逻辑电平值,单片机检测到相应信号使蜂鸣器发出相对音阶单音

1.2课题要求及指标:

3

(1)控制模块选用51单片机,应完成51单片机最小应用系统的设计; (2)采用8位光电对管对应8阶音符;

(3)通过单片机定时器来产生固定频率的方波信号以推动蜂鸣器发出旋律,用户可以自由地输入音符,从而使扬声器发出悦耳的音乐。

二、 总体框图设计

2.1系统原理框图:

光电对管感应模块

单片机 驱动扬声器发声 图2.1 如图2.1所示,整个系统分三个模块,单片机模块电路为单片机最小系统电路组成,是整个系统运行的控制核心。光电对管感应模块由红外光检测电路模块和电压比较电路组成,起着电子琴琴键的作用,能将检测到的光信号转变为电信号传送给单片机。扬声器发生模块由音频驱动电路和扬声器组成,能够接收单片机发送过来的信号并转换为对应频率的声音。

三、 原理电路设计

3.1 51单片机最小系统设计

4

图 3.1

如图3.1所示,该51单片机最小系统主要包括单片机I/O口,5V直流电源输入口,时钟震荡电路,上电复位及手动复位电路,外部中断INT0触发按钮S3,ISP下载线接口电路等。

3.2 光电对管感应电路

3.2.1红外检测基本单元电路

图 3.2.1

5

如图3.2.1所示,采用 LM339 做电压比较器,在送单片机的输出端需加约 2K 欧姆的上拉电阻连至 5V,这样才能保证比较器在输出高电平时有5V左右的高电平输出。图中 R1为限流电阻,不同大小的限流电阻决定了红外发射管的发射功率,R1 越小,红外发射管的功率就越大,多个并联后能耗也就大幅增加,但是同时增加了光电管的探测距离,图中的 R3 为分压电阻,为比较器提供参考电压。红外光电管分为两部分,一部分为无色透明类似于 LED,这是红外的发射部分,给他通电后能够产生人眼不可见的红外光,另外一部分为黑色的红外接收部分,它的电阻会随着接收到红外光的多少而变化。

3.2.2光电感应整体电路设计

图 3.2.2

如图3.2.2所示,P1~P8分别为8个光电对管,为了实现8路光电对管

6

弹奏的要求,采用了两片LM339芯片作比较器,最终信号由P10口输出给单片机。

3.3 音频驱动电路设计

图3.3

如图3.3所示,分别是其原理图和PCB图,在音频驱动电路中采用了声频功率放大器LM386来驱动扬声器发声,工作时P2口为单片机PWM波音频信号输入端,P1口为短路帽接口,可实现人为选择10倍或20倍放大倍数。

7

四、 系统程序设计

#include for(j=248;j>0;j--); #define uint unsigned int } #define uchar unsigned char void key1()interrupt 0 void playsong(uchar code a[]); { sbit voice=P3^7; delay10ms(); sbit k1=P1^0; if(k9==0) sbit k2=P1^1; { sbit k3=P1^2; dpjs=0; sbit k4=P1^3; temp++; sbit k5=P1^4; if(temp==2)temp=0; sbit k6=P1^5; } sbit k7=P1^6; while(k9==0){voice=!voice;del(0xsbit k8=P1^7; 55);} sbit k9=P3^2; } uchar str,temp=0,zdjs=0, jp; time0() interrupt 1 using 1 uint dpjs=0; { uchar yj; TH0=0xd8, TL0=0xef; Uchar code sound[]={0, zdjs++; 0x60,0x55,0x4c,0x48,0x40,0x39,0x33, } 0x30,0x2b,0x26,0x24,0x20,0x1c,0x19, void main(void) 0x18,0x15,0x13,0x12,0x10,0x0e,0x0d, }; { //1 2 3 4 5 6 7 //TMOD=0x01,IE=0x82;

uchar code Tiankong[]={0xff,……,0x00 uint a=7; }; TCON=0X01;

uchar code laohu[]={0xff,……0x00,}; IE=0x83; del(yj) TMOD=0x01; { TH0=0xd8; uchar yj2=2; TL0=0xef; while(yj!=0) while(1) { {if(temp==0) while(yj2!=0) {if(k8){a=0;} { else {a=7;} yj2--; str=P1; } switch(str&0x7f) yj2=2; { yj--; case 0x01: } while(k1){voice=!voice;del(sound[1+a]} );} void delay10ms(void) { break; unsigned char i,j; case 0x02: for(i=20;i>0;i--) while(k2){voice=!voice;del(sound[2+a]

8

);} );} );} );} );} );} ;}

break;

case 0x04:while(k3){voice=!voice;del(sound[3+a] break;

case 0x08:while(k4){voice=!voice;del(sound[4+a] break;

case 0x10:while(k5){voice=!voice;del(sound[5+a] break;

case 0x20:while(k6){voice=!voice;del(sound[6+a] break;

case 0x40:while(k7){voice=!voice;del(sound[7+a] break;

//case 0x80:while(P1^7){voice=!voice;del(sound[])

}

//

break;

voice=0; break;

default:

}

if(temp==1)

{playsong(Tiankong); }

if(temp==2)

{playsong(laohu); } } }

void playsong(uchar code a[]) {

TR0=1; zdjs=0;

dpjs++; yj=a[dpjs]; dpjs++; jp=a[dpjs]; while(zdjs!=jp) { if(yj!=0xff) {if(yj!=0)

{voice=!voice; del(yj); } else

{dpjs=0; break; } } else

{voice=0; del(jp); } }

if(temp) {TR0=0; } }

原理说明:该程序有两个功能,一个是自动播放音乐功能,另一个是手动弹奏功能。在手动弹奏功能中可以实现14个音频的弹奏发声,8个光电对管中其中7个对应duo到xi的7个音符,第8个用作高低音符识别。弹奏功能和自动播放功能的切换由一个接至外部中断引脚的按钮来控制,在自动播放中,程序通过循环顺序读取存于ROM中的数组值,依次获取对应的音频值和节拍时间长度值。

五、 总结

9

5.1遇到的困难

此次课程设计首先遇到的问题是硬件的制作问题,由于选题是电子琴,根据题目要求除了需要51单片机最小系统板外,还需要添加光电感应模块以及音频驱动模块,由于缺乏这些模块的制作材料,因此采取了一些较为经济的方式来解决,比如直接将之前制作的光电循迹智能小车的循迹模块直接用作电子琴的光电感应按键,以及直接将收音机的一些元件用来制作音频驱动模块等。

另外还遇到一个问题是在光电感应模块的使用过程中,发现这一模块的功耗比较大,使用和时间一长就会使整个系统的电压值不稳定且无法正常工作,针对这一个问题一方面采取了加大红外发射管的限流电阻阻值来降低其功耗,另一方面采用性能较好的稳压芯片LM2940来为整个系统供电,基本能使整个系统能较正常的工作。

其次遇到的困难便是软件编程上面的问题,要使单片机自动播放音乐就必须将现实中的乐谱转化为单片机可识别的数组编码,这一过程较为复杂麻烦,在基本掌握了一定的乐理知识以后,加上不断的调试,这一问题最终也得到了解决。

5.2最终实物效果图

10

因篇幅问题不能全部显示,请点此查看更多更全内容