24c04寻址地址怎么写

1.如何给24c04写入数据【24c04寻址地址怎么写】#include#include #define uchar unsigned char#define uint unsigned int#define delay4us() {_nop_();_nop_();_nop_();_nop_();} sbit scl=p1^0; sbit sda=p1^1;//数码管段码 uchar code dsy_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//三位数显示缓冲 uchar disp_buffer[]={0,0,0}; uchar count=0;//延时 void delayms(uint ms) { uchar i; while(ms--) for(i=0;i}//iic启动 void start() { sda=1;scl=1;delay4us();sda=0;delay4us();scl=0; }//iic停止 void stop() { sda=0;scl=0;delay4us();scl=1;delay4us();sda=1; } //读取应答 void rack() { sda=1;delay4us();scl=1;delay4us();scl=0; }//发送非应答信号 void no_ack() { sda=1;scl=1;delay4us();scl=0;sda=0; }//向24c04中写一个字节数据 void write_a_byte(uchar byte) { uchar i; for(i=0;i { byte } rack(); }//向指定地址写数据 void write_random_adress_byte(uchar addr,uchar dat) { start(); write_a_byte(0xa0);write_a_byte(addr);write_a_byte(dat); stop(); delayms(10); }//从24c04中读一个字节数据 uchar read_a_byte() { uchar i,b; for(i=0;i { scl=1;b } return b; }//从当前地址读取数据 uchar read_current_address_data() { uchar dat; start(); write_a_byte(0xa1);dat=read_a_byte();no_ack(); stop(); return dat; }//从任意地址读取数据 uchar random_read(uchar addr) { start(); write_a_byte(0xa0);write_a_byte(addr); stop(); return read_current_address_data(); }//数据转换与显示 void convert_and_display() { disp_buffer[2]=count/100; disp_buffer[1]=count%100/10; disp_buffer[0]=count%100%10; if(disp_buffer[2]==0) //高位为0不显示 { disp_buffer[2]=10; if(disp_buffer[1]==0) //高位为0,次高位为0也不显示 disp_buffer[1]=10; } p0=0xff; p2=0x80; //个位 p0=dsy_code[disp_buffer[0]]; delayms(2); p0=0xff; p2=0x40; //十位 p0=dsy_code[disp_buffer[1]]; delayms(2); p0=0xff; p2=0x20; //百位 p0=dsy_code[disp_buffer[2]]; delayms(2); }//主程序 void main() { count=random_read(0x00)+1; //从24c04的0x00地址读取数据并递增 write_random_adress_byte(0x00,count); //将递增后的计数值写入24c04 while(1) convert_and_display(); //转换并持续刷新数码管显示 } 。
2.IIC/****************************************************//*EEPROM读写演示程序 *//*目标器件:AT89S51 *//*晶振:11.0592MHZ */ /****************************************************************************函数功能:主程序入口参数:出口参数:****************************************************************************//*void main(void){ int eepromdata=http://www.xuexi88.com/zhishi/0; //从EEPROM中读出来的数据存放空间 SDA = 1; SCL = 1; write_byte(0x01, 0x55); //向0x01地址写入0x55(85)的数据 delayms(250); write_byte(0x02, 0xAA); //向0x02地址写入0xAA(170)的数据 delayms(250); delayms(250); eepromdata= read_random(0x02); // 读取其中一个地址内的数据来验证 delayms(250); while(1);}*//****************************************************/#ifndef __I2C_H__#define __I2C_H__/*********************************包含头文件********************************/#include"at89x51.h"#include "intrins.h"/*********************************数据定义**********************************/#define OP_READ 0xa1 // 器件地址以及读取操作#define OP_WRITE 0xa0 // 器件地址以及写入操作//0xa0可以用来写24C04的第一页的256字节,那么0xa2,就用来写第二页/*********************************端口定义**********************************/sbit SDA = P3^3;sbit SCL = P3^4;/****************************************************************************函数功能:延时子程序入口参数:ms出口参数:****************************************************************************/void delayms(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); }}/****************************************************************************函数功能:开始信号入口参数:出口参数:****************************************************************************/void start(){ SDA = 1; SCL = 1; _nop_(); _nop_(); SDA = 0; _nop_(); _nop_(); _nop_(); _nop_(); SCL = 0;}/****************************************************************************函数功能:停止信号入口参数:出口参数:****************************************************************************/void stop(){ SDA = 0; _nop_(); _nop_(); SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); SDA = 1;}/****************************************************************************函数功能:读取数据入口参数:出口参数:read_data****************************************************************************/unsigned char shin(){ unsigned char i,read_data; for(i = 0; i