高手求救!!!蜂鸣器发声与数码管动态显示同步执行程序纠错

本程序的功能在实现数码管动态显示14.5的同时,让蜂鸣器发出频率1\8000Hz的声音。数码管为共阳数码管。单片机P0口接数码管段,P2口接数码管位,P1^7接蜂鸣器。程... 本程序的功能在实现数码管动态显示14.5的同时,让蜂鸣器发出频率1\8000Hz的声音。数码管为共阳数码管。单片机P0口接数码管段,P2口接数码管位,P1^7接蜂鸣器。
程序如下
#include<stdio.h>
#include<reg51.h>
sbit FMQ=P1^7;
sbit P07=P0^7;
unsigned char code Tabduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x99};
unsigned int PL;
void delay4ms(void) /*延时4.5ms*/
{unsigned char k,l;
for(k=0;k<25;k++)
for(l=0;l<60;l++);
}
void main()
{

unsigned int a,b,c,i;
PL=4000;
FMQ=1;
a=1;
b=4;
c=5;
EA=1;
ET0=1;
TMOD=0x01;
TL0=(65536-PL)%256;
TH0=(65536-PL)/256;
TR0=1;
while(1) /*数码管动态显示*/
{P2=0x00;
P0=Tabduan[a];
P2=0x01;
delay4ms();
P2=0x00;
P0=Tabduan[b];
P07=0;
P2=0x02;
delay4ms();
P2=0x00;
P0=Tabduan[c];
P2=0x04;
delay4ms();
}}
Time0(void) interrupt 1 using 0 /*中断实现发声*/
{FMQ=~FMQ;
TL0=(65536-PL)%256;
TH0=(65536-PL)/256;}
单独显示数码管或是单独发声都没有问题,可是将两者综合后数码管就不能正常显示了。
展开
 我来答
47okey
2010-05-18 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5900
采纳率:75%
帮助的人:2405万
展开全部
你每4 ms中断一次,当然影响显示了。
试试用显示时间来控制求反。
假设显示时间 是1 ms,显示4 次求反一次,也能得到同样频率的发声,但又不影响显示。
aheng365
2010-05-18 · TA获得超过141个赞
知道小有建树答主
回答量:310
采纳率:0%
帮助的人:168万
展开全部
进中断太频繁了。把你的延时函数时间改短点试试。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式