[求助] 51单片机数码管显示

123哈哈哈   2019-5-11 13:25 楼主
这个程序写入单片机后为什么十位数会闪烁而各位不会,请大神指点一下,谢谢
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint i);
void disp(uchar j);
unsigned char led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar miao=0;
void delay1s()
{
  uchar i;
        for(i=0;i<20;i++)
        {
          while(!TF1);
                TF1=0;
                TH1=(65536-50000)/256;
                TL1=(65536-50000)%256;
       
        }


}
void main()
{
  TMOD=0x10;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%256;
        TR1=1;
        while(1)
        {

          disp(miao);
                delay1s();
                miao++;
                if(miao==60)
                miao=0;
       
        }



}
void disp(uchar j)
{
        P2=0xfe;
        P1=led[j/10];
        delay(100);
        P2=0xfd;
        P1=led[j%10];
        delay(100);



}
void delay(uint i)
{
  uint k;
        for(k=0;k
}

回复评论 (4)

你好好检查一下这个函数,void disp(uchar j)看看逻辑上是否有问题,电路连接情况,你自己和单片机引脚对应一下,看看操作的引脚和实际段位是否一致。
点赞  2019-5-13 09:28
你这led[j/10]、led[j%10],小于10,P1没变啊,怎么闪烁
点赞  2019-5-17 11:48

楼主代码是截取了一部分吗?你那的j的取值是多少?正如2楼所说的,如果led [j/10]、led[j%10],小于10,P1就不会达到预期的效果了!你看看是否是j的取值的问题!

点赞  2019-6-17 14:26

个位有闪烁,但是由于你间隔的时间有问题,P2.0亮的时间是delay(100);,尔灭的时间是delay(100);+delay1s();,所以就看不清了!

点赞  2019-8-4 20:49
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复