找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5659|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机两只老虎仿真加代码

[复制链接]
跳转到指定楼层
楼主
/***************************************************************************
    程序名称:program4-1.c
    程序功能:单片机控制的音乐盒
****************************************************************************/
#include "reg51.h"                                        //包含头文件reg51.h
#define  uchar unsigned char
#include <intrins.h>
#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;
         }







微信图片_20190419200635.png (134.4 KB, 下载次数: 45)

微信图片_20190419200635.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表