标题: 单片机数码管程序显示不正常,最后一个一直全亮 [打印本页]

作者: 2748768859    时间: 2021-2-5 14:38
标题: 单片机数码管程序显示不正常,最后一个一直全亮
刚刚学习几天,求大佬帮忙检查一下这段代码,自己检查了很多遍,实在发现不了问题所在
问题是:下载后8个数码管最后一个一直全亮,用别人的代码最后一个正常显示
单片机源程序如下:
  1. #include <reg52.h>
  2. #define SEG P0 //数码管段选

  3. //***********************************
  4. sbit c=P2^7;        //138译码器                   **
  5. sbit b=P2^6;        //        端口                       **
  6. sbit a=P2^5;        //        分配                           **
  7. //***********************************

  8. unsigned char code Display[6]={0xb0,0x71,0xdb,0x76,0xcf,0x5e};//菜单段码
  9. void MenuDisplay();//菜单显示

  10. void mian()
  11. {
  12.         MenuDisplay();        
  13. }

  14. void MenuDisplay()
  15. {
  16.         unsigned char i;
  17.         unsigned int j;
  18.         for(i=0;i<6;i++)
  19.         {
  20.                 switch(i)
  21.                 {
  22.                         case(0):
  23.                                         c=0;b=0;a=0;break;
  24.                         case(1):
  25.                                         c=0;b=0;a=1;break;
  26.                         case(2):
  27.                                         c=0;b=1;a=1;break;
  28.                         case(3):
  29.                                         c=1;b=0;a=0;break;
  30.                         case(4):
  31.                                         c=1;b=1;a=0;break;
  32.                         case(5):
  33.                                         c=1;b=1;a=1;break;
  34.                 }
  35.                 SEG=Display[i];
  36.                 j=50;        //将变量 j 增大发现最后一个数码管的显示方式是----正常代码与全亮交替显示
  37.                 while(j--);
  38.                 SEG=0x00;//消隐        
  39.         }
  40. }
复制代码



作者: 张天师    时间: 2021-2-5 17:25
看了下,你要的显示应该是扫描显示。而你的程式只有单循环,所以停留在最后一位。这样改改试下:
void mian()
{
        
MenuDisplay();        
}
作者: 张天师    时间: 2021-2-5 17:36
大概看了下,你要求的应该是逐位扫描显示。而你的程式只有单循环,没反复循环,所以显示停留在最后一位。这样改改试下:
void mian()
{
       while(1)
        {      
           MenuDisplay();   
        }   
}
作者: wulin    时间: 2021-2-5 22:16



void mian()//函数名错
{     //函数体错
        MenuDisplay();        
}
正确;
void main()
{
        while(1)
        {
                MenuDisplay();        
        }
}

作者: trm999    时间: 2021-2-6 01:49
貌似只有6个数据
作者: 楚璃    时间: 2021-2-6 09:35
没有循环吧,试试while或者for循环,我个人习惯for
作者: 学生1    时间: 2021-2-6 10:58
你的扫描过程没有循环
作者: Crazy·    时间: 2021-2-7 08:42
加个while(1)让他一直循环你的 MenuDisplay()函数,不然只会运行一遍整个程序就结束了,只会停留在你最后显示的那个数
作者: 2748768859    时间: 2021-2-9 12:13
Crazy· 发表于 2021-2-7 08:42
加个while(1)让他一直循环你的 MenuDisplay()函数,不然只会运行一遍整个程序就结束了,只会停留在你最后 ...

感谢!
作者: 2748768859    时间: 2021-2-9 12:14
张天师 发表于 2021-2-5 17:36
大概看了下,你要求的应该是逐位扫描显示。而你的程式只有单循环,没反复循环,所以显示停留在最后一位。这 ...

感谢!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1