打印

请教:74HC165级联的C程序

[复制链接]
10607|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++)就这么简单

使用特权

评论回复
5
yuanquan12345|  楼主 | 2011-2-22 09:47 | 只看该作者
谢谢。。。。。。。。。。

使用特权

评论回复
6
zhaoyu2005| | 2011-2-22 09:53 | 只看该作者
LZ是不是一直等着呢,回复的挺快的,其实这些东西,看看datasheet,再自己验证下就明白了

使用特权

评论回复
7
yuanquan12345|  楼主 | 2011-2-22 10:15 | 只看该作者
由于水平低,试了好多次。
谢谢。

使用特权

评论回复
8
老老实实| | 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;
}

===》以此类推,输出多个字节,就很好搞掂了,

使用特权

评论回复
9
yuanquan12345|  楼主 | 2011-2-22 16:50 | 只看该作者
谢谢,还是没弄好,明天继续。

使用特权

评论回复
10
zhaoyu2005| | 2011-2-23 09:37 | 只看该作者
差不多就是这样,时序你自己核对

使用特权

评论回复
11
yuanquan12345|  楼主 | 2011-2-23 16:01 | 只看该作者
解决了,谢谢。

使用特权

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

本版积分规则

75

主题

1155

帖子

3

粉丝