这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请问我的74HC595串入并出芯片是不是有问题?

共3条 1/1 1 跳转至

请问我的74HC595串入并出芯片是不是有问题?

菜鸟
2012-02-17 15:57:58     打赏
在“菜鸟专区”发了一个帖子,可能说的不太清楚。
我做8051数码管显示实验的时候,用到了74HC595,按理说74HC595应该是例如输入0xfe会使LED2的第四个数码管亮,但结果却点亮了第一个数码管。经过调试,我发现如下的代码可以顺序选中LED1的第一个,第二个,第三个,第四个,LED2的第一个,第二个,第三个,第四个数码管。
代吗如下:{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}
可是根据时序图和触发器的原理应该是输如0xfe(11111110)会点亮LED2的第四个数码管啊(因为我认为,应该在另一个口测到QA=QB=...=QG=1,QH=0),但是我发现第一个数码管亮了,实验结果为什么恰好相反呢。。感觉高4位低4位颠倒了,而且高四位和低四位的数据也颠倒了。请问是我理解错了,还是电路图画错了?
注:SM0-SM7低电平位选LED灯。
不胜感激



关键词: 请问     我的     74HC595     串入     芯片     是不是         

菜鸟
2012-02-17 15:59:19     打赏
2楼
 附:程序

 unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,                //数码管编码
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char tab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//数码管位选
sbit RCK =P1^2;
sbit SRCK =P1^1;
sbit SER =P1^0;

void drive595(unsigned char dat)
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
        SRCK=0;
        dat<<=1;
        SER=CY;
        SRCK=1;
    }
    for(i=0;i<8;i++)
    {
        SRCK=0;
        SER=0;
        SRCK=1;
    }
    RCK=0;
    RCK=1;
}

void delay(unsigned char n)        //延时程序 (n=10--200ms)
{
    unsigned char i,j,k;
    for(i=n;i>0;i--)
        for(j=100;j>0;j--)
            for(k=125;k>0;k--);
}

void main()
{
    unsigned char i;
    while(1)
    {for(i=0;i<16;i++)
    {
       
        P0=table[i];
            drive595(tab2[(i%8)]);
            delay(50);
            drive595(0xff);
           
        }
       
    } }
   

菜鸟
2012-02-17 22:36:48     打赏
3楼
谢谢您的回复,我发现我的帖子有些地方没打全。现在改过来了。问题也理解了。
我要实现的是:让8位数码管(2个四位),从左向右依次显示0到F这16个数,也就是,LED1的第一个灯先显示1,1秒后,灭;然后LED1的第二个灯显示2,1秒后,灭;依次显示,当LED2的第四个灯显示8,1秒后,灭后,LED1的第一个灯显示9,然后是A,B,。。。,F。

谢谢

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]