jamasliu 发表于 2013-1-17 20:40:07

为什么数码管没有显示

源码如下:

#include "reg51.h"               

unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char dat;                                //定义全局变量

//串行口初始化程序
void Init_Com(void)
{
   TMOD = 0x20;
   PCON = 0x00;
   SCON = 0x50;                       
   TH1 = 0xFd;
   TL1 = 0xFd;
   TR1 = 1;                               
}

//LED数码管延时程序
void delay(void)
{
        int k;
        for(k=0;k<600;k++);
}

//串行中断服务程序
serial()interrupt 4 using 1
{
        if(RI)
        RI=0;
        dat=SBUF;
}

//LED数码管显示程序
void display(int k)
{
        P2=0xfe;                                                                //位选                       
        P0=tab;                                                        //显示千位数字
        delay();                                                                //延时
        P2=0xfd;                                                                //位选
        P0=tab;                                                //显示百位数字
        delay();                                                                //延时
        P2=0xfb;                                                                //位选
        P0=tab;                                                //显示十位数字
        delay();                                                                //延时
        P2=0xf7;                                                                //位选
        P0=tab;                                                        //显示个位数字
        delay();                                                                //延时
//P2=0xff;                                                                //位选
}

//主程序
void main()
{   
           P2=0xff;
        P0=0xff;
        P1=0xff;
        EA=1;
        ES=1;
           Init_Com();
           while(1)
   {
      display(dat);                                                        //显示数据
   }
}

为什么数码管没有显示????附上电路图,请大家帮忙看下,谢谢!!!

zb05022005 发表于 2013-1-17 20:49:13

你把电路图截图片发上来吧,大家看着都方便

jamasliu 发表于 2013-1-17 22:19:51

附上调试截图,请参照,谢谢!!!

wangqh1983 发表于 2013-1-20 09:22:46

本帖最后由 wangqh1983 于 2013-1-20 10:39 编辑


01#include "reg51.h"               
02
03   unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
04
05   unsigned char dat;                              //定义全局变量
06
07   //串行口初始化程序
08   void Init_Com(void)
09   {
10      TMOD = 0x20;
11      PCON = 0x00;
12      SCON = 0x50;                        
13      TH1 = 0xFd;
14      TL1 = 0xFd;
15      TR1 = 1;                              
16   }
17
18   //LED数码管延时程序
19   void delay(void)
20   {
21         int k;
22         for (k=0;k<600;k++);
23   }
24
25   //串行中断服务程序
26   serial()interrupt 4 using 1
27   {
28         if (RI)
29         RI = 0;
30         dat = SBUF;
31   }
32
33   //LED数码管显示程序
34   void display(int k)
35   {
36      P2 = 0x01;                //位选                        
37      P0 = tab;      //显示千位数字
38      delay();                //延时
39      P0=0xff;                //消隐
40      P2=0x02;                //位选
41      P0 = tab;    //显示百位数字
42      delay();                //延时
43      P0=0xff;
44      P2 = 0x04;                //位选
45      P0 = tab;      //显示十位数字
46      delay();                //延时
47      P0=0xff;
48      P2 = 0x08;                //位选
49      P0 = tab;            //显示个位数字
50      delay();                //延时
51      P0=0xff;
52   }
53
54   //主程序
55   void main(void)
56   {   
57      P2=0xff;
58      P0=0xff;
59      P1=0xff;
60      EA=1;
61      ES=1;
62      Init_Com();
63      while (1)
64      {
65          display(dat);    //显示数据
66      }
67   }

bbssilverkey 发表于 2013-1-20 15:07:58

盲扫了一下了,估计问题在这个:
//串行中断服务程序
serial()interrupt 4 using 1
{
      if(RI)
      RI=0;
      dat=SBUF;
}

jamasliu 发表于 2013-1-20 20:13:45

就是要MAX232呀,不要我也知道行,谢谢大家帮忙顶{:handshake:}{:handshake:}

xhhbaby 发表于 2013-12-13 15:00:56

看看呢........................
页: [1]
查看完整版本: 为什么数码管没有显示