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

2019-07-16 06:50发布

数码管显示0-65536,我是以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定,请各位大侠帮忙看看,我这程序是否有问题,我现在不能做仿真,软件有问题!
程序如下:
  1. sbit deepLE=P3^7;
  2. uchar code table[]={0xc0,0xf9,0xa4,0xb0,
  3.             0x99,0x92,0x82,0xf8,
  4.             0x80,0x98,0x88,0x83,
  5.             0xc6,0xa1,0x86,0x8e};
  6. uchar flag=0;
  7. uint get=0,aa=65535;  
  8. void display(uint shu);
  9. void delay(uint);
  10. void main()
  11. {
  12.     deepLE=0;
  13.            TMOD=0x20;
  14.         TH1=0xfd;
  15.         TL1=0xfd;
  16.         REN=1;
  17.         SM0=0;
  18.         SM1=1;
  19.         EA=1;
  20.         ES=1;
  21.         TR1=1;
  22.         while(1)
  23.         {
  24.           if(flag==1)
  25.             {
  26.                   aa=SBUF;
  27.                   flag=0;
  28.                   while(!RI)
  29.                  display(aa);
  30.                  }
  31.           else  
  32.              display(aa);                     
  33.          
  34.         }
  35.         
  36. }
  37. void series() interrupt 4
  38. {
  39.     RI=0;
  40.         get=SBUF;
  41.         flag=1;
  42. }
  43. void display(uint shu)
  44. {
  45.     uint a,b,c,d,e;
  46.         a=shu/10000;
  47.         b=shu%10000/1000;
  48.         c=shu%1000/100;
  49.         d=shu%100/10;
  50.         e=shu%10;

  51.         P2=0xf7;
  52.         P0=table[a];
  53.         delay(5);
  54.         
  55.         P2=0xef;
  56.         P0=table
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
assingle
1楼-- · 2019-07-16 09:59
 精彩回答 2  元偷偷看……
suae
2楼-- · 2019-07-16 12:33

你的问题没有把现像说清楚,但我猜应该有两个以下问题:
1、你的串口接收的数据最大是256
2、显示的时候会闪烁。会出现显示数据错误
     如果是我来写这个程序的话以下是思路
     串口接收的数据分两个字节,先传高字节,再传低字节。然后整合成无符号整数。
     主程序中将这个无符号整数存入显示缓存中。
     定时器0作显示用。显示的时候送数据缓存前一定要先关显示位。
A670521546
3楼-- · 2019-07-16 14:30
你把单片机的基本语法弄清楚啊
我用keil编译了下,用AT89C51
1、所有的uchar改为 unsigned char;
2,、所有的uint改为 unsigned int;
3,加上delay函数的编写代码;





  1. #include<reg51.h>
  2. sbit deepLE=P3^7;
  3. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,
  4.             0x99,0x92,0x82,0xf8,
  5.             0x80,0x98,0x88,0x83,
  6.             0xc6,0xa1,0x86,0x8e};
  7. unsigned char flag=0;
  8. unsigned int get=0,aa=65535;  
  9. void display(unsigned int shu);
  10.   delay(unsigned int x);
  11. void main()
  12. {
  13.     deepLE=0;
  14.            TMOD=0x20;
  15.         TH1=0xfd;
  16.         TL1=0xfd;
  17.         REN=1;
  18.         SM0=0;
  19.         SM1=1;
  20.         EA=1;
  21.         ES=1;
  22.         TR1=1;
  23.         while(1)
  24.         {
  25.           if(flag==1)
  26.             {
  27.                   aa=SBUF;
  28.                   flag=0;
  29.                   while(!RI)
  30.                  display(aa);
  31.                  }
  32.           else  
  33.              display(aa);                     
  34.          
  35.         }
  36.         
  37. }
  38. void series() interrupt 4
  39. {
  40.     RI=0;
  41.         get=SBUF;
  42.         flag=1;
  43. }
  44. void display(unsigned int shu)
  45. {
  46.         unsigned int a,b,c,d,e;
  47.         a=shu/10000;
  48.         b=shu%10000/1000;
  49.         c=shu%1000/100;
  50.         d=shu%100/10;
  51.         e=shu%10;
  52.         P2=0xf7;
  53.         P0=table[a];
  54.         delay(5);
  55.         
  56.         P2=0xef;
  57.         P0=table;
  58.   }

  59.   delay(unsigned int x)
  60.    {
  61.       unsigned int i,j;
  62.    for(i=x;i>0;i--)
  63.        for(j=1100;j>0;j--);
复制代码
}


一周热门 更多>