⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8574.c.bak

📁 aduc834单片机PCF8574 4*5键盘驱动程序
💻 BAK
字号:
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit SDA=P1^0;      //模拟I2C 数据传送位
sbit SCL=P1^1;      //D釯2C 时钟控制状态标志
sbit DIR17=P1^7;//74HC245输入输出控制       0:A=B      1:B=A


uchar slvadr ;      //被控器地址
uchar str[14]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03};//要显示的内容

void delay1ms(uchar x)
{  
unsigned char i,j;
        while(x--)
           {
             for(i=5;i>0;i--)
          for(j=132;j>0;j--);
        }
}

/*---------------------------------------------------------------------------------------------------
开始:START
描述:启动I2C 总线子程序--发送I2C 起始条件
---------------------------------------------------------------------------------------------------*/
void start(void)
{
      SDA=1;
      _nop_();
      SCL=1;
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      SDA=0;
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      SCL=0;
}

/*---------------------------------------------------------------------------------------------------
名称:STOP
描述:停止I2C 总线子程序--发送I2C 总线停止条件
---------------------------------------------------------------------------------------------------*/
void stop(void)
{
       SDA=0;
       _nop_();
       SCL=1;
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       _nop_();
       SDA=1;
       _nop_();
       _nop_();
       _nop_();
       _nop_();
}

/**************************************************************************************************
名称:SentByte
描述:字节数据传送子程序发送一个字节数据或地址给被控器PCF8574
**************************************************************************************************/
void sentbyte(uchar sentd)
{
       uchar i;
       for(i=0;i<8;i++)          //要传送的数据长度为8 位
       { 
         sentd<<=1;            //要发送的数据左移
          SDA=CY;
         _nop_();
         _nop_();
           SCL=1;           //置时钟线为高通知被控器开始接收数据位
         _nop_();           //保证时钟高周期大于4 us
         _nop_();
         _nop_();
         _nop_();
         _nop_();
           SCL=0;          //钳住总线准备接收下一个数据位
       }
        _nop_();
_nop_();
        SDA=1;             //8 位发送完后释放数据线准备收应答位
        _nop_();
_nop_();
SCL=1;            //开始接收应答信号
_nop_();
_nop_();
_nop_();
_nop_();
        _nop_();      //判断是否接收到应答信号正常转AckEnd
_nop_();
SCL=0;        //发送结束钳住总线准备下一步发送或接收数据或进行其它处理
}

/**************************************************************************************************
发送数据程序
名称:SendData
描述:发送1个字节数据给PCF8574
*************************************************************************************************/
void senddata(uchar *ucI)
{
       uchar datauci=0;
       start();
       sentbyte(slvadr);
       datauci=*ucI;
       sentbyte(datauci);
       stop();
       delay1ms(10);
}

/*************************************************************************************
      地址为addr PCF8574       作为准双向口输出 
**************************************************************************************/
void output_control(uchar addr, uchar *outdata)
{
        slvadr=addr;
senddata(outdata);
}


/*************************************************************************************
主程序
**************************************************************************************/
void main()
{
       uchar *p;
       DIR17=0;
       while(1)
        {
          for(p=str;p<(str+14);p++)
            {
             output_control(0x42,p);
             delay1ms(70);
         }
       }
}
void  I2C0_ISR(void)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -