音乐倒数计时器单片机课程设计报告Word下载.docx

上传人:b****8 文档编号:22449145 上传时间:2023-02-04 格式:DOCX 页数:20 大小:37.82KB
下载 相关 举报
音乐倒数计时器单片机课程设计报告Word下载.docx_第1页
第1页 / 共20页
音乐倒数计时器单片机课程设计报告Word下载.docx_第2页
第2页 / 共20页
音乐倒数计时器单片机课程设计报告Word下载.docx_第3页
第3页 / 共20页
音乐倒数计时器单片机课程设计报告Word下载.docx_第4页
第4页 / 共20页
音乐倒数计时器单片机课程设计报告Word下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

音乐倒数计时器单片机课程设计报告Word下载.docx

《音乐倒数计时器单片机课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《音乐倒数计时器单片机课程设计报告Word下载.docx(20页珍藏版)》请在冰豆网上搜索。

音乐倒数计时器单片机课程设计报告Word下载.docx

XT.1L1沖

^EV:

ULI-

口w

KfiT*

丸」AL亠

S:

•MND|||—^'

KXTZktt7

KITi»

nrt~

3■_

TXD11

KF^-p-

m

]>

ZL

r^E-A

]

L並舶

PLOT;

TOC

P]1T7IX

回抻。

PLZ

JLD1T0.1

PM

g:

科:

PL4

LDs-PQl

P12

iD^FO舛

FL*

ADJNJ

PLT

JJliM£

JCT

ADmK/

FSKAX?

Ea

PJ1TKD

p^Txli

Piznm

P^EX

Pkl:

fl?

!

AC!

Pl+TCI

Ai*n.f

V^JTI

A1>

T2:

!

A12^4

阳「w

Aiirxj

KTAL2

AlfliT±

-I

XTJ1.1

皿礼1

GND

Aino1

乂T3ET

•亟

1=RE5

J:

n>

-

2.4电路仿真图如下:

H

4

電1

3

_H'

VlML

UiU■■片

L怕1

IND就

t

1h

7干Era

Ul

■JCTALf

FUAEOPBIMI

FH2A02

XTAlZ

巾轴,PH他DI*

PH詡眄

KAT

lOTft^vrnHi

**iw

町衲■

iJK

EA

p莹阳応鮭『m

n.l•订

FM1WP3_uirrT

I1A

oiirrt

*15

阴斗T1

IHJ

出硕J_

FU

F?

W

JG

I

J_

MW4

1

i

IK

三、系统软件设计

音乐倒数计时器软件设计关键是实现音乐的播放。

利用定时计数器,通过载入不同的计数初值,产生频率不同的方波,输入到蜂鸣器(SOUNER中,使其

发出频率不同的声音。

本设计中单片机晶振为11.0592MHz通过计算各音阶频

率,可得1、2、3、4、5、6、7共7个音应赋给定时器的初值为64580、64684、64777、64820、64898、64968、65030。

通过K1~K5开关进行控制时间设置来完成其基本功能,当倒计时为零时,通过通过蜂鸣器放出一段音乐。

3.1系统基本流程图如下:

开始

LCD初始化

时间为

K3是否按下

10min

Y

—r—口才…=

N

K5是否按下

计时结束

<

开始计时

K6是否按下

Music

3.2部分程序如下:

#include<

reg52.h>

intrins.h>

#definetime100

#defineuintunsignedint

#defineucharunsignedchar

uintflag,flag0,flag1,flag2,flag3,flag4,flag5,minute,second=60;

intt=0,flag6=0;

ucharnum,j,i,k=0,time_H,time_L,times,m,n,p;

ucharcodetable[]="

TIME00:

00"

;

ucharcodeFREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8低音0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,!

0xFC,0xFD,0xFD,0xFD,0xFD,0xFI高音1234567

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xF超}高/音

ucharcodeFREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,//低音1234567

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i

0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//高音234567

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};

//超高音1234567

ucharcodeMUSIC[]={3,2,2,

3,2,2,

3,2,4,

5,2,2,

1,2,3,

2,2,1,

4,2,2,

4,2,3,

3,2,1,

2,2,2,

1,2,2,

5,2,3,

5,1,2,

5,1,3,

5,1,1,

6,1,3,

6,1,2,

0,0,0}

sbitkey1=P3A3;

sbitkey2=P3A4;

sbitkey3=P3A5;

sbitkey4=P3A6;

sbitkey5=P3A7;

sbitP1_0=P1A0;

sbitRS=P2A5;

sbitRW=P2A6;

sbitE=P2A7;

sbitled_red=P1A3;

voidwrite_time(uintaddr,uintdate);

voiddelay(uintz)//延时函数//{

uintx,y;

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

}

voiddelay1(unsignedchard)//us延时

{while(--d);

voiddelay2(unsignedchard)//延时1mS

while(d--)

{delay1(245);

delay1(245);

voiddelay3(uchard)//延时125ms,4/4拍

{

for(m=0;

m<

d;

m++)delay2(125);

TR1=0;

voidSong(){

TH仁time_H;

〃赋值定时器时间,决定频率TL1=time_L;

TR1=1;

//打开定时器

delay3(times);

//延时所需要的节拍

voidwrite_com(ucharcom)//1602写命令函数//{

RS=0;

P0=com;

delay(5);

E=1;

delay(10);

E=0;

voidwrite_date(uchardate)//1602写数据函数//{

RS=1;

P0=date;

voidKEY1()//按键1//

while(flag1)

if(key2==0)

delay(time);

if(minute<

60)minute=minute+1;

write_time(7,minute);

if(key3==0)

if(minute>

0)minute=minute-1;

if(key4==0||key5==0)

delay(150);

{flag1=0;

flag=1;

TR0=1;

voidKEY2()//按键2//

minute=5;

while(flag2)

if(key5==0)

flag2=0;

flag=1;

TR0=1;

voidKEY3()

minute=10;

while(flag3)

if(key5==0){flag3=0;

voidKEY4()

minute=20;

while(flag4)

if(key5==0){

if(key5==0){flag4=0;

//按键3

//按键4

voidwrite_time(uintaddr,uintdate)

uintge,shi;

ge=date%10;

shi=date/10;

write_com(0x80+addr);

write_date(0x30+shi);

write_date(0x30+ge);

if(addr==7&

&

date==0)

j=1;

if(j==1&

addr==10&

date==0){

flag0=1;

TR0=0;

flag5=1;

voidinit()

P3=0xff;

RW=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=0xfc;

TL1=0x44;

ET1=1;

ET0=1;

EA=1;

for(num=0;

num<

12;

num++)

write_date(table[num]);

delay(20);

//lcd1602初始化

//flag5=1

voidstart()

{if(key1==0){

if(key1==0)

flag0=0;

flag1=1;

KEY1();

}if(key2==0)

if(key2==0){

flag2=1;

KEY2();

}if(key3==0)

flag3=1;

KEY3();

}if(key4==0)

if(key4==0)

flag4=1;

KEY4();

//按键初始化

voidwrite_time0()//倒计程序的子初始化程序{

minute=minute-1;

write_time(7,minute);

write_time(10,59);

flag=0;

voidcounter()//倒计程序

while(flag6)

{led_red=~led_red;

if(flag==1)write_time0();

t=0;

flag6=0;

second=second-1;

write_time(10,second);

if(k==1&

second==0)

if(second==0)

k=1;

second=59;

intmain()

init();

while

(1)

while(flag0)

start();

counter();

while(flag5)

TMOD=0x10;

//置定时器1工作方式1EA=1;

//打开全局中断

while(1{

//打开定时1中断

i=0;

while(i<

140)

{//音乐数组长度,循环播放n=MUSIC[i]+7*MUSIC[i+1-]1;

//去音符振荡频率所需数据time_H=FREQH[n];

time_L=FREQL[n];

times=MUSIC[i+2];

//节拍时长

i=i+3;

Song();

return0;

voidinter0()interrupt1//中断T0

TL0=(65536-50000)%256;

t++;

if(t==20)

flag6=1;

//中断T1

voidinter1()interrupt3

P1_0=!

P1_0;

TH1=time_H;

TL1=time_L;

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

当前位置:首页 > 解决方案 > 学习计划

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

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