请教:74HC165级联的C程序

[复制链接]
11328|10
 楼主| yuanquan12345 发表于 2011-2-21 21:23 | 显示全部楼层 |阅读模式
从网上没搜到。
 楼主| yuanquan12345 发表于 2011-2-21 21:23 | 显示全部楼层
/*********************165写数据***********/
uchar w165(uchar x)                                //74HC165写函数
{
        uchar j,i,sum;
        hc165cp=1;                         //移位
        hc165pl=0;
        hc165pl=1;
        for(i=0;i<8;i++)
        {
                sum<<=1;
                if(hc165Q7)sum|=1;               
                hc165cp=0;                   //时钟
                hc165cp=1;               
        }
        return(sum);
}
 楼主| yuanquan12345 发表于 2011-2-21 21:25 | 显示全部楼层
这是一个的程序。两个级联和多个级联应该怎样写程序。
请指点。
谢谢。
zhaoyu2005 发表于 2011-2-22 09:39 | 显示全部楼层
如果按常规的级联 for(i=0;i<16;i++)就这么简单
 楼主| yuanquan12345 发表于 2011-2-22 09:47 | 显示全部楼层
谢谢。。。。。。。。。。
zhaoyu2005 发表于 2011-2-22 09:53 | 显示全部楼层
LZ是不是一直等着呢,回复的挺快的,其实这些东西,看看datasheet,再自己验证下就明白了
 楼主| yuanquan12345 发表于 2011-2-22 10:15 | 显示全部楼层
由于水平低,试了好多次。
谢谢。
老老实实 发表于 2011-2-22 14:05 | 显示全部楼层
本帖最后由 老老实实 于 2011-2-22 14:07 编辑

/******************************************************************          显示时间部分
- 函数说明:HC595串行接收一个字节
- 隶属模块:内部
- 参数说明:无
- 返回说明:byte:需要送的数据
- 注      :在时钟的下升沿将数据写进去,先写最高位,最后写最低位
******************************************************************/

void HC595_Recieve_Byte(INT8U byte)
{
        INT8U i = 0;
        for(i=0 ; i<8 ; i++)
        {
           SMG_DIN = byte & (0x80 >>i);   //先写最高位
           SMG_SCK = 0;
           SMG_SCK = 1;                        //产生一个上升沿
        }
}

/******************************************************************
- 函数说明:HC595并行输出一个字节
- 隶属模块:内部
- 参数说明:无
- 返回说明:byte:需要输出的数据
- 注      :HC595_LC产生一个上升沿,就可以并行输出了
******************************************************************/

void HC595_Output_Byte(INT8U byte)
{
        HC595_Recieve_Byte(byte);
        SMG_LC = 0;
        SMG_LC = 1;
}

以上是595输出一个字节是的两个函数

如果要输出两个字节,很明显,只要随便改动一下即可

#define   INT16U      unsigned int

void HC595_Recieve_Byte(INT16U word)
{
        INT8U i = 0;
        for(i=0 ; i<16 ; i++)
        {
           SMG_DIN = word & (0x8000 >>i);   //先写最高位
           SMG_SCK = 0;
           SMG_SCK = 1;                        //产生一个上升沿
        }
}

void HC595_Output_Byte(INT16U word)
{
        HC595_Recieve_Byte(word);
        SMG_LC = 0;
        SMG_LC = 1;
}

===》以此类推,输出多个字节,就很好搞掂了,
 楼主| yuanquan12345 发表于 2011-2-22 16:50 | 显示全部楼层
谢谢,还是没弄好,明天继续。
zhaoyu2005 发表于 2011-2-23 09:37 | 显示全部楼层
差不多就是这样,时序你自己核对
 楼主| yuanquan12345 发表于 2011-2-23 16:01 | 显示全部楼层
解决了,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部