微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 定时器控制数码管哪里出了问题?求帮忙

定时器控制数码管哪里出了问题?求帮忙

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
sbit LE=P1^0;
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code dispbit[]={0xf7,0xfb,0xfd,0xfe};
unsigned char m,n,ledout[4];
void delay(void)   
{
     unsigned char a,b,c;
     for(c=1;c>0;c--)
         for(b=102;b>0;b--)
             for(a=20;a>0;a--);
}
main()
{
    int i;
    n=0;
    TMOD=0x01;
    TH0=(65536-50000000)/256;
    TL0=(65536-50000000)%256;
    EA=1;
    ET0=1;
    TR0=1;
    while(1)
    {
       if(n==20)
         {
           n=0;
           m++;
          }
       ledout[0]=tab[m%10000/1000];
          ledout[1]=tab[m%1000/100];
          ledout[2]=tab[m%100/10];
          ledout[3]=tab[m%10];
          for(i=0;i<4;i++)
           {
              LE=0;
              P0=ledout[i];
                  LE=1;
                  P2=dispbit[i];
                  delay();
                 
          
           }         
                  LE=0;
    }

}
void T0_time(void) interrupt 3
{
      TH0=(65536-50000)/256;
      TL0=(65536-50000)%256;
         n++;




主程序里TH0=TL0=(65536-50000000)? 还有就是interrupt之后是3?这是定时器1的中断啊,而程序里面用的是定时器0?  还有问问题的时候可以把问题说出来,比如是灯不亮,还是乱码什么之类的。

这程序乱码的,谢谢高手

我把程序改了后发现数码管顺序不对
#include<reg52.h>
sbit LE=P1^0;
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code dispbit[]={0xf7,0xfb,0xfd,0xfe};
unsigned char m,n,ledout[4];
void delay(void)   
{
     unsigned char a,b,c;
     for(c=1;c>0;c--)
         for(b=102;b>0;b--)
             for(a=20;a>0;a--);
}
main()
{
    int i;
    n=0;
    TMOD=0x01;
    TH0=(65536-50000000)/256;
    TL0=(65536-50000000)%256;
    EA=1;
    ET0=1;
    TR0=1;
    while(1)
    {
       if(n==20)
         {
           n=0;
           m++;
          }
       ledout[0]=tab[m%10000/1000];
          ledout[1]=tab[m%1000/100];
          ledout[2]=tab[m%100/10];
          ledout[3]=tab[m%10];
          for(i=0;i<4;i++)
           {
              LE=0;
              P0=ledout;
                  LE=1;
                  P2=dispbit;
                  delay();
                 
          
           }         
                  LE=0;
    }

}
void T0_time(void) interrupt 1
{
      TH0=(65536-50000)/256;
      TL0=(65536-50000)%256;
         n++;


}

数码管从右往左第二个到第五个亮,第一个不亮,为什么?

最好不要把数组直接赋值给P0,这样很可能显示的是数组的地址值,而不是你所想得到的值

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top