当前位置:首页 > 单片机 > 单片机
[导读] #ifndef_I2C_H#define_I2C_H#defineSDA_1P4OUT|=0x02//SDA=1#defineSDA_0P4OUT&=~0x02//SDA=0#defineSCL_1P4OUT|=0x01//SCL=1#defineSCL_0P4OUT&=~0x01//SCL=0#defineSDA_INP4DIR&=~0x02;//I/O口为输入

#ifndef_I2C_H
#define_I2C_H

#defineSDA_1P4OUT|=0x02//SDA=1

#defineSDA_0P4OUT&=~0x02//SDA=0
#defineSCL_1P4OUT|=0x01//SCL=1
#defineSCL_0P4OUT&=~0x01//SCL=0
#defineSDA_INP4DIR&=~0x02;//I/O口为输入
#defineSDA_OUTP4DIR|=0x02//I/0口为输出
#defineJ_SDA_1_or_0(P4IN&0x02)==0x02
//--------------------------------------------
//--------以下为24C64读写子函数
//DELAY函数程序//功能:延时子程序
//==========================================
statICvoidDelay(unsignedintn)
{
while(n!=0)
{n--;}
}
//=========================================
//START函数程序
//功能:开始闪存操作
//==========================================
voidStart(void)
{
SDA_OUT;
SDA_1;
Delay(10);
SCL_1;
Delay(10);
SDA_0;
Delay(10);
SCL_0;
Delay(10);
}

//=========================================
//STOP函数程序
//功能:停止闪存操作
//==========================================
voidStop(void)
{
SDA_0;
Delay(10);
SCL_1;
Delay(10);
SDA_1;
Delay(10);
}



voidTX_Byte(unsignedcharWritEDAta)
{
unsignedchari,j;
j=WriteData;
SDA_OUT;
for(i=0;i<8;i++)
{
if((j&0x80)==0)
{SDA_0;}
else
{SDA_1;}
j<<=1;
Delay(10);
SCL_1;
Delay(10);
SCL_0;
Delay(10);
}
}



unsignedcharRX_Byte(void)
{
unsignedchari;
unsignedcharTempData=0;
SDA_IN;
for(i=0;i<8;i++)
{
Delay(10);
SCL_1;
Delay(10);
TempData<<=1;
if(J_SDA_1_or_0)
{TempData++;}
SCL_0;
Delay(10);
}
SDA_OUT;
return(TempData);
}
//=========================================
//ACK函数程序
//功能:挂高电平表示闪存时钟信号
//==========================================
voidReceiveAck(void)
{
SDA_IN;
SCL_1;
Delay(10);
while(J_SDA_1_or_0)
{}
SCL_0;
SDA_OUT;
Delay(10);
}



unsignedcharReadWord(unsignedlongintunit/*address*/)
{
unsignedcharLowAdd=0;
unsignedcharHighAdd=0;
unsignedcharTempData=0;
LowAdd=(unsignedchar)unit;
HighAdd=(unsignedchar)(unit>>8);
SDA_OUT;
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
Start();
TX_Byte(0xa1);
ReceiveAck();
TempData=RX_Byte();
Stop();
Delay(8000);
return(TempData);
}


voidWriteWord(unsignedlongintunit/*address*/,unsignedcharWriteData)
{
unsignedcharLowAdd=0;
unsignedcharHighAdd=0;
LowAdd=(unsignedchar)unit;
HighAdd=(unsignedchar)(unit>>8);
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
TX_Byte(WriteData);
ReceiveAck();
Stop();
Delay(8000);
}

#endif


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

前言 随着中国整体经济实力的加强,制造和加工工业正逐步向中国转移,这给中国国内工业装备市场带来了大量的商机,国内各行业的制造商开发和制造出大量价廉物美的设备,取得了良好的经济和社会效应。

关键字: plc 控制程序

信息共享时代,人们对各种疑难信息都有非常丰富的选择和参考,90后妈妈在育儿方面也有了更丰富的选择和参考,进而影响到母婴消费决策。 根据艾瑞网《2019年中国90后妈妈消费洞察白皮书》报告

关键字: 格兰仕 洗衣机 离子 控制程序

  所谓单按钮启停电路,就是用一个按钮控制电机启停,不像传统双按钮启停一个启动一个停止,单按钮启停电路按一下启动,再按一下停止,再按又启动,如此反复。   单按钮电路是电气专业必须要掌握

关键字: 控制程序 电路图 PLC 程序电路

蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震动发音,体积比较小。

关键字: 单片机 控制程序 蜂鸣器 驱动电路

PWM 在单片机中的应用是非常广泛的,它的基本原理很简单,但往往应用于不同场合上意义也不完全一样,这里我先把基本概念和基本原理给大家介绍一下,后边遇到用的时候起码知道是个什么东西。PWM 是 Pulse Width Mo...

关键字: pwm 单片机 控制程序

我们前边学串口通信的时候,比较注重的是串口底层时序上的操作过程,所以例程都是简单的收发字符或者字符串。在实际应用中,往往串口还要和电脑上的上位机软件进行交互,实现电脑软件发送不同的指令,单片机对应执行

关键字: 串口通信 单片机 控制程序

我们前边学串口通信的时候,比较注重的是串口底层时序上的操作过程,所以例程都是简单的收发字符或者字符串。在实际应用中,往往串口还要和电脑上的上位机软件进行交互,实现电脑软件发送不同的指令,单片机对应执行

关键字: 串口通信 控制程序

同学们在学习技术的时候,一定要多动脑筋,遇到问题后,三思而后问。有些时候你考虑的和真理就差一点点了,没有坚持下去,别人告诉你后才恍然大悟。这样得到的结论,可以让你学到知识,但是却培养不了你的逻辑思维能

关键字: 交通灯 单片机 控制程序 设计原理

上面我们虽然完成了用中断控制电机转动的程序,但实际上这个程序还是没多少实用价值的,我们不能每次想让它转动的时候都上下电啊,是吧。还有就是它不但能正转还得能反转啊,也就是说不但能转过去,还得能转回来呀。

关键字: 控制程序 步进电机 28byj-48
关闭
关闭