打印

高手帮看一下74595的两级级联程序!有问题吗?

[复制链接]
2559|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2007-4-16 20:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序的意思为:在16个膜冲过后,在第一个595的输出端输出数组cm[]的第i个字节,在第二个595的输出端输出数组cn[]的第i个字节.
遇到问题:我发现两个595的Q0,Q4端都没有波形,为底电平.(绝对没有虚焊的问题)请大家指导!

#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int

sbit SER = P3^0;
sbit SRCLK = P3^1;
sbit RCK = P3^5;
uchar data cm[5]={0x31,0x02,0x56,0x45,0x12};
uchar data cn[5]={0x33,0x34,0x54,0x43,0x14};

void Write595(uchar val,uchar val2);
void main(void)
{
    uchar i;

   while(1)
    {
        for (i=0;i<5;i++)
        {
           Write595(cm,cn);
        }
    }
}
    
void Write595(uchar val,uchar val2)
{
    uchar i;
    for (i=0;i<8;i++)
    {
        SRCLK=0;
        SER=(bit)(val&0x01);
        val=val>>1;
        SRCLK=1;
    }                   

    for (i=0;i<8;i++)
    {
        SRCLK=0;
        SER=(bit)(val2&0x01);
        val2=val2>>1;
        SRCLK=1;
    }
    RCK =0;
    _nop_();
    _nop_();
    RCK =1;
}

相关帖子

沙发
1dqmoon| | 2007-4-16 22:32 | 只看该作者

刚好写了个,自己看吧

用的是avr单片机,宏定义上有点差别,不过也能看得过去了.


void send_595(unsigned char dataH, unsigned char dataL)
{
    int mask = 0x80;
    int i= 0;
    CLK1_595;
    LANUCH1_595;

    for(i=0; i<8; i++)
    {
        if(dataH & mask)
        {
            DATA1_595;
        }
        else
        {
            DATA0_595;
        }
        CLK0_595;
        CLK1_595;
        mask>>=1;
     }

     mask = 0x80;
     for(i=0; i<8; i++)
    {
        if(dataL & mask)
        {
            DATA1_595;
        }
        else
        {
            DATA0_595;
        }
        CLK0_595;
        CLK1_595;
        mask>>=1;
     }
     LANUCH0_595;
     LANUCH1_595;
}

使用特权

评论回复
板凳
ayb_ice| | 2007-4-17 07:57 | 只看该作者

运行看结果就知道了...

使用特权

评论回复
地板
xjc| | 2007-4-17 09:09 | 只看该作者

参考

void serial_parallel_switch()    //串转并
{    uchar i;
 
     for (i=0;i<16;i++)
      { if ((data_out_array &0x01)==1)      //输出一位 
           data_out=1;
        if( (data_out_array<<15)==0x0000)
        data_out=0;
                                         //移位脉冲
        shiftclk_595=0;
        shiftclk_595=1;
        shiftclk_595=0;
                        
        if(i<15)
        data_out_array=data_out_array>>1;
       }
    outclk_595=0;                        //输出脉冲一个
    outclk_595=1;
    outclk_595=0;
}

使用特权

评论回复
5
ccjchen|  楼主 | 2007-4-19 11:03 | 只看该作者

谢谢,以上各位大虾,已经好拉,如上楼大虾所说.

使用特权

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

本版积分规则

175

主题

446

帖子

1

粉丝