打印
[51单片机]

数码管消隐求助

[复制链接]
1682|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
why812182493|  楼主 | 2013-12-21 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机:stc89c52rc
实验版:tx-1c

数码管部分代码:

for(i=0;i<10;i++){
        for(j=0;j<w;j++){
                P0=mybit[5-j];
                wela=1;
                wela=0;
                P0=num[a[j]];
                dula=1;
                dula=0;
                delay(3);
        }
}

问题:数码管总是出现右边一位的影子。

全部代码:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define NUMBER 199
sbit dula=P2^6;
sbit wela=P2^7;
sbit f=P2^3;

void delay(int t){
        int i,j;
        for(i=0;i<t;i++)
                for(j=0;j<100;j++);
}

void number(){
        int i,j,a[6],w;
        uchar code num[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71},
        mybit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
        static long int n=NUMBER;
        long int m;
        m=n;
        n--;
        if(n<0){
                n=NUMBER;
                wela=1;
                P0=0;
                wela=0;
                dula=1;
                P0=0xff;
                dula=0;
                P1=0;
                f=0;
                delay(1500);
                f=1;
        }
        for(w=0;m!=0;w++){
                a[w]=m%10;
                m/=10;
        }
        for(i=0;i<10;i++){
                for(j=0;j<w;j++){
                        P0=mybit[5-j];
                        wela=1;
                        wela=0;
                        P0=num[a[j]];
                        dula=1;
                        dula=0;
                        delay(3);
                }
        }
}
void led(){
        static int i=0,flag=1;
        static uchar light,light1=0xfe,light2=0x7f;
        light=light1&light2;
        P1=light;
        light1=_crol_(light1,flag);
        light2=_crol_(light2,-flag);
        i++;
        flag=(i%3==0)?-flag:flag;
}
void main(){
        while(1){
                led();
                number();
        }
}

相关帖子

沙发
craaazyfor| | 2013-12-21 17:35 | 只看该作者
先送数据,再开数码管,切换时,先关闭前一位,再送数据,再开下一位数码管

使用特权

评论回复
板凳
why812182493|  楼主 | 2013-12-21 18:18 | 只看该作者
craaazyfor 发表于 2013-12-21 17:35
先送数据,再开数码管,切换时,先关闭前一位,再送数据,再开下一位数码管 ...

能说具体一点吗?或者给我个参考代码。多谢了

使用特权

评论回复
地板
dirtwillfly| | 2013-12-21 20:45 | 只看该作者

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
why812182493 + 1 赞一个!
5
pang3dsa| | 2013-12-22 01:59 | 只看该作者

早年做数码管扫描的时候有过这样的问题。
快速扫描时不加消隐下位数码管显示不同数字时会有暗红的现象。

关位选->更新数据->开位选   有暗红
写0XFF关数码管->关位选->更新数据->开位选   这样没有暗红

分析是这样
直接关位选,更新数据,原来低电位的数据更新为高电位时,因为电路有寄生电容,靠成位选选通时会有少量的电流通过数码管向寄生电容充电,所以数码管会微亮,产生暗红。先写0XFF可以先给这些电容充电,避免暗红。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
why812182493 + 1 赞一个!
6
craaazyfor| | 2013-12-23 17:42 | 只看该作者
靠,我的答案和5楼的差不多了,还先回,白回了....

使用特权

评论回复
7
why812182493|  楼主 | 2013-12-23 18:19 | 只看该作者
craaazyfor 发表于 2013-12-23 17:42
靠,我的答案和5楼的差不多了,还先回,白回了....

不好意思,我是新人,不太懂规矩,还请见谅。下次会注意的。

使用特权

评论回复
8
why812182493|  楼主 | 2013-12-23 18:25 | 只看该作者
pang3dsa 发表于 2013-12-22 01:59
早年做数码管扫描的时候有过这样的问题。
快速扫描时不加消隐下位数码管显示不同数字时会有暗红的现象。

多谢指教,问题已解决。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

16

帖子

0

粉丝