找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于单片机数码管上显示不完全的问题

[复制链接]
ID:855120 发表于 2020-12-5 21:10 | 显示全部楼层 |阅读模式
就是显示的数码管有断码,显示不完全
有没有大佬能解答一下?

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned uint
  4. uchar code seg[]={0x06,0x6d,0x40,0x4f,0x6d,0x40,0x3f,0x3f};
  5. uchar dis[8];
  6. void delayms(uchar ms)
  7. {
  8.         uchar i;
  9.         while(ms--)
  10.         for(i=0;i<123;i++);
  11. }
  12. void display(void)
  13. {
  14.         uchar i;
  15.         for(i=0;i<8;i++)
  16.         {
  17.                 P0=seg[dis[i]];
  18.                 P2=i;
  19.                 delayms(1);
  20.         }
  21. }
  22. void main(void)
  23. {
  24.         while(1)
  25.         {
  26.                 dis[0]=0;dis[1]=1;dis[2]=2;dis[3]=3;dis[4]=4;dis[5]=5;dis[6]=6;dis[7]=7;
  27.                 display();
  28.         }
  29. }
复制代码


仿真图

仿真图
回复

使用道具 举报

ID:180919 发表于 2020-12-5 22:52 | 显示全部楼层
P0=seg[i];
                P2=i;
                delayms(1);
回复

使用道具 举报

ID:814525 发表于 2020-12-5 23:04 | 显示全部楼层
看你程式要求,P0=seg[dis];应修改为P0=seg[ dis[i] ];

评分

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

查看全部评分

回复

使用道具 举报

ID:88256 发表于 2020-12-5 23:33 | 显示全部楼层
张天师 发表于 2020-12-5 23:04
看你程式要求,P0=seg[dis];应修改为P0=seg[ dis ];

我也是这样认为的,但是看显示的比较正常的,seg字模是 05-35-00 ,显示的也是类似,从图中可以看出,正在显示第A5位的数码管,373输出的也正是3的数据0x4f。如果按字面上的程序看,应该编译无法通过的,而后在发帖进入高级模式时,发现我的[ i ]也被吃掉了,返回文本模式看其实还在,只是最后面多出来一个[ / i ],删除后又自动加上去了,这个其实是论坛的程序影响的。

评分

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

查看全部评分

回复

使用道具 举报

ID:88256 发表于 2020-12-5 23:48 | 显示全部楼层
这个[ i] 被当成文字斜体处理(自动补上[ i])了,不知道管理人员能否取消这个功能或者禁用文字斜体?毕竟论坛经常会遇到发程序带[ i]的。如果没法解决,大家今后遇到正常文字的程序突然变成斜体的就应该留意是否出错了
回复

使用道具 举报

ID:420836 发表于 2020-12-6 01:49 | 显示全部楼层
也许字符码不正确?
回复

使用道具 举报

ID:213173 发表于 2020-12-6 08:13 | 显示全部楼层
楼主程序没有大问题,只是动态数码管显示没有加消隐语句,不适合仿真观察。实物试验数码管会有鬼影,仿真就成乱码。显示程序修改如下:
void display(void)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                P0=0x00;//消隐
                P2=i;//位码
                P0=seg[dis[i]];//段码
                delayms(1);
        }
}
回复

使用道具 举报

ID:332444 发表于 2020-12-6 08:57 | 显示全部楼层
P0=~seg[dis[i]];
回复

使用道具 举报

ID:855120 发表于 2020-12-6 17:21 | 显示全部楼层
wulin 发表于 2020-12-6 08:13
楼主程序没有大问题,只是动态数码管显示没有加消隐语句,不适合仿真观察。实物试验数码管会有鬼影,仿真就 ...

解决了,谢谢解答。
回复

使用道具 举报

ID:855120 发表于 2020-12-6 17:22 | 显示全部楼层
谢谢各位大佬解答,是没有消隐的问题,已经解决了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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