数码管和蜂鸣器一起工作时产生的问题

2019-07-15 23:26发布

实现1,让数码管从0-9,在8个数码管上循环显示,时间0,5s
2,让蜂鸣器以1hz频率响数码管工作正常,但是蜂鸣器却不是我想要的效果,它一直响
搭个顺风车再问一个,stc下载程序时,当开发板连接着电脑,看似一切正常,但是一不小心,不知发生了什么,就断开连接,数据线还能给开发板供电,但此时串口却不存在了,不管怎么搞都出不来,或许,重启可以,还有拔了插有时也起作用,不知什么原因,希望有人解答,3q
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void yanshi(uint);
sbit duan=P2^6;
sbit wei=P2^7;
sbit fmq=P1^4;
uchar code tableduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff ,0x6f};
uchar code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar a,b,c;
void main ()
{
a=b=c=0;TMOD=1;EA=1;ET0=1;TH0=15536/256;TL0=15536%256;TR0=1;
while(1)
{ fmq=1;
yanshi(100); fmq=0; yanshi(100); }
}
void time() interrupt 1
{
TH0=15536/256;TL0=15536%256;a++;
if(a==10)
{ a=0; wei=1; P0=tablewei; wei=0; duan=1; P0=tableduan[c]; duan=0; b++; c++; if(b==8) b=0; if(c==10) c=0;
}
}
void yanshi(uint z)
{
uint d,e;for(d=z;d>0;d++)
for(e=1000;e>0;e++);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
zhaoguanling
1楼-- · 2019-07-16 01:29
zhaoguanling邀请您访问中国电子技术论坛
http://bbs.elecfans.com/?fromuid=241693
冰葑世纪
2楼-- · 2019-07-16 02:03
你蜂鸣器没设置停止,只设置了频率,当然是一直以1KHZ响啦。试下在定时器里面关闭蜂鸣器。你说的下载问题,我也不知道你下载用什么是USB转串口还是PL2303芯片虚拟的串口。不过也是奇怪的问题,可能系统问题,可能下载芯片问题,不好说

评分

参与人数 1积分 +1 收起 理由 dongyumin + 1 授予论坛”答题小旋风“称号,加分鼓励。.

查看全部评分

liwenbiao
3楼-- · 2019-07-16 02:54
void yanshi(uint z)
{
uint d,e;for(d=z;d>0;d++)
for(e=1000;e>0;e++);
},d和e一直满足大于0的情况,这里是个死循环
eyexceed
4楼-- · 2019-07-16 08:22
冰葑世纪 发表于 2013-7-28 17:18
你蜂鸣器没设置停止,只设置了频率,当然是一直以1KHZ响啦。试下在定时器里面关闭蜂鸣器。你说的下载问题, ...

while(1)
{ fmq=1;
yanshi(100); fmq=0; yanshi(100); }
}
这里给高电平不是让它不响么。
eyexceed
5楼-- · 2019-07-16 11:30
 精彩回答 2  元偷偷看……
冰葑世纪
6楼-- · 2019-07-16 13:02
eyexceed 发表于 2013-7-28 20:53
while(1)
{ fmq=1;
yanshi(100); fmq=0; yanshi(100); }

你这个是设置频率而已啊、
给你看下我这个例子
uint t;
uchar h;
/**********************************************************
函数名称: beep()
函数功能:产生声音
入口参数:无
出口参数:无
备  注:
**********************************************************/
void beep1KHZ()        //产生1KHZ频率声音的函数
{
        fmq=0;
        delay_1us(500);
        fmq=1;
        delay_1us(500);

}

void FMQ()
{

        for(t=0;t<500;t++) //响的时长
        {
                 beep1KHZ();
        }
        fmq=1;  //关闭
        delay_1ms(600);  //关闭600MS 、再响

}


还有,你的延时函数是死循环,有问题

一周热门 更多>