📄 24-2.c
字号:
//采用89C51,
//24C读写,11.0592M,经过测试ok,能读写24C02的所有字节,并在LED上显示读出的结果
//问题:如果读写24C08,最大地址03FF,该怎么读写?
//ljpwu◎21c.ncom
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uchar d10[4];
void del05s();
void delay();
void ask();
void stop();
void start();
uchar rdby();
void waddr();
void wrby(uchar x);
uchar raddr();
uchar read(uchar address);
void write(uchar address,uchar dat);
void d5ms();
void w8addr(uchar x);
sbit ESDA=P1^3;
sbit ECLK=P1^2;
sbit KEY=P3^7;
sbit ACC0=ACC^0;
sbit ACC1=ACC^1;
sbit ACC2=ACC^2;
sbit ACC3=ACC^3;
sbit ACC4=ACC^4;
sbit ACC5=ACC^5;
sbit ACC6=ACC^6;
sbit ACC7=ACC^7;
uchar code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0-9
0x88,0x83,0xa7,0xa1,0x86,0x8e};//数码字型表A-F
//
//
void main()
{ unsigned int i,j,k;
uchar re,re1,re2;
while(1)
{
P0=0xff;
j=0;
for (k=0;k<256;k++) { //256=0xff
write(k,k);}
for (k=0;k<256;k++){
re=read(k);
re1=re%0x10; //取高4位
re2=re>>4;// 取低4位
for (j=0;j<5;j++)
{
P0=ledcode[re1];
P2=0xfe;
delay();
P0=ledcode[re2];
P2=0xfd;
delay();
}
P2=0xff;delay();delay();
//del05s();
} }
}
void delay()
{unsigned int kk=0x5ff;//0xff
do{_nop_();kk--;}
while(kk!=0);
// ES=0;
// KEY=1;
// if(KEY==0){SBUF=0x99;while(TI==0){;}TI=0;}
// ES=1;
}
void del05s()
{unsigned int kk=0xefff;//
do{_nop_();kk--;}
while(kk!=0);
}
void ask()
{
unsigned int i=0xffff;
ESDA=1;_nop_();ECLK=1;_nop_();
do
{i--;
if(ESDA!=1)
{ECLK=0;i=0;}
}
while(i!=0);
}
/*###################################*/
void stop()
{
ECLK=0; _nop_();
ESDA=0; _nop_();
ECLK=1; _nop_();
ESDA=1;_nop_();
ECLK=0;_nop_();
}
/* */
/*###################################*/
/*24c start */
void start()
{
ESDA=1;_nop_();
ECLK=1;_nop_();
ESDA=0;_nop_();
ECLK=0;_nop_();
}
/*###################################*/
/*24c rdby */
uchar rdby()
{ ESDA=1;
ECLK=1;_nop_();ACC7=ESDA;ECLK=0;_nop_();
ECLK=1;_nop_();ACC6=ESDA;ECLK=0;_nop_();
ECLK=1;_nop_();ACC5=ESDA;ECLK=0;_nop_();
ECLK=1;_nop_();ACC4=ESDA;ECLK=0;_nop_();
ECLK=1;_nop_();ACC3=ESDA;ECLK=0;_nop_();
ECLK=1;_nop_();ACC2=ESDA;ECLK=0;_nop_();
ECLK=1;_nop_();ACC1=ESDA;ECLK=0;_nop_();
ECLK=1;_nop_();ACC0=ESDA;ECLK=0;_nop_();
return(ACC);
}
/*###################################*/
/*24c waddr */
void waddr()
{
start();
wrby(0xa0);
ask();}
/*###################################*/
/*24c raddr */
uchar raddr()
{
start();
wrby(0xa1);
ask();
ACC=rdby();
stop();
return(ACC);
}
/*###################################*/
void wrby(uchar x)
{ ACC=x;
ESDA=ACC7;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=ACC6;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=ACC5;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=ACC4;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=ACC3;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=ACC2;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=ACC1;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=ACC0;ECLK=1;_nop_();ECLK=0;_nop_();
ESDA=1;_nop_();ECLK=1;
}
/*####################################*/
//-----------------------------------------------------
//从指定的地址中读出一个字节数据涵
//-----------------------------------------------------
uchar read(uchar address)
{ waddr();
w8addr(address);
//ACC=raddr();
return(raddr());
}
//-----------------------------------------------------
//向指定的地址中写入一个字节数据涵数
//-----------------------------------------------------
void write(uchar address,uchar dat)
{ //EWP=0;
waddr();
w8addr(address);
wrby(dat);
ask();
stop();
d5ms();
//EWP=1;
}
/* 延时*/
void d5ms()
{ uchar a, b;
for (a=0;a<=15;a++)
{
for (b=0;b<0x7f;b++)
{;}
}
}
void w8addr(uchar x)
{
wrby(x );
ask();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -