• 常用位操作,写8位 12864串口模式 I2C 1302 18B20


    /*以1302为例*/
    void DS1302InputByte(unsigned char d)  //实时时钟写入一字节(内部函数)
    {
        unsigned char i;
        ACC = d;
        for(i=8; i>0; i--)
        {
            DS1302_IO = ACC0;            //相当于汇编中的 RRC
            DS1302_CLK = 1;   //先写底位
            DS1302_CLK = 0;
            ACC = ACC >> 1;
        }
    }
    /*以18b20为例*/
    /*---------------------------写一个字节------------------------------*/
    writeonechar(uchar dat)
    {
      unsigned  char  i=0;
      for(i=8;i>0;i--)
      {
      DQ=0;
      DQ=dat&0x01;
      delay_us(5);
      DQ=1;
      dat>>=1;
      }
      delay_us(4);
    }

    /*I2C*/
    void write_byte(uchar dat)   // 写函数
    {
     char i;
     uchar temp;
     temp=dat;
     delaywus();
     scl=0;
     for(i=0;i<8;i++)
      {
      temp=temp<<1;        //把temp左移一位
      sda=CY;        //把进位中的位送到SDA
      delaywus();
      scl=1;
      delaywus();
      scl=0;
      delaywus();
     }
     sda=1;  /*总线释放**/
     delaywus();
    }

    /*I2C*/
    uchar read_byte()    //读一个字节的函数
    {
     uchar i,j,k;
     scl=0;
     delaywus();
     sda=1;
     delaywus();
     for(i=0;i<8;i++)   //8个循环,读一个字节
     {
      scl=1;
      delaywus();
      j=sda;
      k=(k<<1)|j;    //按位相或,把数据移入k
      scl=0;
      delaywus();
     }
     return k;    //返回值是K,读得的数据
    }

    /*12864*/
    void write_zj(uchar bbyte)
    {    char i;
           for(i=0;i<8;i++)
     {
            SID=bbyte&0x80; //取出最高位
            SCLK=1;
            SCLK=0;
            bbyte<<=1; //左移
            }
    }

  • 相关阅读:
    用SQL语言操作数据
    用表组织数据
    第一个C#程序
    利用CSS3制作网页动画
    CSS3美化网页元素
    列表、表格与媒体元素
    表单
    HTML5基础
    使用Java编译思想
    Day06:方法 / 猜字母游戏
  • 原文地址:https://www.cnblogs.com/riskyer/p/3262971.html
Copyright © 2020-2023  润新知