数字音乐盒的课程设计Word格式.docx

上传人:b****3 文档编号:17560421 上传时间:2022-12-07 格式:DOCX 页数:21 大小:289.34KB
下载 相关 举报
数字音乐盒的课程设计Word格式.docx_第1页
第1页 / 共21页
数字音乐盒的课程设计Word格式.docx_第2页
第2页 / 共21页
数字音乐盒的课程设计Word格式.docx_第3页
第3页 / 共21页
数字音乐盒的课程设计Word格式.docx_第4页
第4页 / 共21页
数字音乐盒的课程设计Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数字音乐盒的课程设计Word格式.docx

《数字音乐盒的课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《数字音乐盒的课程设计Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

数字音乐盒的课程设计Word格式.docx

AT89C51主要性能参数如下:

●与MC-51产品指令系统完全兼容

●K字节可编程闪烁存储器

●寿命:

1000写/擦循环

●数据保留时间:

10年

●全静态工作:

0Hz-24Hz

●三级程序存储器锁定

●128*8位内部RAM

●32可编程I/O线

●两个16位定时器/计数器

●5个中断源

●可编程串行通道

●低功耗的闲置和掉电模式

2.2时钟电路

时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。

在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢[2]。

为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22PF的电容,晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。

时钟电路如图3。

图3时钟电路

2.3复位电路

单片机在启动时都需要进行复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。

51系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。

当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位[3]。

单片机系统的复位方式有:

手动按钮复位和上电复位。

复位电路如图4。

图4复位电路

2.4按键电路

按键的闭合与否,反映在行线输出电压上就呈现高电平或低电平,如果高电平表示键断开,低电平则表示键闭合,通过对行线电平高低状态的检测,便可确认按键按下与否。

P1.0,P1.1,P1.4,P1.5作为控制按键,其中P1.0-P1.1扫描行,P1.4-P1.5扫描列;

可通过功能键选择乐曲、暂停、播放。

按键电路如图5。

图5按键电路

2.5蜂鸣器电路

电路中蜂鸣器是发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声,其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式(直流/方波)等[4]。

由于蜂鸣器的工作电流一般比较大,单片机的I/O口是无法直接驱动的(但AVR可以驱动小功率蜂鸣器),所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。

蜂鸣器由一个三极管,两个电阻和一个二极管组成。

蜂鸣器电路如图6。

图6蜂鸣器电路

2.6显示电路

2.6.1线段的显示

点阵图形式液晶由M×

N显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×

8=128个点组成,屏上64×

16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。

例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;

当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;

当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。

这就是LCD显示的基本原理[5]。

2.6.2字符的显示

用LCD显示一个字符时比较复杂,因为一个字符由6×

8或8×

8点阵组成,要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。

这样一来就组成某个字符。

但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可[6]。

显示电路如图7。

图7显示电路

2.7总体电路

总结时钟电路、复位电路、按键电路、蜂鸣器以及显示电路,把其放入一个电路。

得到总体的电路。

总体电路如图8。

图8总体电路图

3系统软件设计

3.1程序主要流程

流程图如图9所示。

图9流程图

3.2程序设计

对音乐doremifasolasi分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。

播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。

音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。

以0xff作为曲谱的结束标志[7]。

举例1:

音调do,发音长度为两拍,即二分音符,将其编码为0x18。

举例2:

音调re,发音长度为半拍,即八分音符,将其编码为0x22歌曲播放的设计。

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

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

接着分离出该数的低4位,得到延时时间,接着调用软件延时。

程序:

#include<

REG51.H>

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharm,n;

uchari,timecount=0,timesec=0,timemin=0,timecheck=0;

charr0=2;

sbitbeepIO=P3^0;

typedefunsignedcharBYTE;

typedefunsignedintWORD;

typedefbitBOOL;

sbitrs=P2^0;

sbitrw=P2^1;

sbitep=P2^2;

sbitpausekey=P1^1;

uchark,q,f;

ucharcodedis1[]={"

1jimoshazhou"

};

ucharcodedis2[]={"

2tonghua"

ucharcodedis3[]={"

3qiannianlian"

ucharcodeT[49][2]={{0,0},

{0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B},

{0xFC,0x43},{0xFC,0x78},{0xFC,0xAB},{0xFC,0xDB},{0xFD,0x08},{0xFD,0x33},{0xFD,0x5B},{0xFD,0x81},{0xFD,0xA5},{0xFD,0xC7},{0xFD,0xE7},{0xFE,0x05},

{0xFE,0x21},{0xFE,0x3C},{0xFE,0x55},{0xFE,0x6D},{0xFE,0x84},{0xFE,0x99},{0xFE,0xAD},{0xFE,0xC0},{0xFE,0x02},{0xFE,0xE3},{0xFE,0xF3},{0xFF,0x02},

{0xFF,0x10},{0xFF,0x1D},{0xFF,0x2A},{0xFF,0x36},{0xFF,0x42},{0xFF,0x4C},{0xFF,0x56},{0xFF,0x60},{0xFF,0x69},{0xFF,0x71},{0xFF,0x79},{0xFF,0x81}

ucharcodemusic1[][2]={{0,4},

{22,4},{22,4},{17,4},{15,4},{15,4},{17,12},

{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},{0,4},

{20,4},{20,4},{20,4},{17,4},{20,4},{20,4},{20,4},{17,4},

{22,4},{17,4},{17,4},{15,4},{15,4},{17,12},

{15,4},{15,2},{17,2},{15,4},{13,4},{13,4},{15,12},

{20,4},{20,4},{20,2},{17,2},{17,4},{20,4},{20,4},{20,2},{17,2},{17,2},{17,2},

{24,4},{20,4},{20,2},{17,2},{17,4},{20,4},{22,12},

{17,4},{22,4},{25,4},{25,4},{17,4},{22,4},{25,8},

{24,4},{22,2},{24,2},{22,4},{20,4},{15,4},{17,12},

{15,4},{15,4},{15,4},{10,4},{15,4},{17,4},{20,8},

{17,4},{24,4},{24,4},{20,4},{15,4},{17,12},

{29,4},{27,2},{29,2},{27,4},{25,4},{25,4},{27,12},

{29,4},{29,2},{27,4},{25,4},{27,6},{27,2},{25,4},{24,4},

{20,4},{20,2},{17,2},{20,4},{20,2},{22,2},{22,16},

{0xFF,0xFF}};

ucharcodemusic2[][2]={{0,4},

{16,6},{19,2},{19,6},{16,2},{14,6},{0,10},{16,6},{19,2},{19,6},{16,2},{14,8},{0,8},

{26,8},{21,6},{24,2},{23,6},{21,2},{19,8},{21,16},{0,8},

{16,6},{19,2},{19,6},{16,2},{14,8},{0,8},{26,8},{21,6},{23,2},{21,14},

{24,6},{23,2},{21,6},{19,2},{16,6},{14,2},{13,8},{14,16},{0,4},

{19,6},{19,2},{21,6},{21,2},{23,8},{21,4},{0,4},{19,6},{19,2},{16,6},{19,2},{16,8},{14,6},{0,4},

{26,16},{21,4},{26,4},{21,4},{26,16},{21,4},{26,16},{0,4},

{16,8},{16,8},{14,8},{16,8},{21,4},{26,4},{21,4},{26,4},{0,8},{16,8},{16,8},{14,8},{16,8},{21,4},{26,4},{21,4},{26,4},{0,8},

{19,8},{19,6},{21,2},{16,8},{0,8},{19,6},{21,2},{19,6},{21,2},{16,8},{0,8},

{21,8},{26,8},{21,4},{24,12},{23,6},{21,2},{19,8},{21,16},

{14,4},{21,4},{14,4},{19,4},{16,6},{14,2},{13,8},{14,16},

ucharcodemusic3[][2]={{0,4},

{27,4},{19,4},{19,4},{27,4},{26,4},{26,2},{27,2},{24,8},

{22,4},{17,4},{24,4},{22,4},{19,16},

{15,4},{12,4},{12,4},{15,4},{17,8},{19,8},

{26,6},{26,2},{26,4},{24,4},{24,4},{19,4},{19,8},

{27,4},{19,4},{19,4},{27,4},{26,4},{26,2},{27,2},{24,6},{24,2},

{15,4},{12,4},{12,4},{15,4},{17,8},{19,8},{19,6},{19,2},{19,4},{17,4},{14,4},{14,4},{14,4},{7,4},{12,24},

uchartimetable[]="

00:

00"

;

voiddelay(ucharp)

{

uchari,j;

for(;

p>

0;

p--)

for(i=181;

i>

i--)

for(j=181;

j>

j--);

}

BOOLlcd_bz()

{

BOOLresult;

rs=0;

rw=1;

ep=1;

_nop_();

result=(BOOL)(P0&

0x80);

ep=0;

returnresult;

voidlcd_wcmd(BYTEcmd)

while(lcd_bz());

rw=0;

P0=cmd;

voidlcd_pos(BYTEpos)

{

lcd_wcmd(pos|0x80);

voidlcd_wdat(BYTEdat)

rs=1;

P0=dat;

voidlcd_init()

lcd_wcmd(0x38);

delay

(1);

lcd_wcmd(0x0c);

lcd_wcmd(0x06);

lcd_wcmd(0x01);

voidpause()

for(i=150;

for(j=150;

voidtimecount_init()interrupt3

{

TH1=(65535-45872)/256;

TL1=(65535-45872)%256;

timecount++;

if(timecount==20)

{

timesec++;

timecount=0;

if(timesec==60)

{timesec=0;

timemin++;

}

voidadfa()interrupt0

{timesec=0;

timemin=0;

r0++;

delay(5);

if(r0>

11)

r0=11;

voidadfii()interrupt2

if(pausekey==0)

beepIO=0;

while(pausekey==0);

while(pausekey==1);

delay(8);

else

{

timesec=0;

r0--;

if(r0<

=0)

r0=1;

voidT0_int()interrupt1

beepIO=!

beepIO;

TH0=T[m][0];

TL0=T[m][1];

voidzhuanhuan()

timetable[3]=timesec/10+'

0'

timetable[4]=timesec%10+'

timetable[2]='

:

'

timetable[0]=timemin/10+'

timetable[1]=timemin%10+'

voidtimedis()

if(timecheck!

=timesec)

timecheck=timesec;

zhuanhuan();

lcd_pos(0x49);

lcd_wdat(timetable[0]);

lcd_wdat(timetable[1]);

lcd_wdat(timetable[2]);

lcd_wdat(timetable[3]);

lcd_wdat(timetable[4]);

voidmain()

uchari=0,lcd_check=0;

TMOD=0x11;

PX0=1;

PX1=1;

EX0=1;

EX1=1;

EA=1;

ET0=1;

ET1=1;

TR1=1;

pausekey=1;

lcd_init();

while

(1)

if(r0==0)

{

delay

(1);

lcd_pos(0);

i=0;

while(dis1[i]!

='

\0'

{

lcd_wdat(dis222[i]);

i++;

}

if(r0==1)

timedis();

if(lcd_check!

=r0)

{lcd_wcmd(0x01);

lcd_check=r0;

lcd_pos(0);

{

lcd_wdat(dis1[i]);

}

m=music1[i][0];

n=music1[i][1];

if(m==0x00)

{TR0=0;

delay(n);

i++;

}//

elseif(m==0xFF)

delay(30);

i=0;

timesec=0;

timemin=0;

elseif(m==music1[i+1][0])

{TR0=1;

TR0=0;

pause();

if(r0==2)

{timedis();

if(lcd_check!

lcd_check=r0;

lcd_pos(0);

while(dis2[i]!

{

lcd_wdat(dis2[i]);

m=music2[i][0];

n=music2[i][1];

elseif(m==music2[i+1][0])

}

}

}

4系统软件仿真

在这里系统仿真我们使用实验室常用的Protues仿真软件,把总电路画入ISIS软件,把程序加入Keil软件,然后进行软件和硬件的统一调试[8]。

图10仿真初始界面

图11仿真播放第一首

图12仿真播放第

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

当前位置:首页 > 初中教育 > 语文

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

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