单片机课程设计电子音调发生器Word下载.docx
《单片机课程设计电子音调发生器Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计电子音调发生器Word下载.docx(52页珍藏版)》请在冰点文库上搜索。
![单片机课程设计电子音调发生器Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/42bed3aa-a083-4cbe-a2c9-23aeeaf0f405/42bed3aa-a083-4cbe-a2c9-23aeeaf0f4051.gif)
其中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<
AT89X52.H>
intrins.h>
#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_();
}
}
/*******************************************************************/
/**/
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
bitlcd_busy()
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
result=(bit)(P0&
0x80);
LCD_EN=0;
returnresult;
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
voidlcd_wcmd(ucharcmd)
while(lcd_busy());
LCD_RW=0;
P0=cmd;
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
voidlcd_wdat(uchardat)
LCD_RS=1;
P0=dat;
/*设定显示位置*/
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(0x0c);
//显示开,关光标
lcd_wcmd(0x06);
//移动光标
lcd_wcmd(0x01);
//清除LCD的显示内容
/*清屏子程序*/
voidlcd_clr()
{
//静态显示字符串
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,
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,
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,
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,
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,
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,0x02,0x62,0x64,
0x54,0x64,0x24,
0x41,0x23,0x94,0x94,
0x24,0x24,0x24,
0x64,0x64,0x64,
0x94,0x02,0x82,0x64,
0x84,0x84,0x84,
0x54,0x64,0x24,
0x41,0x23,0x24,0x24,
0x54,0x02,0x42,0x24,
0x54,0x64,0x44,
0x54,0x02,0x62,0x84,
0x24,0x14,0x24,
0x14,0x14,0x14,
0x14,0x02,0x22,0x42,0x52,
0x62,0x52,0x44,0x02,0x22,
0x44,0x44,0x54,
0x64,0x64,0x84,
0x94,0x02,0xb2,0x94,
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,
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