找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机想实现两位数码管00-FF,两个数字好像不能同时显示似的,请大神帮忙看看程序

[复制链接]
跳转到指定楼层
楼主
2黑币
本人初学51单片机(用的慧静电子HL-1 89C52开发板),只会数码管0-9显示,两位,三位显示不会玩,自己写数码管00-FF程序如下,D0-D7对应单片机P0^0-P0^7,这个程序功能是可以实现,但是数码管变成先显示10位,消失,再显示个位,两个数字好像不能同时显示似的,希望高人指点,帮忙看看程序那里不对,谢谢!

1.png (84.52 KB, 下载次数: 44)

1.png

B.png (13.26 KB, 下载次数: 40)

B.png

最佳答案

查看完整内容

楼主这样写个位只能显示10毫秒,十位显示约1秒,视觉只能看的十位,个位微亮或看不到。改一下:
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2020-9-21 08:13 | 只看该作者
楼主这样写个位只能显示10毫秒,十位显示约1秒,视觉只能看的十位,个位微亮或看不到。改一下:
  1. #include<reg52.h>

  2. #define uint  unsigned int
  3. #define uchar unsigned char

  4. sbit dula=P2^6;
  5. sbit wela=P2^7;

  6. unsigned char code table[]={//共阴数码管段码"0~f-."
  7.                 0x3f,0x06,0x5b,0x4f,
  8.                 0x66,0x6d,0x7d,0x07,
  9.                 0x7f,0x6f,0x77,0x7c,
  10.                 0x39,0x5e,0x79,0x71,0x40,0x80};

  11. void delayms(uint xms)
  12. {
  13.         uint i,j;
  14.         for(i=xms;i>0;i--)
  15.                 for(j=110;j>0;j--);
  16. }

  17. void main()
  18. {
  19.         unsigned char i,j,k[2];
  20.         dula=0;
  21.         wela=0;
  22.         while(1)
  23.         {
  24.                 k[0]=table[j/16];
  25.                 k[1]=table[j%16];
  26.                 P0=0x00;dula=1;dula=0;//消隐
  27.                 if(i%2==0)// i=偶数显示十位
  28.                 {
  29.                         P0=0xef;wela=1;wela=0;
  30.                         P0=k[0];dula=1;dula=0;               
  31.                 }
  32.                 else                // i=奇数数显示个位
  33.                 {
  34.                         P0=0xdf;wela=1;wela=0;
  35.                         P0=k[1];dula=1;dula=0;               
  36.                 }
  37.                 i++;
  38.                 if(i>=200)//约1s
  39.                 {
  40.                         i=0;                       
  41.                         if(++j>=255)
  42.                                 j=0;
  43.                 }
  44.                 delayms(5);
  45.         }
  46. }

复制代码
回复

使用道具 举报

板凳
ID:818740 发表于 2020-9-21 21:36 | 只看该作者
本帖最后由 zhujiangzhang 于 2020-9-21 21:45 编辑
wulin 发表于 2020-9-21 14:51
楼主这样写个位只能显示10毫秒,十位显示约1秒,视觉只能看的十位,个位微亮或看不到。改一下:

太棒了,真可以实现了,大概思路是什么?
              
回复

使用道具 举报

地板
ID:213173 发表于 2020-9-22 05:58 | 只看该作者
zhujiangzhang 发表于 2020-9-21 21:36
太棒了,真可以实现了,大概思路是什么?

所谓动态显示就是逐位分时显示。受delayms(5)限制,主循环周期被约束在约5ms,也就是前5ms显示十位,后5ms显示个位,如此反复。由于速度很块,人眼视觉残留效应感觉是同时显示。如果显示的位数多,每位显示的时间要缩短,只要掌握 位数*每位显示的时间<20ms,就不会感到闪烁。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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