找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数码管消影问题?如何选择延时时间

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>
sbit WEI = P1^6;    //定义位选
sbit DU = P1^7;     //定义段选
void SMG();
#define uchar unsigned char //  8bit, 0 ~     255
#define uint  unsigned int  // 16bit, 0 ~  65,535
void delayms(uint m)    // 11.0592MHz 晶振ms延时,偏差小于1%
{
    uint i, j;
    for(i=m; i>0; i--)
        for(j=114; j>0; j--);
}


void main(void)
{
  SMG();




}


void SMG()
{
   DU = 1;
   P0 = 0x00;
   DU = 0;                 //消影
  
   WEI = 1;
   P0 = 0xfe;        //位选,第一位
   WEI = 0;
   DU = 1;
   P0 = 0x01;         //段选,一横
   DU = 0;
   delayms(300);
}


如果延时选择 delayms(2);就会出现影子。而delayms(300);是试出来刚好合适只显示一横并且不会一横看起来不会有闪烁的的感觉。影子是怎样出现的,怎样选着合适的延时时间?



QQ截图20161012212428.png (103.94 KB, 下载次数: 71)

QQ截图20161012212428.png

QQ截图20161012212508.png (120.75 KB, 下载次数: 78)

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

使用道具 举报

沙发
ID:137239 发表于 2016-10-13 09:16 | 只看该作者
建议不要用延时来消隐,可以采用每次显示前给每位数码管清零,就是P0=0x00。
回复

使用道具 举报

板凳
ID:138155 发表于 2016-10-13 09:32 | 只看该作者
刷新时间变快一些
回复

使用道具 举报

地板
ID:123289 发表于 2016-10-13 10:06 | 只看该作者
正确的做法:
1、将所有的显示动作数据都准备好(就剩一句送出数据不做,目的:以后可以以最短的时间送出数据)
2、一条命令,切断所有LED的显示。如图中的WE1-8。要点:指令少时间短。
3、送出准备好的数据。因为显示已切断,所以无闪动。要点:指令少时间短。这就时为何要事先准备好数据。
4、打开需要显示的那一个LED。
重复扫描显示......
回复

使用道具 举报

5#
ID:123289 发表于 2016-10-13 10:08 | 只看该作者
关键点:
1、在不显示的时候切换显示数据。
2、不显示的时间要短。以提高显示亮度并减小闪动感。
回复

使用道具 举报

6#
ID:123289 发表于 2016-10-13 10:12 | 只看该作者
为了达成以上目的:
硬件上,尽可能将显示扫描“开关”放在同一个口
软件上,先将需要显示的数据准备好,不要:“送出一个,再计算处理一个,再送一个。”。要以最短的时间,在不显示的时候送出。
回复

使用道具 举报

7#
ID:102056 发表于 2016-10-14 17:09 | 只看该作者
STC89C51 发表于 2016-10-13 09:16
建议不要用延时来消隐,可以采用每次显示前给每位数码管清零,就是P0=0x00。

谢谢,方法确实可行。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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