找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序编译没有错误没有警告,不知道为什么蜂鸣器就是不响

[复制链接]
跳转到指定楼层
楼主
ID:399491 发表于 2018-10-20 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
管脚没有错误
#include "reg52.h"
sbit beep=P1^5;
int i,j;
void Timer0Init()
{
        TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
    TH0=0XFC;        //给定时器赋初值,定时1ms
        TL0=0X18;        
        ET0=1;//打开定时器0中断允许
        EA=1;//打开总中断
        TR0=1;//打开定时器                        
}
void Timer1Init()
{
        TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
    TH1=0XFC;        //给定时器赋初值,定时1ms
        TL1=0X18;        
        ET1=1;//打开定时器1中断允许
        EA=1;//打开总中断
        TR1=1;//打开定时器                        
}
void main()
{        
        Timer0Init();  //定时器0初始化
        Timer1Init();  //定时器1初始化               
}
void Timer1() interrupt 3
{
        TH1=0XFC;        //给定时器赋初值,定时1ms
        TL1=0X18;
        j++;
        if(j==3000)
        {
                j=0;
                i++;
        }
}
void Timer0() interrupt 1
{
        TH0=0XFC;        //给定时器赋初值,定时1ms
        TL0=0X18;
        if(i==10)
          {
              i=0;
                  beep=~beep;
          }        
}

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

使用道具 举报

沙发
ID:277550 发表于 2018-10-21 00:27 | 只看该作者
蜂鸣器是如何连接的


~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:213173 发表于 2018-10-21 07:21 | 只看该作者
你的主程序不正常!缺少while(1);语句就会不断重复初始化,其他程序根本没有机会运行,改这样试试。

#include "reg52.h"
sbit beep=P1^5;
int i;
bit j;
void Timer_Init()
{
        TMOD=0X21; //T0模式1,T1模式2
        TH0=0XFC;        //1ms
        TL0=0X18;          //1ms      
        TH1=0X06;        //250us
        TL1=0X06;        //250us      
        TR0=1;      
        TR1=1;
        EA=1;
        ET1=1;
        ET0=1;
}
void main()
{                        
        Timer_Init();//初始化
        while(1);
}
void Timer1() interrupt 3
{
        if(j==0)
                beep=~beep;//2KHz
        else beep=1;
}
void Timer0() interrupt 1
{
        TH0=0XFC;
        TL0=0X18;
        i++;
        if(i>=500)//0.5秒
        {
                i=0;
                j=~j;
        }        
}
回复

使用道具 举报

地板
ID:407731 发表于 2018-10-21 09:19 | 只看该作者
蜂鸣器分有源的和无源的,你先看看你接的是不是符合程序的,另外,蜂鸣器接好以后要手动调节电压的,调不好它不会响
回复

使用道具 举报

5#
ID:399491 发表于 2018-10-21 15:39 | 只看该作者
wulin 发表于 2018-10-21 07:21
你的主程序不正常!缺少while(1);语句就会不断重复初始化,其他程序根本没有机会运行,改这样试试。

#in ...

行了 十分感谢
回复

使用道具 举报

6#
ID:399491 发表于 2018-10-21 16:30 | 只看该作者
wulin 发表于 2018-10-21 07:21
你的主程序不正常!缺少while(1);语句就会不断重复初始化,其他程序根本没有机会运行,改这样试试。

#in ...

额  还有一个问题就是修改蜂鸣器的频率是通过if里面的i的值来修改的吧 为什么我修改成3000声音频率还是没有变化呢?  最后就是为什么我在程序开头赋值j=1后不响了呢?
回复

使用道具 举报

7#
ID:413154 发表于 2018-10-21 16:49 | 只看该作者
调没调节好电压
回复

使用道具 举报

8#
ID:399491 发表于 2018-10-21 16:56 | 只看该作者
wulin 发表于 2018-10-21 07:21
你的主程序不正常!缺少while(1);语句就会不断重复初始化,其他程序根本没有机会运行,改这样试试。

#in ...

你好,我想问的是怎么修改蜂鸣器的频率呢 在这个工程中
回复

使用道具 举报

9#
ID:413220 发表于 2018-10-21 19:08 | 只看该作者
检查程序,可以复制到C语言编程软件中去校验,其次在检查连接,杜邦线是否完好,最后确定蜂鸣器是否可以
回复

使用道具 举报

10#
ID:399491 发表于 2018-10-22 23:58 | 只看该作者
wulin 发表于 2018-10-21 07:21
你的主程序不正常!缺少while(1);语句就会不断重复初始化,其他程序根本没有机会运行,改这样试试。

#in ...

您好,我想问的是为什么我改成定义J=1来让他不要一通电就响 可是改了后为什么他就永远都不响了呢?还有就是为什么我修改了if里面i的值为3000让他三秒响一次 可是蜂鸣器的频率按理说也应该会改变啊 为什么声音还是那么尖锐呢?如果不是通过修改i的值又是如何调节蜂鸣器的频率呢
回复

使用道具 举报

11#
ID:213173 发表于 2018-10-23 08:59 | 只看该作者
873119779 发表于 2018-10-22 23:58
您好,我想问的是为什么我改成定义J=1来让他不要一通电就响 可是改了后为什么他就永远都不响了呢?还有就 ...

在上面这个示例程序中定时器1中断服务程序是蜂鸣器的驱动器,改变 TH1=TL1=0X06; 的值就可以改变蜂鸣器频率。控制 j 就是控制蜂鸣器的启停。定时器0中断服务程序只是控制蜂鸣器鸣响间歇时间。改变 i 的累计值就改变蜂鸣器鸣响间歇时间。如果想用按键控制蜂鸣器,示例:
#include "reg52.h"
sbit beep=P1^5;
sbit key=P1^6;       
int i=0;
bit j=1;
void Timer_Init()
{
        TMOD=0X20;         //T1模式2
//        TH0=0XFC;        //1ms
//        TL0=0X18;          //1ms      
        TH1=0X06;        //250us
        TL1=0X06;        //250us      
//        TR0=1;      
        TR1=1;
        EA=1;
        ET1=1;
//        ET0=1;
}
void main()
{                        
        Timer_Init();//初始化
        while(1)
        {
                if((key==0)&&(i++>=100))
                {
                        j=~j;
                        while(!key);
                        i=0;
                }
        }
}
void Timer1() interrupt 3
{
        if(j==0)
                beep=~beep;//2KHz
        else beep=1;
}
/*
void Timer0() interrupt 1
{
        TH0=0XFC;
        TL0=0X18;
        i++;
        if(i>=500)//0.5秒
        {
                i=0;
                j=~j;
        }        
}
*/
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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