• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机学习问题数码管显示程序调试出错,求指教!

大头 2016-11-22 浏览量:1156

数码管显示0-65536,我是以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定,请各位大侠帮忙看看,我这程序是否有问题,我现在不能做仿真,软件有问题!
程序如下:



sbit deepLE=P3^7;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
            0x99,0x92,0x82,0xf8,
            0x80,0x98,0x88,0x83,
            0xc6,0xa1,0x86,0x8e};
uchar flag=0;
uint get=0,aa=65535;  
void display(uint shu);
void delay(uint);
void main()
{
    deepLE=0;
           TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
        TR1=1;
        while(1)
        {
          if(flag==1)
            {
                  aa=SBUF;
                  flag=0;
                  while(!RI)
                 display(aa);
                 }
          else  
             display(aa);                     
          
        }
        
}
void series() interrupt 4
{
    RI=0;
        get=SBUF;
        flag=1;
}
void display(uint shu)
{
    uint a,b,c,d,e;
        a=shu/10000;
        b=shu%10000/1000;
        c=shu%1000/100;
        d=shu%100/10;
        e=shu%10;

        P2=0xf7;
        P0=table[a];
        delay(5);
        
        P2=0xef;
        P0=table
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 几个数码管啊?要是一个数码管的话,这个程序有问题。

    显示子函数有问题,P0 = table[a]不对,应该是循环显示a、b、c、d、e 3个变量。

    可更改为一下程序实施

    void display(uint shu)
    {
        uint a[5];

        uint n,b;
            a[0]=shu/10000;
            a[1]=shu%10000/1000;
            a[2]=shu%1000/100;
            a[3]=shu%100/10;
            a[4]=shu%10;

            P2=0xf7;

         for(n=0;n<5;n++)
         {

            b = a[n];
            P0=table[b];
            delay(5);

        }
            
            P2=0xef;
            P0=table

    • 发布于 2016-12-03
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 楼主是用什么仿真软件不能仿真呢?具体什么现象呢?
    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 1
    • 0

  • 建议最好还是仿真看看,看代码有些问题看不出来的
    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 1
    • 0

  • Code下面沒完整,您整個貼上來比較清楚,沒P0=table[b]之後的
    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 1
    • 0

  • get=SBUF;

    没看出这个是什么意思!有什么作用!

    还有你编译以后提示什么错误呢?

    • 发布于2016-11-22
    • 举报
    • 评论 0
    • 0
    • 0

  • #include<reg52.h>
    #define uchar unsigned char
    #define uint unsigned int
    uchar code tab_disp[]={
    0x3f,0x06,0x5b,0x4f,
    0x66,0x6d,0x7d,0x07,
    0x7f,0x6f,0x77,0x7c,
    0x39,0x5e,0x79,0x71};
    uchar code tabwela[]={
    0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    uchar i,k,flag;
    uint b,num1[2];
    uchar num[5];
    void delay(uint z)
    {
     uint x,y;
     for(x=z;x>0;x--)
      for(y=10;y>0;y--);
    }
    void display()
    {
     uchar j;
       for(j=0;j<5;j++)
       {
        P0=tabwela[j];
      P2=tab_disp[num[j]];
      delay(1);
      P2=0x00;
       }
    }
    void main()
    {
     TMOD=0x20;//定时器1的工作方式2
     TH1=0xfd; //装数,设定波特率   9600
     TL1=0xfd;
     TR1=1;//启动定时器1
     REN=1;//启动串口接收数据
     SM0=0;//串口工作方式1
     SM1=1;
     EA=1;//开总中断
     ES=1;//开串口中
     while(1)
     {
      if(flag==1)
      {
        num[0]=b/10000;
        num[1]=b%10000/1000;
        num[2]=b%1000/100;
        num[3]=b%100/10;
        num[4]=b%10;
        flag=0;
        SBUF=b;
        while(TI==1)
          TI=0;
      }
      display();  }
     
    }
    void  ser() interrupt 4
    {
     while(RI==1)
     {
      RI=0;
      num1[i]=SBUF;
      i++;
      if(i==2)
       i=0;
      k++;
     }
     if(k==2)
     {
      k=0;
       b=(num1[0]*256)+num1[1];
       flag=1;
     }
    }
    • 发布于2016-12-02
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机学习问题数码管显示程序调试出错,求指教!