找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4038|回复: 9
收起左侧

单片机数码管程序显示不正常,最后一个一直全亮

[复制链接]
ID:869650 发表于 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. }
复制代码


回复

使用道具 举报

ID:814525 发表于 2021-2-5 17:25 | 显示全部楼层
看了下,你要的显示应该是扫描显示。而你的程式只有单循环,所以停留在最后一位。这样改改试下:
void mian()
{
        
MenuDisplay();        
}
回复

使用道具 举报

ID:814525 发表于 2021-2-5 17:36 | 显示全部楼层
大概看了下,你要求的应该是逐位扫描显示。而你的程式只有单循环,没反复循环,所以显示停留在最后一位。这样改改试下:
void mian()
{
       while(1)
        {      
           MenuDisplay();   
        }   
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:213173 发表于 2021-2-5 22:16 | 显示全部楼层
无标题.jpg


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

使用道具 举报

ID:19198 发表于 2021-2-6 01:49 | 显示全部楼层
貌似只有6个数据
回复

使用道具 举报

ID:883149 发表于 2021-2-6 09:35 | 显示全部楼层
没有循环吧,试试while或者for循环,我个人习惯for
回复

使用道具 举报

ID:811405 发表于 2021-2-6 10:58 | 显示全部楼层
你的扫描过程没有循环
回复

使用道具 举报

ID:564486 发表于 2021-2-7 08:42 | 显示全部楼层
加个while(1)让他一直循环你的 MenuDisplay()函数,不然只会运行一遍整个程序就结束了,只会停留在你最后显示的那个数
回复

使用道具 举报

ID:869650 发表于 2021-2-9 12:13 | 显示全部楼层
Crazy· 发表于 2021-2-7 08:42
加个while(1)让他一直循环你的 MenuDisplay()函数,不然只会运行一遍整个程序就结束了,只会停留在你最后 ...

感谢!
回复

使用道具 举报

ID:869650 发表于 2021-2-9 12:14 | 显示全部楼层
张天师 发表于 2021-2-5 17:36
大概看了下,你要求的应该是逐位扫描显示。而你的程式只有单循环,没反复循环,所以显示停留在最后一位。这 ...

感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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