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

[复制链接]
4064|13
 楼主| yuanquan12345 发表于 2011-2-22 08:44 | 显示全部楼层 |阅读模式
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 | 显示全部楼层
好的,我试试。
谢谢。
 楼主| yuanquan12345 发表于 2011-2-22 16:51 | 显示全部楼层
还是没弄好,明天继续。
 楼主| yuanquan12345 发表于 2011-2-23 16:04 | 显示全部楼层
问题已解决,谢谢。
wangkangming 发表于 2014-6-27 17:13 | 显示全部楼层
yuanquan12345 发表于 2011-2-23 16:04
问题已解决,谢谢。

LZ怎么解决的?
ningling_21 发表于 2014-6-27 18:19 | 显示全部楼层
wangkangming 发表于 2014-6-27 17:13
LZ怎么解决的?

你遇到什么问题?
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。程序哪里出错了呢?多多指教。
wangkangming 发表于 2014-6-27 21:10 | 显示全部楼层
ningling_21 发表于 2014-6-27 18:19
你遇到什么问题?

这个是级联原理图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ningling_21 发表于 2014-6-27 21:11 | 显示全部楼层
wangkangming 发表于 2014-6-27 21:05
u16 Read_165_Elect(void)
{
    u8 i;

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

  7.     temp=0;

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

  12.                 temp<<=1;
  13.                 for(dly=10;dly>0;dly--);
  14.                 if((dat_165==1))        //数据线=H,L?
  15.                 {
  16.                          temp+=1;
  17.                 }       
  18.                 else{}

  19.                 Nop();
  20.                 Nop();
  21.                 Nop();
  22.                 Nop();
  23.                 Nop();
  24.                 clk_165=1;
  25.                 Nop();                               
  26.         }
ningling_21 发表于 2014-6-27 21:13 | 显示全部楼层
wangkangming 发表于 2014-6-27 21:10
这个是级联原理图。

165输入端没有上拉且悬空的脚会被读成0的...
ningling_21 发表于 2014-6-27 21:14 | 显示全部楼层
wangkangming 发表于 2014-6-27 21:05
u16 Read_165_Elect(void)
{
    u8 i;

再就是你可能把高低字节的顺序搞错了...
wangkangming 发表于 2014-6-27 21:17 | 显示全部楼层
ningling_21 发表于 2014-6-27 21:13
165输入端没有上拉且悬空的脚会被读成0的...

OK,谢谢,我加个上拉试试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1155

帖子

3

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