/********************************************************************
汇诚科技
网址:http://www.ourhc.cn
产品有售淘宝店:http://shop36330473.taobao.com
*********************************************************************/
#include <reg52.H>
/****************************************************************************
24C08 读写驱动程序 开始
*****************************************************************************/
signed char sec; //定义数值
bit write=0; //写24C08 的标志;
/////////24C08 读写驱动程序////////////////////
sbit scl=P3^3; // 24c08 SCL
sbit sda=P3^4; // 24c08 SDA
sbit P2_0=P2^0;//数据重载按键
void Delay(unsigned char x) //延时函数
{ unsigned int i;
for(i=0;i<x;i++);
;}
void flash()//延时
{ ; ; }
void x24c08_init() //24c08 初始化子程序
{scl=1; flash(); sda=1;flash();}
void start() //启动(I方C)总线
{sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
void stop() //停止(I方C)总线
{sda=0; flash(); scl=1; flash(); sda=1; flash();}
void writex(unsigned char j) //写一个字节
{
unsigned char i,temp;
temp=j;
for (i=0;i<8;i++)
{temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
scl=0; flash(); sda=1; flash();
}
unsigned char readx() //读一个字节
{
unsigned char i,j,k=0;
scl=0; flash(); sda=1;
for (i=0;i<8;i++)
{
flash(); scl=1; flash();
if (sda==1) j=1;
else j=0;
k=(k<<1)|j;
scl=0;}
flash(); return(k);
}
void clock() //(I方C)线时钟
{
unsigned char i=0;
scl=1; flash();
while ((sda==1)&&(i<255))i++;
scl=0; flash();
}
////////从24c02 的地址address 中读取一个字节数据/////
unsigned char x24c08_read(unsigned char address)
{
unsigned char i;
start(); writex(0xa0);
clock(); writex(address);
clock(); start();
writex(0xa1); clock();
i=readx(); stop();
Delay(10);
return(i);
}
//////向24c02 的address 地址中写入一字节数据info/////
void x24c08_write(unsigned char address,unsigned char info)
{
//EA=0;
start(); writex(0xa0);
clock(); writex(address);
clock(); writex(info);
clock(); stop();
//EA=1;
Delay(50);
}
/****************************************************************************
24C08 读写驱动程序 结束
*****************************************************************************/
void main(void)
{
x24c08_init(); //初始化24C08
sec=x24c08_read(2);//读出保存的数据赋于sec
if(P2_0==0)sec=10;//当按键按下时,数据重载
//sec=10; //设置使用次数
sec--;
write=0; //清零
x24c08_write(2,sec); //在24c08 的地址2 中写入数据sec
while(1)
{
if(sec>=1)P2=0XAA; //显示结果
}
}
|