标题: 74hc595程序中的这句话是什么意思?ser是怎么么等于1和0的,等于1 和0会怎么样 [打印本页]

作者: 董亚伟    时间: 2014-11-12 07:48
标题: 74hc595程序中的这句话是什么意思?ser是怎么么等于1和0的,等于1 和0会怎么样
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. int i;
  4. sbit ser=P3^4;  //(14脚)串行数据输入
  5. sbit rclk=P3^5;  //(12脚)并行输出控制
  6. sbit srclk=P3^6;  //(11脚)移位时钟控制
  7. void hc595(unsigned char send)
  8. {
  9. unsigned char i;
  10.    rclk=0;
  11.    ser=0;
  12. for(i=0;i<8;i++)
  13.         {
  14.                 if((send<<i)&0x80)
  15.                 {
  16.                     ser=1;         
  17.             }
  18.             else
  19.             {
  20.                ser=0;        
  21.             }
  22.             srclk=0;
  23.             _nop_();
  24.             srclk=1;
  25.                                 
  26.         }
  27.             rclk=0;
  28.            _nop_();
  29.             rclk=1;
  30. }
  31. void main()
  32. {
  33. hc595(0xfe);
  34. for(i=0;i<20000;i++);
  35. hc595(0xff);
  36. for(i=0;i<20000;i++);      
  37. }
复制代码



作者: dgahz    时间: 2014-11-12 08:11
ser接在P3^4,怎样操作P端口不用说了吧?假如接的是LED,怎样让它亮灭会吧!单片机上电后P口电平默认为高电平,只要你后续不操作它它永远为高电平。同时ser也是595的信号输入端,至于先给它低电平再送信号你就当是595的要求吧!
作者: 董亚伟    时间: 2014-11-12 21:17
if((send<<i)&0x80)  这里是什么判断语句,什么情况下它才等1或0
作者: dgahz    时间: 2014-11-13 09:30
设send=10111111, 0x80化为二进制是10000000,   则(send<<1)&0x80=01111111&10000000=0;  (send<<2)&0x80=11111100&10000000=1;
if条件判断语句,当被判断语句值为1或0时分别执行不同的相应操作。

作者: skyhanfeng    时间: 2014-11-14 14:31
if((send<<i)&0x80)
        {
                ser=1;         
           }
else
        {
                ser=0;        
   }
   
应该改为
if(((send<<i)& 0x80) != 0)  //左移i位后判断值是否为0,不等于0就输出1
        {
                ser=1;         
           }
else
        {
                ser=0;        
   }




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1