1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 51单片机两只老虎c语言程序 51单片机两只老虎仿真加代码

51单片机两只老虎c语言程序 51单片机两只老虎仿真加代码

时间:2019-01-18 07:24:31

相关推荐

51单片机两只老虎c语言程序 51单片机两只老虎仿真加代码

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

程序名称:program4-1.c

程序功能:单片机控制的音乐盒

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

#include "reg51.h"//包含头文件reg51.h

#defineuchar unsigned char

#include

#defineuint unsigned int

sbitBEEP=P3^7;//蜂鸣器控制接口

uchar note; //音符下标

uchar code music[]={0xFC,0x44,0xFC,0xAC, 0xFD,0x09, 0xFD,0x34, 0xFD,0x82, 0xFD,0xC8};

//T值

uchar code tiger[ ]= //两只老虎音符数组

{

0x14,0x24,0x34,0x14,0x14,0x24,0x34,0x14,0x34,0x44,0x58,0x34,0x44,

0x58,0x53,0x61,0x53,0x41,0x34,0x14,0x53,0x61,0x53,0x41,0x34,0x14,

0x14,0x54,0x18,0x14,0x54,0x18,0x00,0x00

};

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

函数名称:delay_125ms

函数功能:实现125ms延时函数

形式参数:无

返回值:无

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

void delay_125ms()

{

uchar counter=0; //计数器初始化

TR0=1;//启动T0

for(;counter!=5;) //判断计数器值是否等于5

{

if(TF0==1)//T0溢出判断

{

TF0 = 0;//定时器0溢出位清零

TH0=0xa6; //恢复计数器初值(可采用stc-isp软件计算)

TL0=0x00;

counter++; //循环次数标志位加1

}

}

counter = 0;//计数5次,计数器清零

}

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

函数名称:palay_music

函数功能:单片机控制蜂鸣器播放音乐

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

void paly_music()//音乐播放函数

{

uchar i,j,k;

j=0;

while( tiger[j]!=0x00) //一直播放到休止符0x00为止

{

k= tiger[j]&0x0F; //从音符数组中得到节拍

note=tiger[j]>>4;//从音符数组中得到音符

TH1=music[2*note];//定时器1赋初值

TL1=music[2*note+1];

TR1=1; // 启动T1

if((music[2*note]==0x00)&&(music[2*note+1]==0x00))//判断是否停止

{

TR1=0;//当播放到停止符时关闭T1

BEEP=1;//关闭蜂鸣器

}

for(i=k;i>0;--i)//延时,产生相应的节拍

{

delay_125ms();

}

TR1=0;

j++;//取数组中的下一个数据

}

}

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

函数名称:init

函数功能:定时器T0、T1初始化

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

voidinit ()

{

TMOD=0x11;//T0工作定时工作方式

TH0=0xa6;//赋T0计数器初值(25ms)

TL0=0x00;

ET1=1;//允许T1中断

EA=1; //中断允许

}

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

函数名称:main

函数功能:单片机控制蜂鸣器播放音乐

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

void main( )//主函数

{

init();

while(1)

{

paly_music( ); // 播放音乐

}

}

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

函数名称:timer1

函数功能:T1产生音符脉冲

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

void timer1( ) interrupt 3

{

TH1=music[2*note]; //恢复计数器初始值

TL1=music[2*note+1];

BEEP=~BEEP;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。