• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: TCA6408  

资源简介

LOW-VOLTAGE 8-BIT I2C AND SMBus I/O EXPANDER 4X4键盘I2C扩展芯片的底层驱动

资源截图

代码片段和文件信息


//面是基于STC系列单片机的TCA6408驱动程序,该程序的硬件是基于电压Vcc1为5.0V,Vccp为5V;编译环境为KEIL C,已调试成功。
//=====================================================================
//                    AD7841 AD转换驱动程序
//硬件连接: SDA ——P3^2;   
//          SCL ——P3^3;    
//          ADDR —— +5V;
//          RESET —— +5V;       
//          Vcc1 --逻辑电源(+5V)
// Vccp --为P0-P7端口供电
//          GND --GND(0V) 
//  2014.2.19完成于合肥工业大学逸夫楼1020;适用于weight scale(防爆板) V5.0
//       通过扫描P0-P7的值来判断那个键被按下
//注意:相对v4.1电路,4个通道加入了SMBJ16CA瞬态抑制二极管能防止AD被瞬态高压损坏。
//软件版本号:V1.0
//=====================================================================
#include 
unsigned char data dataz[2];
void Start(void)
{
    Sda=1;
    _nop_();_nop_();
    Scl=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    Sda=0;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    Scl=0;
}

void Stop(void)
{
    Sda=0;
    _nop_();_nop_();
    Scl=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    Sda=1;
    _nop_();_nop_();_nop_();_nop_();_nop_();
    Scl=0;
}
void WaitAck(void)
{
unsigned char flag=0;
    Sda=1;
_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
if(Sda==0) flag=1;
Scl=0;
_nop_();_nop_();
}

void Ack(void)
{
    Sda=0;
_nop_();_nop_();_nop_();
Scl=1;               //在scl为高时,sda为0
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();
Sda=1;
}

void NoAck(void)
{
Sda=1;
_nop_();_nop_();_nop_();
Scl=1;             //在scl为高时 sda为1
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();_nop_();
Sda=0;


void Send(unsigned char Data)

unsigned char BitCounter=8;
unsigned char temp;
do
{
temp=Data;
Scl=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
if((temp&0x80)==0x80)
    Sda=1;
else
    Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}


unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
         _nop_();_nop_();_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
if(Sda)
     temp=temp|0x01;
else
     tem

评论

共有 条评论

相关资源