找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3472|回复: 6
收起左侧

为什么我的蜂鸣器不出声音啊 大神们帮忙看看

[复制链接]
ID:253678 发表于 2017-12-10 06:47 | 显示全部楼层 |阅读模式
#include <stc15f2k60s2.h>
#include <intrins.h>
#define LED P2
sbit L1=P4^4;
sbit L2=P4^2;
sbit L3=P4^1;
sbit L4=P3^7;
sbit L5=P3^6;
sbit L6=P3^5;
sbit L7=P3^4;
sbit L8=P3^3;
sbit K1=P5^5;
sbit S1=P4^5;
void Delay10us()  //@11.0592MHz
{
unsigned char i;
_nop_();
i = 25;
while (--i);
}
unsigned char code table[]={   0xC0,  
                0xF9,  
                0xA4,  
                0xB0,  
                0x99,  
                0x92,  
                0x82,  
                0xF8,  
                0x80,  
                0x90};
unsigned char num,sec=10;
void Timer1Init()  ////&para;¨&Ecirc;±&AElig;÷&sup3;&otilde;&Ecirc;&frac14;
{
    TMOD = 0x01; //&Eacute;è&Ouml;&Atilde;&para;¨&Ecirc;±&AElig;÷&Auml;&pound;&Ecirc;&frac12;
   TH0 = (65535-10000)/256;  //&para;¨&Ecirc;±&AElig;÷&sup3;&otilde;&Ecirc;&frac14;&Ouml;&micro;
    TL0 =(65535-10000)%256;  //&para;¨&Ecirc;±&AElig;÷&sup3;&otilde;&Ecirc;&frac14;&Ouml;&micro;
    EA =  1;   //&acute;ò&iquest;&ordf;×&Uuml;&Ouml;&ETH;&para;&Iuml;
    ET0 = 1;   //&acute;ò&iquest;&ordf;&para;¨&Ecirc;±&AElig;÷0
    TR0 = 0;    //&AElig;&ocirc;&para;&macr;&para;¨&Ecirc;±&AElig;÷0
}
void timer()  interrupt 1
{
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
num++;
if(num==100)
{
  sec--;
  num=0;
}
}
void key()
{
  if(K1==0)
{Delay10us();
TR0=~TR0;
while(!K1);
}
}

              
void xs()
{
  L1=1;L2=L3=L4=L5=L6=L7=L8=0;
LED=table[sec/10];
Delay10us();
LED=0xff;

L2=1;L1=L3=L4=L5=L6=L7=L8=0;
LED=table[sec%10];
Delay10us();
LED=0xff;
}
void sy()
{
  if(sec==0)
{
TR0=0;
S1=0;
Delay10us();
S1=1;
Delay10us();
}
}
void main()
{
P4M1=0x00;
P4M0=0xff;
P3M1=0x00;
P3M0=0xff;
  Timer1Init();
while(1)
{
    key();
   xs();
   sy();
}
}
回复

使用道具 举报

ID:253678 发表于 2017-12-10 07:13 | 显示全部楼层
我的目的是让计时器倒计时 k1控制倒计时的开始与停止 k2恢复原来的初值 当计时器到0时 蜂鸣器就应该发出声音但是  他就是不响  
回复

使用道具 举报

ID:126608 发表于 2017-12-10 21:17 | 显示全部楼层
s1等于0时,延时时间太短,蜂鸣器要用有源的,也就是加电压就响的。
回复

使用道具 举报

ID:259929 发表于 2017-12-10 22:14 | 显示全部楼层

发现在定时中断中sec-- 会一直减,到了0以后不会停止,会溢出。
应该加上if(sec>0)sec--;

电路没看到,不排除是电路问题,可以这样试一下,void sy() 中,解释掉if(sec==0)这一句,看看蜂鸣器是不是一直响,首先确保电路没问题。
回复

使用道具 举报

ID:260263 发表于 2017-12-11 16:55 | 显示全部楼层
可能是电路问题
回复

使用道具 举报

ID:261684 发表于 2017-12-14 19:11 | 显示全部楼层
蜂鸣器要用有源的
回复

使用道具 举报

ID:261288 发表于 2017-12-14 21:21 | 显示全部楼层
蜂鸣器发声要设计自用的定时器中断程序,重装初值后,S1=~S1.试一下。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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