单片机课程设计电子音调发生器.docx

上传人:b****4 文档编号:5924784 上传时间:2023-05-09 格式:DOCX 页数:52 大小:640.65KB
下载 相关 举报
单片机课程设计电子音调发生器.docx_第1页
第1页 / 共52页
单片机课程设计电子音调发生器.docx_第2页
第2页 / 共52页
单片机课程设计电子音调发生器.docx_第3页
第3页 / 共52页
单片机课程设计电子音调发生器.docx_第4页
第4页 / 共52页
单片机课程设计电子音调发生器.docx_第5页
第5页 / 共52页
单片机课程设计电子音调发生器.docx_第6页
第6页 / 共52页
单片机课程设计电子音调发生器.docx_第7页
第7页 / 共52页
单片机课程设计电子音调发生器.docx_第8页
第8页 / 共52页
单片机课程设计电子音调发生器.docx_第9页
第9页 / 共52页
单片机课程设计电子音调发生器.docx_第10页
第10页 / 共52页
单片机课程设计电子音调发生器.docx_第11页
第11页 / 共52页
单片机课程设计电子音调发生器.docx_第12页
第12页 / 共52页
单片机课程设计电子音调发生器.docx_第13页
第13页 / 共52页
单片机课程设计电子音调发生器.docx_第14页
第14页 / 共52页
单片机课程设计电子音调发生器.docx_第15页
第15页 / 共52页
单片机课程设计电子音调发生器.docx_第16页
第16页 / 共52页
单片机课程设计电子音调发生器.docx_第17页
第17页 / 共52页
单片机课程设计电子音调发生器.docx_第18页
第18页 / 共52页
单片机课程设计电子音调发生器.docx_第19页
第19页 / 共52页
单片机课程设计电子音调发生器.docx_第20页
第20页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计电子音调发生器.docx

《单片机课程设计电子音调发生器.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子音调发生器.docx(52页珍藏版)》请在冰点文库上搜索。

单片机课程设计电子音调发生器.docx

单片机课程设计电子音调发生器

单片机课程设计

实验报告

 

电子音调发生器

 

姓名:

 

日期:

2009年6月29日星期一

(一)实验目的

1.了解计算机发声原理。

2.熟悉定时器和键盘扫描电路的工作原理及编程方法。

(二)设计任务及要求

利用实验平台上的开关k0-k7和蜂鸣器设计电子音调发生器,要求:

1.利用实验平台上开关k0-k7进行音调选择,即拨动不同的开关产生不同的音调,依次拨动K0~K7,蜂鸣器发出1234567i八个音调。

2.编写2支歌曲,并可进行选择播放。

(三)工作原理及设计思路

音节由不同频率的方波产生,音节与频率的关系如表1所示。

要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用计时器计时此半周期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。

在ZKS-03实验仪上,产生方波的I/O脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。

这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。

另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。

只要设定延时时间,就可求得节拍的时间。

延时作为基本延时时间,节拍值只能是它的整数倍,

每个音节相应的定时器初值X可按下法计算:

(1/2)*(1/f)=(12/fose)*(216-x)

即x=216-(fose/24f)

其中f:

音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H其它的可同样求得。

表1

音调

频率(Hz)

X(HEX)

1

262

F921

2

294

F9E1

3

330

FA8C

4

349

FAD8

5

392

FB68

6

440

FBE9

7

494

FC5B

i

523

FC8F

(四)实现功能设计

实现两个主要功能:

电子琴与音乐播放;一个辅助功能:

在液晶上显示相关信息。

1、电子琴:

4*4的矩阵16个按键,按键0实现两个功能的切换,其余按键分别发出音调 低音5、6、7,中音1、2、3、4、5、6、7,高音1、2、3、4、5。

发音的同时在液晶显示屏上显示出对应的音调。

2、音乐播放:

按键0实现两个功能的切换,按键1实现播放类型选择(单曲循环播放、所有循环播放),其余按键分别对应一首歌。

目前已经有9首歌。

播放的同时,在液晶上显示出歌名。

(五)软件设计

根据要实现的功能,流程图如下:

 

 

 

#include

#include

#definenop_nop_()

#defineucharunsignedchar

#defineuintunsignedint

#definePAI_BASE15

#defineMUSIC_NUM9

#defineSCAN_CYCLE500

#defineBEEPP3_3

/***************液晶显示相关变量***********************************/

sbitLCD_RS=P2^7;

sbitLCD_RW=P2^6;

sbitLCD_EN=P2^5;

staticucharth0_f;//在中断中装载的T0的值高8位

staticuchartl0_f;//在中断中装载的T0的值低8位

statictimebuffer,Record_counter,Record_flag=0;

staticucharkey2,key=16,scounter=0,Record_time;

staticuchars_musicCounter=0x00,s_tableCounter;

bitRplay_flag=0;

bitK0_flag=0;

bitMusic_flag0;

bitMusic_flag=0;

bitFreq_flag=0;

bitdisptime_flag=0;

bitmusicAutoFlag=0;

//sbitBEEP=P3_3;//喇叭输出脚

//延时子程序1

voiddelay(intms)

{

inti;

while(ms--)

{

for(i=0;i<250;i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

 

/*******************************************************************/

/**/

/*检查LCD忙状态*/

/*lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数据。

*/

/**/

/*******************************************************************/

 

bitlcd_busy()

{

bitresult;

LCD_RS=0;

LCD_RW=1;

LCD_EN=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(bit)(P0&0x80);

LCD_EN=0;

returnresult;

}

 

/*******************************************************************/

/**/

/*写指令数据到LCD*/

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。

*/

/**/

/*******************************************************************/

 

voidlcd_wcmd(ucharcmd)

{

while(lcd_busy());

LCD_RS=0;

LCD_RW=0;

LCD_EN=0;

_nop_();

_nop_();

P0=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN=1;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN=0;

}

 

/*******************************************************************/

/**/

/*写显示数据到LCD*/

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。

*/

/**/

/*******************************************************************/

 

voidlcd_wdat(uchardat)

{

while(lcd_busy());

LCD_RS=1;

LCD_RW=0;

LCD_EN=0;

P0=dat;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN=1;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN=0;

}

 

/*******************************************************************/

/**/

/*设定显示位置*/

/**/

/*******************************************************************/

 

voidlcd_pos(ucharpos)

{

lcd_wcmd(pos|0x80);//数据指针=80+地址变量

}

/*******************************************************************/

/**/

/*LCD初始化设定*/

/**/

/*******************************************************************/

voidlcd_init()

{

delay(15);//等待LCD电源稳定

lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据

delay(5);

lcd_wcmd(0x38);

delay(5);

lcd_wcmd(0x38);

delay(5);

 

lcd_wcmd(0x0c);//显示开,关光标

delay(5);

lcd_wcmd(0x06);//移动光标

delay(5);

lcd_wcmd(0x01);//清除LCD的显示内容

delay(5);

}

 

/*******************************************************************/

/**/

/*清屏子程序*/

/**/

/*******************************************************************/

 

voidlcd_clr()

{

lcd_wcmd(0x01);//清除LCD的显示内容

delay(5);

}

//静态显示字符串

voidlcd_string(char*strpoint)/*在当前显示位置显示LCD字符串*/

{registeri=0;

while(strpoint[i]!

=0){

lcd_wdat(strpoint[i]);

i++;

}

}

/*************************************************************************/

/*ConstantTables*/

constcharcodec_music1[]={0x82,0x01,0x81,0x94,0x84,/*生日快乐歌*/

0xb4,0xa4,0x04,

0x82,0x01,0x81,0x94,0x84,

0xc4,0xb4,0x04,

0x82,0x01,0x81,0xf4,0xd4,

0xb4,0xa4,0x94,

0xe2,0x01,0xe1,0xd4,0xb4,

0xc4,0xb4,0x04,

0x00};

constcharcodec_music2[]={0x62,0x52,/*两只蝴蝶*/

0x64,0x64,0x02,0x52,0x62,0x52,

0x44,0x44,0x04,0x22,0x42,

0x54,0x52,0x62,0x52,0x42,0x22,0x42,

0x14,0x14,0x04,0x62,0x52,

0x64,0x64,0x02,0x52,0x62,0x52,

0x44,0x44,0x04,0x22,0x42,

0x54,0x52,0x62,0x52,0x42,0x22,0x42,

0x54,0x54,0x04,0x62,0x82,

0x84,0x84,0x02,0x82,0x92,0x82,

0x64,0x64,0x04,0x52,0x52,

0x54,0x52,0x62,0x52,0x42,0x22,0x91,0x41,

0x42,0x42,0x44,0x44,0x44,

0x02,0x82,0x82,0x92,

0xb2,0xa2,0xa2,0x92,0x64,0x52,0x62,

0x64,0x64,0x02,0x62,0x62,0x82,

0x94,0x94,0x02,0x22,0x62,0x52,

0x54,0x54,0x04,0x62,0x82,

0x82,0x62,0x84,0x02,0xb2,0xb2,0xa2,

0x92,0xa2,0x64,0x02,0x92,0x92,0xa2,

0x92,0x82,0x62,0x52,0x52,0x62,0x52,0x62,

0x84,0x84,0x02,0x82,0x82,0x92,

0x92,0x82,0x62,0x52,0x52,0x12,0x12,0x22,

0x44,0x44,0x44,0x44,

0x00};

constcharcodec_music3[]={0x04,0x42,0x41,0x51,

0x62,0x62,0x52,0x41,0x51,0x54,0x02,0x41,0x51,/*老鼠爱大米*/

0x62,0x62,0x52,0x42,0x44,0x02,0x11,0x21,

0x14,0x11,0x11,0x21,0x41,0x44,0x02,0x42,

0x42,0x42,0x42,0x41,0x51,0x54,0x42,0x51,0x61,

0x62,0x62,0x82,0x91,0x51,0x54,0x62,0x51,0x41,

0x42,0x42,0x52,0x61,0x81,0x84,0x02,0x81,0x81,

0x92,0x41,0x41,0x42,0x61,0x01,0x52,0x42,0x42,0x51,0x41,

0x44,0x44,0x44,0x62,0x61,0x81,

0x82,0x81,0x81,0x82,0x81,0x91,0x94,0x62,0x52,

0x42,0x42,0x42,0x51,0x61,0x64,0x02,0x61,0x81,

0x82,0x82,0x82,0x91,0xb1,0xb2,0x92,0x82,0x62,

0x52,0x42,0x42,0x22,0x54,0x02,0x61,0x81,

0x82,0x82,0x81,0x92,0x81,0x94,0x62,0x52,

0x42,0x42,0x42,0x51,0x61,0x64,0x02,0x61,0x81,

0x82,0x82,0x82,0x91,0xb1,0xb2,0x92,0x82,0x61,0x51,

0x52,0x52,0x54,0x54,0x41,0x62,0x71,

0x62,0x52,0x54,0x54,0x62,0x51,0x41,

0x44,0x62,0x51,0x41,0x44,0x62,0x52,

0x62,0x42,0x62,0x91,0x81,0x84,0x02,0x61,0x81,

0x92,0x91,0x81,0x82,0x91,0x81,0x84,0x61,0x51,0x42,

0x52,0x51,0x61,0x52,0x41,0x51,0x41,0x53,0x62,0x51,0x41,

0x44,0x62,0x51,0x41,0x44,0x62,0x52,

0x62,0x42,0x61,0x92,0x81,0x84,0x02,0x61,0x81,

0x92,0x92,0xb2,0x81,0x91,0x82,0x01,0x81,0x61,0x51,0x41,

0x54,0x51,0x41,0x51,0x61,0x54,0x62,0x62,

0x54,0x02,0x42,0x44,0x44,

0x00};

constcharcodec_music4[]={0x04,0x02,0x41,0x51,0x62,0x61,0x61,0x62,0x52,/*梦醒时分*/

0x62,0x81,0x61,0x62,0x61,0x81,0x92,0x92,0x92,0xa2,

0x82,0x62,0x62,0x62,0x61,0x51,0x42,0x41,0x41,0x42,0x22,

0x62,0x81,0x41,0x44,0x51,0x52,0x01,0x52,0x42,

0x81,0x61,0x52,0x52,0x41,0x51,0x62,0x61,0x61,0x62,0x52,

0x62,0x81,0x61,0x62,0x61,0x81,0x92,0x91,0x91,0x92,0xa2,

0x82,0x62,0x61,0x81,0x81,0x81,0x92,0xb2,0xb2,0x92,

0x72,0x52,0x52,0x81,0x81,0x92,0xb2,0xb2,0x92,

0xb2,0xc2,0xc4,0xc4,0x01,0x81,0x81,0x81,

0xd2,0xd2,0xd2,0xd2,0xd2,0xc1,0xc1,0xc2,0xb1,0xa1,

0xb2,0xb2,0xb2,0xc2,0x62,0x82,0x82,0x81,0x81,

0x92,0xb1,0xb1,0xb2,0xb2,0xc2,0x91,0xb1,0xb2,0xb1,0xb1,

0xc2,0xc1,0xc1,0xc2,0xb2,0xd2,0xc1,0x81,0x81,0x81,0x81,0x81,

0xd2,0xd2,0xd2,0xf2,0xd2,0xc1,0xc1,0xc2,0xb1,0xa1,

0xb2,0xb2,0xb2,0xc2,0x62,0x82,0x82,0x81,0x81,

0x92,0xb1,0xb1,0xb2,0xb1,0xb1,0xc2,0x91,0xb1,0xb2,0xb1,0xb1,

0xc2,0xc1,0xc1,0xc2,0xb2,0xd4,0xc2,0x01,0xb1,

0xb4,0xb4,0xb4,0xb4,

0x00};

constcharcodec_music5[]={0x54,0x64,0x64,/*大长今*/

0x64,0x02,0x52,0x44,

0x24,0x44,0x44,

0x51,0x43,0x44,0x44,

0x54,0x64,0x64,

0x64,0x02,0x82,0x64,

0x64,0x54,0x64,

0x64,0x64,0x64,

0x84,0x94,0x94,

0x94,0x84,0x64,

0x64,0x84,0x94,

0x81,0x91,0x82,0x84,0x84,

0x54,0x64,0x64,

0x54,0x02,0x62,0x64,

0x54,0x64,0x24,

0x41,0x23,0x94,0x94,

0x24,0x24,0x24,

0x54,0x64,0x64,

0x64,0x02,0x52,0x44,

0x24,0x44,0x44,

0x51,0x43,0x44,0x44,

0x54,0x64,0x64,

0x64,0x02,0x82,0x64,

0x64,0x54,0x64,

0x64,0x64,0x64,

0x84,0x94,0x94,

0x94,0x02,0x82,0x64,

0x64,0x84,0x94,

0x84,0x84,0x84,

0x54,0x64,0x64,

0x54,0x02,0x62,0x64,

0x54,0x64,0x24,

0x41,0x23,0x24,0x24,

0x24,0x24,0x24,

0x54,0x02,0x42,0x24,

0x54,0x02,0x42,0x24,

0x54,0x64,0x44,

0x54,0x02,0x62,0x84,

0x94,0x02,0x82,0x64,

0x54,0x02,0x42,0x24,

0x24,0x14,0x24,

0x41,0x23,0x24,0x24,

0x24,0x24,0x24,

0x14,0x14,0x14,

0x14,0x02,0x22,0x42,0x52,

0x62,0x52,0x44,0x02,0x22,

0x44,0x44,0x54,

0x64,0x64,0x64,

0x64,0x64,0x84,

0x94,0x02,0xb2,0x94,

0x84,0x84,0x84,

0x84,0x61,0x81,0x92,0x04,

0x92,0x82,0x64,0x02,0x52,

0x64,0x02,0x52,0x62,0x52,

0x44,0x44,0x44,

0x41,0x23,0x24,0x44,

0x54,0x54,0x54,

0x54,0x64,0x64,

0x44,0x41,0x23,0x24,

0x24,0x24,0x24,

0x00};

constcharcodec_music6[]={0x24,0x42,0x52,0x64,0x62,0x92,/*漫步人生路*/

0x84,0x62,0x52,0x64,0x02,0x62,

0x72,0x62,0x62,0x52,0x52,0x42,0x41,0x31,0x22,

0x44,0x02,0x5

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

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2