51单片机两只老虎c语言程序,51单片机两只老虎仿真加代码
/***************************************************************************
程序名稱:program4-1.c
程序功能:單片機控制的音樂盒
****************************************************************************/
#include "reg51.h"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //包含頭文件reg51.h
#define??uchar unsigned char
#include
#define??uint unsigned int
sbit??BEEP=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初始化
****************************************************************************/
void??init ()
{
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;
}
總結
以上是生活随笔為你收集整理的51单片机两只老虎c语言程序,51单片机两只老虎仿真加代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS中的nth-child()属性
- 下一篇: 正交矩阵(orthogonal matr