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

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条回答
suae
2019-07-16 12:33

你的问题没有把现像说清楚,但我猜应该有两个以下问题:
1、你的串口接收的数据最大是256
2、显示的时候会闪烁。会出现显示数据错误
     如果是我来写这个程序的话以下是思路
     串口接收的数据分两个字节,先传高字节,再传低字节。然后整合成无符号整数。
     主程序中将这个无符号整数存入显示缓存中。
     定时器0作显示用。显示的时候送数据缓存前一定要先关显示位。

一周热门 更多>