如题,我在练习的时候遇到了一个可能比较基本的问题:不通过定时器,只写一个delay函数来实现LED灯的闪烁和数码管的点亮。
我自己用这种方式写的(8个LED闪烁,点亮2个数码管),无法实现上述功能。LED能闪烁,但是两位数码管中的第一位不能稳定显示,第一位数码管是在闪烁,和LED灯的闪烁频率差不多一致。如果只点亮一个数码管,在下面的程序中删掉一个点亮数码管的程序后,剩下的1个数码管能够正常点亮(不闪烁),如果增加点亮数码管的数量至6个,前5个数码管是闪烁着显示的,频率与LED灯差不多,最后一个数码管正常显示。
我想问问产生这种现象的原因是什么,还有如何只用一个delay函数,不用定时器,来完成这样的功能。
#include<reg52.h>
sbit dula=P2^6;
sbit wela=P2^7;
void delay(unsigned int z) //延时程序
{ unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void main()
{
P1=0x00;
while(1)
{
dula=1;
P0=0x3f;
dula=0;
P0=0xff; //点亮第一个数码管,显示0
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=0x3f;
dula=0;
P0=0xff;
wela=1; //点亮第二个数码管,显示0
P0=0xfd;
wela=0;
delay(1);
delay(100); //LED灯闪烁
P1=~P1;
}
}
用的是共阴极数码管,郭天祥教程的板子。我自己分析了这个程序,按理说应该两个数码管都是闪烁的状态,但是板子上的结果是第一个闪烁,第二个稳定显示.....
[ 本帖最后由 qrswll 于 2012-4-8 16:40 编辑 ]
此帖出自小平头技术问答
一周热门 更多>