打印

两片165级联程序第二片正常,第一片不正常

[复制链接]
2815|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
uchar w165(uchar x)                                //74HC165写函数
{
        uchar j,i,sum;
        hc165cp=1;                         //移位
               for(i=0;i<8;i++)
        {
                sum<<=1;
                if(hc165Q7)sum|=1;               
                hc165cp=0;                   //时钟
                hc165cp=1;               
        }
        return(sum);
}
void main()
{
      uchar xx=0,yy=0;
   lcd_init();                //初始化LCD  
  // xianshi();   
   while(1)
  {
   hc165pl=1;
   xx=w165();
   yy=w165();
   hc165pl=0;
   xianshi();
   if(xx==0xfe)
   {
    whc595_dat(0xbf);   //也就是单片机的扩展
       hc595st=0;   //595锁存端(12脚
   // delay(1);
    hc595st=1;
   }
   if(yy==0xfe)
   {
    whc595_dat(0xef);
    hc595st=0;
    hc595st=1;
   }
   else
   {
    whc595_dat(0xff);
    hc595st=0;
    hc595st=1;
   }
}
}

相关帖子

沙发
yuanquan12345|  楼主 | 2011-2-22 08:47 | 只看该作者
现在的问题:第一片有输入时输出闪烁。
if(xx==0xfe)这样判断行吗?
第一片用xx.
第二片用yy。
if(yy==0xfe)
等待指点。谢谢。

使用特权

评论回复
板凳
zhaoyu2005| | 2011-2-22 09:44 | 只看该作者
不知道你的时序有问题没,建议你一次把两个片子的数据读入(就是一个函数,并且将数据定义成16位的),不像你现在这样,读两次

使用特权

评论回复
地板
yuanquan12345|  楼主 | 2011-2-22 09:49 | 只看该作者
好的,我试试。
谢谢。

使用特权

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

使用特权

评论回复
6
yuanquan12345|  楼主 | 2011-2-23 16:04 | 只看该作者
问题已解决,谢谢。

使用特权

评论回复
7
wangkangming| | 2014-6-27 17:13 | 只看该作者
yuanquan12345 发表于 2011-2-23 16:04
问题已解决,谢谢。

LZ怎么解决的?

使用特权

评论回复
8
ningling_21| | 2014-6-27 18:19 | 只看该作者
wangkangming 发表于 2014-6-27 17:13
LZ怎么解决的?

你遇到什么问题?

使用特权

评论回复
9
wangkangming| | 2014-6-27 21:05 | 只看该作者
ningling_21 发表于 2014-6-27 18:19
你遇到什么问题?

u16 Read_165_Elect(void)
{
    u8 i;
    u16 read_data = 0;

    HC165_SH_Low;
    __nop();
    __nop();
    HC165_SH_High;
    __nop();
    __nop();
    HC165_CLK_Low;
    for(i=0;i<16;i++)
    {
        read_data <<= 1;
        if(HC165_DATA)
        {
            read_data |= 0x01;
        }
        HC165_CLK_Low;
        __nop();
        __nop();
        HC165_CLK_High;
        __nop();
        __nop();
    }
    return read_data;
}

两片165级联的,这个程序读出来数据是0xff07,实际是0xf7ff。程序哪里出错了呢?多多指教。

使用特权

评论回复
10
wangkangming| | 2014-6-27 21:10 | 只看该作者
ningling_21 发表于 2014-6-27 18:19
你遇到什么问题?

这个是级联原理图。

使用特权

评论回复
11
ningling_21| | 2014-6-27 21:11 | 只看该作者
wangkangming 发表于 2014-6-27 21:05
u16 Read_165_Elect(void)
{
    u8 i;

这里有个用了很久的驱动,你可以试试
b_enb_165=0;// LOAD DATA
    Nop();
    Nop();
    b_enb_165=1;
    Nop();
    Nop();

    temp=0;

        //并行数据串行输出
        for(i=0;i<16;i++)
        {               
                clk_165=0;

                temp<<=1;
                for(dly=10;dly>0;dly--);
                if((dat_165==1))        //数据线=H,L?
                {
                         temp+=1;
                }       
                else{}

                Nop();
                Nop();
                Nop();
                Nop();
                Nop();
                clk_165=1;
                Nop();                               
        }

使用特权

评论回复
12
ningling_21| | 2014-6-27 21:13 | 只看该作者
wangkangming 发表于 2014-6-27 21:10
这个是级联原理图。

165输入端没有上拉且悬空的脚会被读成0的...

使用特权

评论回复
13
ningling_21| | 2014-6-27 21:14 | 只看该作者
wangkangming 发表于 2014-6-27 21:05
u16 Read_165_Elect(void)
{
    u8 i;

再就是你可能把高低字节的顺序搞错了...

使用特权

评论回复
14
wangkangming| | 2014-6-27 21:17 | 只看该作者
ningling_21 发表于 2014-6-27 21:13
165输入端没有上拉且悬空的脚会被读成0的...

OK,谢谢,我加个上拉试试。

使用特权

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

本版积分规则

75

主题

1155

帖子

3

粉丝