基于51单片机的点歌系统.docx

上传人:b****2 文档编号:2752221 上传时间:2023-05-04 格式:DOCX 页数:30 大小:269.09KB
下载 相关 举报
基于51单片机的点歌系统.docx_第1页
第1页 / 共30页
基于51单片机的点歌系统.docx_第2页
第2页 / 共30页
基于51单片机的点歌系统.docx_第3页
第3页 / 共30页
基于51单片机的点歌系统.docx_第4页
第4页 / 共30页
基于51单片机的点歌系统.docx_第5页
第5页 / 共30页
基于51单片机的点歌系统.docx_第6页
第6页 / 共30页
基于51单片机的点歌系统.docx_第7页
第7页 / 共30页
基于51单片机的点歌系统.docx_第8页
第8页 / 共30页
基于51单片机的点歌系统.docx_第9页
第9页 / 共30页
基于51单片机的点歌系统.docx_第10页
第10页 / 共30页
基于51单片机的点歌系统.docx_第11页
第11页 / 共30页
基于51单片机的点歌系统.docx_第12页
第12页 / 共30页
基于51单片机的点歌系统.docx_第13页
第13页 / 共30页
基于51单片机的点歌系统.docx_第14页
第14页 / 共30页
基于51单片机的点歌系统.docx_第15页
第15页 / 共30页
基于51单片机的点歌系统.docx_第16页
第16页 / 共30页
基于51单片机的点歌系统.docx_第17页
第17页 / 共30页
基于51单片机的点歌系统.docx_第18页
第18页 / 共30页
基于51单片机的点歌系统.docx_第19页
第19页 / 共30页
基于51单片机的点歌系统.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机的点歌系统.docx

《基于51单片机的点歌系统.docx》由会员分享,可在线阅读,更多相关《基于51单片机的点歌系统.docx(30页珍藏版)》请在冰点文库上搜索。

基于51单片机的点歌系统.docx

基于51单片机的点歌系统

湖南人文科技学院

课程设计报告

课程名称:

单片机原理及应用课程设计

 

设计题目:

远程点歌系统

系别:

通信与控制工程系

专业:

通信工程

班级:

08级通信一班

学生姓名:

曹桐军肖行

学号:

0841613708407227

起止日期:

2010年12月20日—2011年1月2日

指导教师:

方智文岳舟

教研室主任:

刘建闽

指导教师评语:

 

指导教师签名:

年月日

成绩评定

项目

权重

成绩

1、设计过程中出勤、学习态度等方面

0.2

2、课程设计质量与答辩

0.5

3、设计报告书写及图纸规范程度

0.3

总成绩

教研室审核意见:

 

教研室主任签字:

年月日

教学系审核意见:

 

主任签字:

年月日

摘要

本设计是一个基于AT89C52系列单片机的点歌系统,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能点歌系统。

该点歌系统主要由单片机、8255芯片、LED显示电路、复位电路、时钟电路以及蜂鸣器组成。

用户从客户机选择要播放的曲目。

客户机通过串口将选择信息传给单片机。

单片机根据客户机给的信息做出选择,播放预先存放在ROM中的音乐,并用LED显示播放歌曲。

放完后在提示客户机选择下一曲,用蜂鸣器播放音乐。

本设计利用KEIL编程软件对点歌系统源程序进行编程并调试,节约了设计时间。

关键字:

点歌;AT89C52单片机;LED;串口;

目录

1.引言4

1.1设计目的4

1.2设计要求4

1.3设计内容4

2.设计方法对比4

2.1设计方案一5

2.2设计方案二5

2.3方案选择5

3.电路硬件分析5

3.1总体设计框图5

3.2AT89C52简介6

3.3LED显示电路设计与原理6

3.4时钟振荡电路7

3.5串口电路7

4.软件分析8

4.1音调的确定8

4.2节拍的确定9

4.3编码10

4.4软件程序设计12

4.4.1主程序流程图12

4.4.2播放音乐子程序流程图14

4.4.3程序源代码(见附录一)15

5.总结15

6.致谢16

参考文献16

附录一17

远程点歌系统

1.引言

随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。

点歌系统可以提高人们的精神文化享受。

传统点歌系统较为复杂,一般嵌入在一些专用影音设备中,且成本较高,本点歌系统是以单片机为核心元件的电子式点歌系统,体积小、重量轻、能演奏和旋音乐及使用方便,加之性价比较高,具有一定的商业价值。

1.1设计目的

(1)熟悉单片机的应用与开发;

(2)学习用C语言开发应用程序;

(3)学习远程控制与歌曲播放的开发。

1.2设计要求

利用单片机作为控制核心,完成一个从客户机选择的点歌系统。

具体要求如下:

(1)用户从客户机选择要播放的曲目;

(2)电脑通过串口将选择信息传给单片机。

(3)单片机根据电脑给的信息做出选择,播放预先存放在ROM中的音乐;

(4)用扬声器播放音乐完后,提示下一次选择。

1.3设计内容

(1)电路有两种工作模式:

暂停模式和播放模式。

(2)按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲。

(3)按下按键2进入花样灯模式,再按切换LED花样,共三种花样。

 

2.设计方法对比

本设计是一个基于AT89C52系列单片机的点歌系统,客户机选择所喜欢的歌曲,单片机执行音乐播放程序。

蜂鸣器发出某个音调,与之相对应的数码管显示播放的曲目。

硬件有单片机已确定,下面对软件设计语言进行比较:

2.1设计方案一

使用C语言,它是目前最流行的程序设计语言之一,具有简洁、灵活、实用、高效、可移植性好;它同时具备了高级语言和低级语言的特征,除此之外,C语言生成目标代码质量高、程序执行效率高。

2.2设计方案二

使用汇编语言,它能从分发挥指令系统功能和效率,可获得最简练的目标程序,特别是在一些实时控制系统中,采用汇编语言可以准确地计算出控制操作时间。

2.3方案选择

使用汇编语言,会使编程过程变得繁琐,复杂度上升,程序结构不易控制,加之音乐播放对实时要求不高;而C语言能极大地简化编程过程,大大的提高的效率与质量,故选择方案一。

 

3.电路硬件分析

3.1总体设计框图

3.2AT89C52简介

AT89C52是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C52单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

外形及引脚排列如图3.2所示

3.3LED显示电路设计与原理

LED显示电路是由6位LED数码管组成,连接方式为共阳极,数码管的位数由8255的PA控制,若为低电平则有效;数码管显示的内容的由8255的PB口控制。

 

3.4时钟振荡电路

AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。

这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。

外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。

对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。

如果使用石英晶体,我们推荐电容使用30PF

10PF,而如果使用陶瓷振荡器建议选择40PF

10PF。

用户也可以采用外部时钟。

采用外部时钟的电路如图示。

这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。

由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。

振荡器电路图如右。

3.5串口电路

由于单片机工作电压与客户机串口电压存在电压差,不能直接相连。

这里使用MAX232芯片转换电压,再接上标准串口CON32,从而达到与客户机通信的目的。

出口硬件连接电路图如下。

4.软件分析

音调、节拍以及编码的确定方法一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。

因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。

4.1音调的确定

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

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

(2)利用AT89C52的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。

此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

(3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系公式如下:

N=Fi

2

Fr

N:

计算值;Fi:

内部计时一次为1us,故其频率为1MHz;

其计数值的求法如下:

T=65536-N=65536-Fi

2

Fr

例如:

设K=65536,F=1000000=Fi=1MHz,球低音DO(261Hz)。

中音DO(523Hz)。

高音的DO(1046Hz)的计算值

T=65536-N=65536-Fi

2

Fr=65536-1000000

2

Fr=65536-500000/Fr

低音DO的T=65536-500000/262=63627

低音DO的T=65536-500000/523=64580

低音DO的T=65536-500000/1047=65059

C调各音符频率与计数值T的对照表如表4.1所示。

表4.1C调各音符频率与计数值T的对照表

低音

频率

T

参数

中音

频率

T

参数

高音

频率

T

参数

Do

262

1908

229

Do

523

956

115

Do

1046

57

57

Do﹟

277

1805

217

Do﹟

554

903

108

Do﹟

1109

54

54

Re

294

1701

204

Re

587

852

102

Re

1175

51

51

Re﹟

311

1608

193

Re﹟

622

804

97

Re﹟

1245

48

48

Mi

330

1515

182

Mi

659

759

91

Mi

1318

45

45

Fa

349

1433

172

Fa

698

716

86

Fa

1397

43

43

Fa﹟

370

1351

162

Fa﹟

740

676

81

Fa﹟

1480

41

41

So

392

1276

153

So

784

638

77

So

1568

38

38

So﹟

415

1205

145

So﹟

831

602

72

So﹟

1661

36

36

La

440

1136

136

La

880

568

68

La

1760

34

34

La﹟

464

1078

129

La﹟

932

536

64

La﹟

1865

32

32

Si

494

1012

121

Si

988

506

61

Si

1976

30

30

4.2节拍的确定

一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。

了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。

对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。

因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。

表4.2节拍与节拍码对照

节拍码

节拍数

节拍码

节拍数

1

1/4拍

1

1/8拍

2

2/4拍

2

1/4拍

3

3/4拍

3

3/8拍

4

1拍

4

2/1拍

5

1又1/4拍

5

5/8拍

6

1又1/2拍

6

3/4拍

8

2拍

8

1拍

A

2又1/2拍

A

1又1/4拍

C

3拍

C

1又1/2拍

F

3又3/4拍

每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5.2为节拍码的对照。

如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。

假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。

表4.31/4和1/8节拍的时间设定

曲调值

DELAY

曲调值

DELAY

调4/4

125毫秒

调4/4

62毫秒

调3/4

187毫秒

调3/4

94毫秒

调2/4

250毫秒

调2/4

125毫秒

4.3编码

先将歌曲的简谱进行编码,储存在一个数据类型为unsignedchar的数组中。

程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。

表4.4简谱对应的简谱码、T值、节拍数

简谱

发音

简谱码

T值

节拍码

节拍数

5

低音SO

1

64260

1

1/4拍

6

低音LA

2

64400

2

2/4拍

7

低音TI

3

64524

3

3/4拍

1

中音DO

4

64580

4

1拍

2

中音RE

5

64684

5

1又1/4拍

3

中音MI

6

64777

6

1又1/2拍

4

中音FA

7

64820

8

2拍

5

中音SO

8

64898

A

2又1/2拍

6

中音LA

9

64968

C

3拍

7

中音TI

A

65030

F

3又3/4拍

1

高音DO

B

65058

2

高音RE

C

65110

3

高音MI

D

65157

4

高音FA

E

65178

5

高音SO

F

65217

4.4软件程序设计

4.4.1主程序流程图

主程序代码:

voidmain(void)

{

TMOD=0x21;//定时器0,1都工作16位计数方式

ET0=1;//允许定时器0溢出中断;

EA=1;//允许总中断(如不使用中断,可用//屏蔽)

ES=1;//允许UART串口的中断

SCON=0x50;//串口工作方式1,

TH1=0xF3;//定时器初值高8位设置

TL1=0xF3;//定时器初值低8位设置

PCON=0x00;//波特率不倍频

TR1=1;//定时器启动

dis_flag=0;

a8255_CON=0x81;

a8255_PA=0xff;

dis_flag=0;

while

(1){

if(dis_flag==0)

{//PAUSE

leddisp[5]=0x11;leddisp[4]=0x0a;leddisp[3]=0x13;leddisp[2]=0x05;

leddisp[1]=0x0e;leddisp[0]=0x15;

}

else{//PLAY-X

leddisp[5]=0x11;leddisp[4]=0x12;leddisp[3]=0x0a;leddisp[2]=0x14;

leddisp[1]=0x10;

}

display();

if(dis_flag!

=0){voidsong();}

}

}

}

 

4.4.2播放音乐子程序流程图

播放音乐子程序代码:

voidsong(){

if(dis_flag!

=0){

while

(1){display();if(dis_flag!

=0)break;}

if(*pmusic==0x00){

fm=1;

TR0=0;

leddisp[0]=0x10;

UART_S(send_data);

dis_flag=0;

while

(1){display();if(dis_flag!

=0)break;}

}

else{leddisp[0]=re_temp;

music_temp=*pmusic;

beat=music_temp&0x0F;//取得节拍数

beat=beat*4;

freq=music_temp>>4;//取得音符编码

pmusic++;

if(freq==0)TR0=0;

else{

TR0=0;

FreqTemp=FreqTab[freq];

TL0=FreqTemp;

TH0=FreqTemp>>8;

TR0=1;

}

delay(beat);

}

}

4.4.3程序源代码(见附录一)

 

5.总结

单片机的设计至今为止已经进入了令人鼓舞的阶段,在进行了一个学期的摸索与实验,使我不仅仅是对于单片机入门软件与硬件的常用设计与功能,还使我对于一项设计研究的制作过程所需要的详细步骤和具体的实现方法的力度的掌握。

当然在这次宝贵的课程设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,用受益匪浅这个词语来概括这次难忘的活动我觉得再合适不过了。

但是,光是完成了作品还是不可以自我满足的,在从一开始的时候就怀着将作品制作得更加人性化,更加令人满意,更加地使功能完美又方便地被应用领域这个最终目的下,随着对单片机这门学科的认识加深,到达了拓展的程度,我想这个目的将在不远的时期内被实现。

总之,这次设计从软件编写、调试到软硬件联机调试,我倾注了大量的时间和心血。

真是曾经为程序的编写而冥思查找过,曾经为无法找出错误而郁闷苦恼过,也曾经为某一功能不能实现而犹豫彷徨过,但最终我成功了。

我不仅品味到了结果的喜悦,更明白了过程的弥足珍贵。

6.致谢

感谢我的指导老师方智文,他们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。

感谢我的室友们,是你们和我共同维系着彼此之间兄弟般的感情,维系着寝室那份家的融洽。

从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。

参考文献

[1]张鑫.单片机原理及应用,电子工业出版社,2005.8.

[2]康华光.模拟电子技术基础(第四版)[M],武汉:

华中理工大学出版社,1999.

[3]谭浩强.C语言程序设计(第二版)[M],北京:

清华大学出版社,1991.

[4]楼然苗.单片机课程设计指导(第一版)[M],北京:

航空航天大学出版社,2007.7.

附录一

程序源代码:

#include

#include

#definea8255_PAXBYTE[0xD1FF]//PA口地址

#definea8255_PBXBYTE[0xD2FF]//PB口地址

#definea8255_CONXBYTE[0xD7FF]//控制字地址

#defineucharunsignedchar

#defineuintunsignedint

uintFreqTemp;

ucharmusic_temp;//暂时存放从MusicTable数组中读出的变量

ucharbeat;//

ucharfreq;//简谱码对应T值数组的下标

uchar*pmusic;//音乐编码指针

uintrece_data=1;//播放音乐标识符

ucharre_temp=0x10;

uchardis_flag;

ucharleddisp[6];

ucharsend_data[]={"播放完毕,请点歌...\n\r"};

ucharinit_data[]={"请点歌...\n\r"};

sbitfm=P3^3;

/*********数码显示表*********************************************/

ucharcodedisplay_code[]=//数码管显示代码表

{0xA0,0xBB,0x62,0x2A,//0,1,2,3

0x39,0x2C,0x24,0xBA,//4,5,6,7

0x20,0x28,0x30,0x25,//8,9,A,B

0xE4,0x23,0x64,0x74,//C,D,E,F

0x7f,0x70,0xe5,0xa1,0x29,0xff};//-,P,L,U,y,灭

/**********音调(频率)****************************************************/

unsignedintcodeFreqTab[]={//简谱对应的简谱码、T值

65535,

64260,64400,64524,64580,64684,

64777,64820,64898,64968,65030,

65058,65110,65157,65178,65217

};

/************音乐程序******************************************************/

unsignedcharcodemusi_1[]={//音符节拍码

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,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

};

unsignedcharcodemusi_2[]={//千年之恋

0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//竹林的灯火到过的沙漠

0x32,0x31,0x21,0x32,0x61,0x51,0x32,

//七色的国度不断飘逸风中

0x32,0x41,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//有一种神秘灰色的旋涡

0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,

//将我卷入了迷雾中

0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,

//看不清的双手

0x00//结束标志

};

unsignedcharcodemusi_3[]={//寂寞沙洲冷

0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,0x21,0x31,0x51,0x52,0x31,

0x52,0x61,0x15,0x14,0

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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