找回密码
 立即注册

QQ登录

只需一步,快速开始

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

无源蜂鸣器的发生控制(部分程序)

[复制链接]
跳转到指定楼层
楼主
ID:223571 发表于 2017-10-2 15:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        while(1)
        {       
                beep=~beep;、//蜂鸣器已经定义,
                delay(10); //延时大约100us   通过修改此延时时间达到不同的发声效果(频率改变音色)       
               
                beep=1;
                delay(10); //延时函数,前面已经定义
                beep=0;
                delay(5);  //调节占空比达到通过改变声音的大小  (还要进一步思考。因为与上面的周期不一致)

        }

问题:对无源蜂鸣器第一部分设置频率(改变声音的音色),第二部分设置占空比(改变声音大小);但是前后的高低电平一个周期内,时间并不想等,有毛病吗?

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

使用道具 举报

沙发
ID:213173 发表于 2017-10-2 17:01 | 只看该作者
驱动无源蜂鸣器最好用定时器中断输出2000Hz,占空比50%的方波,用延时函数会严重影响其它程序运行。要改变频率就改一下定时器重载值。改变占空比并不能明显改变音量。
void Timer0Init()                //250微秒@12.000MHz
{
        TMOD= 0x02;                //设置定时器自动重载模式
        TL0 = 0x06;                //设置定时初值
        TH0 = 0x06;                //设置定时重载值
//        TR0 = 1;                //定时器0开始计时
        EA=1;               //开全局中断
        ET0=1;              //允许T0中断
}

void timer0() interrupt 1
{
        static uint count=0;//中断计数变量
        count++;
        Buzzer=~Buzzer;                //蜂鸣器端口取反
        if(count>=500)                //持续时间
        {
                count=0;                //计数清0                               
                Buzzer=0;                //蜂鸣器端口复位
                TR0 = 0;                //定时器0关闭
        }
}
回复

使用道具 举报

板凳
ID:237095 发表于 2017-10-3 11:06 | 只看该作者
牛人大赞
回复

使用道具 举报

地板
ID:516175 发表于 2019-4-21 15:44 | 只看该作者
请问此程序如何和通过按键控制蜂鸣器音量大小结合起来呢?
回复

使用道具 举报

5#
ID:518115 发表于 2019-4-21 21:14 | 只看该作者
新手表示很难呀,看不明白
回复

使用道具 举报

6#
ID:518260 发表于 2019-4-22 01:15 | 只看该作者
赞一个
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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