一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 8887|回复: 106
收起左侧

[其他综合] 数码管显示有残影,困扰几天了还没有解决

[复制链接]
发表于 2014-8-17 23:27 | 显示全部楼层 |阅读模式
本帖最后由 benli 于 2014-8-17 23:32 编辑

单独把显示部分独立出来还是这样


QQ截图20140817230450.png


再发个视频
http://v.youku.com/v_show/id_XNzU2MzU1MzQ0.html

硬件电路结构



QQ截图20140817231727.png



测试程序
  1. #include <REG52.H>
  2. #include <intrins.h>
  3. #define        uint unsigned int
  4. #define        uchar unsigned char
  5. #define  NOP  _nop_        ()                                         
  6. #define  NOP3  _nop_(); _nop_(); _nop_()
  7. #define  Duan P2

  8. sfr T2MOD  = 0xC9;
  9. sfr  P4  = 0xe8;

  10. uchar code Num[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
  11. //uchar code Num[]={1,2,4,8,16,32,64,128,};

  12. uchar a,b,c,d;
  13. char Hour,Sec;
  14. char Min=10;
  15. bit Shan1,Shan2;                                        //闪烁标志         1Hz/2Hz

  16. sbit SMG1= P1^6;                  //时十位
  17. sbit SMG2= P1^7;                  //时个位
  18. sbit SMG3= P3^6;                  //分十位
  19. sbit SMG4= P3^7;                  //分个位
  20. sbit DP  = P4^0;                  //小数点
  21. sbit Maohao=P1^2;                  //冒号

  22. void Delay(uint x)  //延时子函数           50us
  23. {
  24.       uint i,j;
  25.       for(i=x;i>0;i--)     //yanshi x10us
  26.        for(j=15;j>0;j--);  
  27. }

  28. void Xianshi()           /*显示扫描*/
  29. {
  30.                         Duan=Num[Sec/10];                 //段码
  31.                          SMG1=1;                                        //位开
  32.                         Delay(12);                 
  33.                         SMG1=0;                                //位关
  34.                         Duan=0;
  35.                         Delay(20);
  36.         
  37.                         Duan=Num[Sec%10];
  38.                         SMG2=1;                  
  39.                         DP=Shan1;
  40.                         Delay(12);
  41.                         SMG2=0;
  42.                         Duan=0;
  43.                         DP=0;
  44.                         Delay(20);

  45.                         Duan=Num[Min/10];
  46.                          SMG3=1;                  
  47.                         Delay(12);
  48.                         SMG3=0;
  49.                         Duan=0;
  50.                         Delay(20);

  51.                         Duan=Num[Min%10];
  52.                         SMG4=1;                  
  53.                         Delay(12);
  54.                         SMG4=0;
  55.                         Duan=0;
  56.                         Delay(20);
  57. }

  58. void main()
  59. {
  60.         TMOD = 0x01;                                //设置定时器0模式1
  61.         TH0=0xE0;        TL0=0x00;                //设置定时0初值        2ms@24.576M/6T
  62.         TR0=1;                ET0=1;                        //定时器0开始计时
  63.         EA=1;
  64.         SMG1=SMG2=SMG3=SMG4=DP=0;
  65.          while(1)
  66.         {
  67.                 Xianshi();
  68.         }
  69. }
  70. void Tim0(void) interrupt 1 using 3        //定时器中0
  71. {
  72.         TH0=0xf5; TL0=0x95;                //2ms@16M
  73.         a++;
  74.         if(a>124)                                                                         //0.25s
  75.         {
  76.            b++;
  77.                 Shan2=!Shan2;
  78.                 a=0;
  79.                 if(b>1)                                                          //0.5s
  80.                 {
  81.                   c++;
  82.                   b=0;
  83.                   Shan1=!Shan1;

  84.                   if(c>1)
  85.                   {
  86.                            Sec++;
  87.                         c=0;
  88.                         if(Sec>59)
  89.                         {
  90.                                  Min++;
  91.                                  Sec=0;
  92.                         }                                                                        
  93.                   }
  94.                 }
  95.         }
  96. }
复制代码
发表于 2014-8-17 23:30 | 显示全部楼层
搞不懂为啥要用12V驱动
消隐不够要么是截止不完全,要么程序延时有问题
 楼主| 发表于 2014-8-17 23:33 | 显示全部楼层
jigsaw 发表于 2014-8-17 23:30
搞不懂为啥要用12V驱动
消隐不够要么是截止不完全,要么程序延时有问题

3寸数码管内部是6串………………

点评

还有可能是时序不对  发表于 2014-8-18 09:07
发表于 2014-8-17 23:35 | 显示全部楼层
本帖最后由 sdf15937 于 2014-8-17 23:39 编辑

  • void Xianshi()           /*显示扫描*/, d- G5 h  _% @  s! l
  • {
  •                          SMG1=1; SMG2=0; SMG3=0; SMG4=0;                                       //位开
  • Duan=Num[Sec/10];                 //段码
  •                         Delay(12);                 $ E6 X3 c: T- O  }
  • Z$ k* O; X, m& F8 ~  f2 {
  •         * c9 e& Y( i0 ?! Q8 j- f
  •                          SMG1=0; SMG2=1; SMG3=0; SMG4=0;                 4 ?: j6 l) {- i
  •    Duan=Num[Sec%10];
  •                         Delay(12);
  • 8 ?, E2 Q6 [, _, g& |: D3 A
  •                          SMG1=0; SMG2=0; SMG3=1; SMG4=0;                  ; P6 [5 n" y! {  |8 C9 @2 k5 J
  • Duan=Num[Min/10];
  •                         Delay(12);0 R2 w4 n  L* i$ S6 a
  •                         SMG1=0; SMG2=0; SMG3=0; SMG4=1;               * Q. H2 D0 `, {2 T& t
  •   Duan=Num[Min%10];- T8 H; [3 c, a6 c  B' s  p% U
  •                         Delay(12);
  •                          SMG1=0; SMG2=0; SMG3=0; SMG4=0;
  • }






可能还需要调整延时

点评

喂,你这个才是没加消隐吧  发表于 2014-8-18 00:21
 楼主| 发表于 2014-8-17 23:40 | 显示全部楼层
sdf15937 发表于 2014-8-17 23:35
  • void Xianshi()           /*显示扫描*/, d- G5 h  _% @  s! l
  • {
  •                         Du ...

  • 每一位扫描结束位驱动都已经置0了,不需要重复置0吧
    发表于 2014-8-17 23:42 | 显示全部楼层
    benli 发表于 2014-8-17 23:40
    每一位扫描结束位驱动都已经置0了,不需要重复置0吧

    试试看就知道了
     楼主| 发表于 2014-8-17 23:49 | 显示全部楼层

    明天在试吧,已经关机可
    发表于 2014-8-18 00:28 | 显示全部楼层
    三极管截止问题居多
    发表于 2014-8-18 00:30 | 显示全部楼层
    这一看就是程序问题,下一位数码管都有前一位的残影,应该是消隐时间太短导致!~

    点评

    看帖再不认真也敢肯定绝对是你程序问题,消隐时间比点亮时间长也不见得就有效。  发表于 2014-8-18 09:08
    看帖不认真,消隐时间比点亮时间还长  发表于 2014-8-18 07:53
    发表于 2014-8-18 08:36 | 显示全部楼层
    同样的代码,简单调整后,在附带小型数码管的学习板跑一下,以确定是否是硬原因。

    先找到软硬的分水岭,后面的应该就简单了。
    软硬同时分析简直是给自己找麻烦,就算软硬都有影响也至少先找出主因。

    本版积分规则

    QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

    GMT+8, 2024-5-10 12:05 , Processed in 0.069825 second(s), 38 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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