蜂鸣器播放DOREMI+普中51单片机+江科大自化协

现象

  在无源蜂鸣器上循环演奏低音“DO、RE、MI、FA、SO、LA、SI”这7个音调。

参考程序

1 主函数

 

复制代码
#include <REGX52.H>
#include "delayms.h"
#include "timer0.h"

sbit Buzzer = P2^5;

//音调与频率对照表,低中高:1,1#,2,2#,3,4,4#,5,5#,6,6#,7
//unsigned int FreqTable[]={
//    63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,
//    64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,
//    65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
//};

//音调与频率对照表,低中高:1,2,3,4,5,6,7
unsigned int FreqTable[]={
    63628,63835,64021,64103,64260,64400,64528,
    64580,64684,64777,64820,64898,64968,65030,
    65058,65110,65157,65178,65217,65252,65283,
};

unsigned char FreqSelect;

void main()
{
    Timer0Init( );
    while(1)
    {
        if(FreqSelect>19)
            FreqSelect = 0;
        else
            FreqSelect++;
        delayms(500);
    }
}

//定时器中断函数
void timer0_routine() interrupt 1
{
    TL0 = FreqTable[FreqSelect]%256;
    TH0 = FreqTable[FreqSelect]/256;
    Buzzer = !Buzzer;
}
复制代码

 

2 延时函数

#ifndef _delayms_h_
#define _delayms_h_

    void delayms(unsigned int xms);

#endif
复制代码
#include <intrins.h>

void delayms(unsigned int xms)        //@11.0592MHz
{
    unsigned char i, j;
    while(xms--)
    {
        _nop_();
        i = 2;
        j = 199;
        do
        {
            while (--j);
        } while (--i);
    }
}
复制代码

3 定时器函数

#ifndef _timer0_h_
#define _timer0_h_

    void Timer0Init(void);

#endif
复制代码
#include <REGX52.H>

/**
  * @brief  定时器0初始化,1毫秒@11.0592MHz
  * @param  无
  * @retval 无
  */
void Timer0Init(void)        //1毫秒@11.0592MHz
{
    TMOD &= 0xF0;        //设置定时器模式
    TMOD |= 0x01;        //设置定时器模式
    TL0 = 0x66;            //设置定时初始值
    TH0 = 0xFC;            //设置定时初始值
    TF0 = 0;                //清除TF0标志
    TR0 = 1;                //定时器0开始计时
    ET0 = 1;                //打开定时器0中断
    EA  = 1;            //打开总中断开关
    PT0 = 0;                //设置定时器0中断优先级
}
复制代码

 

posted @   豌豆茶  阅读(723)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示