|
#include<reg52.h>
#define uchar unsigned char
sbit sda=P3^5; //數(shù)據(jù)
sbit scl=P3^4; //時(shí)鐘
uchar a;
void delay() //延時(shí)
{ ;; }
void start() //開(kāi)始信號(hào) 在scl時(shí)鐘高電平時(shí)數(shù)據(jù)sda由高到低跳變
{
sda=1;
scl=1;
delay(); //延時(shí)
sda=0;
delay(); //延時(shí)
}
void stop() //停止 在scl時(shí)鐘高電平時(shí)數(shù)據(jù)sda由低到高跳變
{
sda=0;
scl=1;
delay(); //延時(shí)
sda=1;
delay(); //延時(shí)
}
void respons() //應(yīng)答 在scl時(shí)鐘高電平時(shí)檢測(cè)數(shù)據(jù)sda由高到低跳變,經(jīng)過(guò)幾個(gè)周期無(wú)應(yīng)答自動(dòng)跳過(guò)
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<250))i++; //當(dāng)i=250時(shí)無(wú)應(yīng)答自動(dòng)跳過(guò)
scl=0;
delay();
}
void init() //初始化
{
sda=1;
scl=1;
delay(); //延時(shí)
}
void write_byte(uchar date) //寫一個(gè)字節(jié)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i ++) //循環(huán)8次寫入一個(gè)字節(jié)
{
temp=temp<<1; //temp中的數(shù)據(jù)左移,最高位移入CY存儲(chǔ)器中,低位補(bǔ)零
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar read_byte() //讀取一個(gè)字節(jié)
{
uchar i,k;
scl=0;
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda; //k左移低位用sda代替(左移完后與sda與運(yùn)算),循環(huán)8次,取出完整的字節(jié)
scl=0;
delay();
}
return k; //返回k值
}
void delay1(uchar x) //延時(shí)函數(shù)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void write_add(uchar address,uchar date) //完整的寫字節(jié)過(guò)程
{
start(); //開(kāi)始信號(hào)
write_byte(0xa0); //發(fā)送片選并選擇寫
respons(); //應(yīng)答
write_byte(address); //發(fā)送要寫入的地址
respons(); //應(yīng)答
write_byte(date); //發(fā)送要寫入的數(shù)據(jù)
respons(); //應(yīng)答
stop(); //停止
}
uchar read_add(uchar address) //完整的讀字節(jié)過(guò)程
{
uchar date;
start(); //開(kāi)始信號(hào)
write_byte(0xa0); //發(fā)送片選并選擇寫
respons(); //應(yīng)答
write_byte(address); //發(fā)送要讀取的地址
respons(); //應(yīng)答
start(); //開(kāi)始信號(hào)
write_byte(0xa1); //發(fā)送片選并選擇讀
respons(); //應(yīng)答
date=read_byte(); //讀取數(shù)據(jù)
stop(); //停止
return date; //返回date
}
void main()
{
init(); //初始化
write_add(23,0x5a); //在位置23中寫入5a
delay1(100); //延時(shí)函數(shù)
P1=read_add(23); //在位置23中讀取數(shù)據(jù)并對(duì)P!口賦值
while(1);
}
全部程序51hei下載地址:
24c02例程.zip
(20.52 KB, 下載次數(shù): 57)
2019-6-10 21:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|