发 帖  
原厂入驻New
[问答]

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

3164
分享
数码管显示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

复制代码


0
2011-8-11 09:25:06   评论 分享淘帖 邀请回答
3个回答
程序能编译过吗,若编译能过的话 你下到板子上看看 到底是什么现象啊,通过出现的现象以此来分析问题。
2011-8-11 09:27:53 评论

举报


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

举报

你把单片机的基本语法弄清楚啊
我用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--);


复制代码


}


2011-8-11 09:57:41 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表