找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4178|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机数码管显示问题分析

[复制链接]
跳转到指定楼层
楼主
ID:473410 发表于 2019-1-28 18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
话不多说,直接上单片机代码
void digdisplay(){
        u8 i;
        for(i=0;i<8;i++)
        {
                switch(i)
                {
                        case(0):LSA=0;LSB=0;LSC=0;break;
                        case(1):LSA=1;LSB=0;LSC=0;break;
                        case(2):LSA=0;LSB=1;LSC=0;break;
                        case(3):LSA=1;LSB=1;LSC=0;break;
                        case(4):LSA=0;LSB=0;LSC=1;break;
                        case(5):LSA=1;LSB=0;LSC=1;break;
                        case(6):LSA=0;LSB=1;LSC=1;break;
                        case(7):LSA=1;LSB=1;LSC=1;break;               
                }
                P0=smgduan[i];
                delay(200);
                P0=0x00;
        }
}
这是用了138译码器写的动态数码管显示7-0这8个数字的一个函数,其余部分都没有什么问题,程序可以正常运行,数码管也是按照希望的从右到左顺序循环显示,但是我想让它从右到左显示,就把程序改成了下列形式void digdisplay()
{
        u8 i;
        for(i=7;i>=0;i--)
        {
                switch(i)
                {
                        case(0):LSA=0;LSB=0;LSC=0;break;
                        case(1):LSA=1;LSB=0;LSC=0;break;
                        case(2):LSA=0;LSB=1;LSC=0;break;
                        case(3):LSA=1;LSB=1;LSC=0;break;
                        case(4):LSA=0;LSB=0;LSC=1;break;
                        case(5):LSA=1;LSB=0;LSC=1;break;
                        case(6):LSA=0;LSB=1;LSC=1;break;
                        case(7):LSA=1;LSB=1;LSC=1;break;               
                }
                P0=smgduan[i];
                delay(200);
                P0=0x00;
        }
}
按道理来说是没有问题的啊,但是正真的情况是它会从右到左显示7-0之后,最后一位数码管就变成了8,然后卡死在这里,很长时间(大概40s)之后重复显示7-0.这就不太明白啦。然后我就把程序修改成如下形式
void digdisplay()
{
        u8 i;
        for(i=8;i>0;i--)
        {
                switch(i)
                {
                        case(1):LSA=0;LSB=0;LSC=0;break;
                        case(2):LSA=1;LSB=0;LSC=0;break;
                        case(3):LSA=0;LSB=1;LSC=0;break;
                        case(4):LSA=1;LSB=1;LSC=0;break;
                        case(5):LSA=0;LSB=0;LSC=1;break;
                        case(6):LSA=1;LSB=0;LSC=1;break;
                        case(7):LSA=0;LSB=1;LSC=1;break;
                        case(8):LSA=1;LSB=1;LSC=1;break;               
                }
                P0=smgduan[i-1];
                delay(200);
                P0=0x00;
        }
}

这就可以满足从右到左循环显示7-0,而且期间没有停留,是一直循环,但是我感觉这两个程序表达的应该是一个意思啊,不知道为什么第一个不能实现希望的效果。求大神解答,初学51单片机,请多指教!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:232524 发表于 2019-1-28 20:02 来自手机 | 只看该作者
兄弟,你u8应该定义的是unsigned char或者其他无符号类型的,然后变量i减到0之后再减1,不是变成-1,是会变成一个大于0的数,如果是unsigned char就会变成255,然后继续循环,希望对你有帮助
回复

使用道具 举报

板凳
ID:473410 发表于 2019-1-30 13:56 来自手机 | 只看该作者
liut_text 发表于 2019-1-28 20:02
兄弟,你u8应该定义的是unsigned char或者其他无符号类型的,然后变量i减到0之后再减1,不是变成-1,是会变 ...

哦哦,明白了秒懂,谢谢了
回复

使用道具 举报

地板
ID:472268 发表于 2019-1-30 16:20 | 只看该作者
放眼天下 发表于 2019-1-30 13:56
哦哦,明白了秒懂,谢谢了

嗯!还不错,是个妙人儿!

评分

参与人数 5黑币 +65 收起 理由
zhengchong60 + 15
Trump1438 + 15
Sawardeakar + 15
找人PK + 10
shuisheng60 + 10 很给力!

查看全部评分

回复

使用道具 举报

5#
ID:568766 发表于 2019-10-18 22:30 | 只看该作者
能有51板子的万能历吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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