C51编写的AT24C02详细的读写程序.doc

上传人:一*** 文档编号:2738002 上传时间:2020-05-02 格式:DOC 页数:9 大小:781.50KB
返回 下载 相关 举报
C51编写的AT24C02详细的读写程序.doc_第1页
第1页 / 共9页
C51编写的AT24C02详细的读写程序.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《C51编写的AT24C02详细的读写程序.doc》由会员分享,可在线阅读,更多相关《C51编写的AT24C02详细的读写程序.doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、/C51_AT24C02读写程序:/*void start() /开始信号void stop() /停止信号void Ack() /发确认信号void NoAck() /发无确认信号void init()/初始化信号,拉高SDA和SCL两条总线bit write_byte(uchar date)/写一字节,将 date 写入AT24C02 中uchar read_byte()/读一字节,从 AT24C02 中读一字节bit busy() /应答查询,stop()后,启动AT24C02内部写周期 ,启动查询/初始化EEPROM子程序内容为0XFF,nPage(031)void Init_Flas

2、h(uchar nPage) /8 bytes/1 page init 0xFFvoid write_add(uchar address,uchar date)/向 AT24C02 中写数据/从AT24C02中给定的地址nAddr起,将存放在以指针nContent开头的存储空间中的nLen个字节数据,连续写入AT24C02void write_flash(uchar *nContent,uchar nAddr, uchar nLen)uchar read_add(uchar address)/从 AT24C02 中读出数据/从AT24C02中给定的地址nAddr起,读取nLen个字节数据存放在

3、以指针nContent开头的存储空间。void read_flash(uchar *nContent,uchar nAddr, uchar nLen)*/*单片机P2口接74HC138(三八译码器)P2.3-74HC138:/EI、P2.2-74HC138:A2、P2.1-74HC138:A1、P2.0-74HC138:A0译码器输出 Y0,Y1、Y2、Y3、Y4、Y5、Y6、Y7均低电平有效,分别选通18个数码管。包括2个四位一体数码管LG3641BH,共2x4=8个数码管。数码管数据口为P0口。数码管为共阳4位一体数码管。功能: 译码器输出为18个数码管的段选信号,轮流选择18数码管。 v

4、oid display(uchar *nContent,uchar nLen)功能:在8段数码管上显示nLen个字符,这些字符存储在指针nContent开头的往下的内容中。显示原理:1、送出要显示的段数2、P2译码,选择要显示的位3、延时12ms,时间不能太长,否则会闪烁,也不能太短,否则会很暗。4、取消段选,消隐!若要显示多段,重复以上4步!*/#include #include #define uchar unsigned char#define uint unsigned intsbit L8 =P17;sbit P2_3 =P23;/ 74HC138-/EIsbit P2_2 =P22

5、;/ 74HC138-A2sbit P2_1 =P21;/ 74HC138-A1sbit P2_0 =P20;/ 74HC138-A0uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/ 共阳数码管0Fsbit sda=P12;sbit scl=P10;uchar a;void delay()/延时函数 ; void start() /开始信号sda=1;_nop_();scl=1;_nop_();sda=0;_nop_();void stop() /

6、停止信号sda=0;_nop_();scl=1;_nop_();sda=1;_nop_();void Ack() /发确认信号scl = 0;_nop_();sda = 0;_nop_();scl = 1;_nop_();scl = 0;_nop_();void NoAck() /发无确认信号scl = 0;_nop_();sda = 1;_nop_();scl = 1;_nop_();scl = 0;_nop_();/void respons() /应答,在数据传输8位后,等待或者发送一个应答信号/uchar i;/scl=0;/_nop_();/sda=1;/_nop_();/scl=1;

7、 /scl 拉高,准备读数据/delay(); /while(sda=1)&(i250)i+; /读数据/scl=0; /scl 拉低,数据读完毕,(必须)/delay();/void init()/初始化信号,拉高SDA和SCL两条总线sda=1;scl=1;bit write_byte(uchar date)/写一字节,将 date 写入AT24C02 中uchar i;scl=0;for(i=0;i8;i+)date=date1;sda=CY; /将要写入的数据送入SDAscl=1; /scl 拉高,准备写数据_nop_();scl=0; /scl 拉低,写数据完毕_nop_();sda

8、 = 1; /应答时序中,该线必须为高_nop_();scl = 1; /scl 拉高,准备读数据_nop_();CY = sda; /将sda 中的数据读出scl = 0; /scl 拉低,数据读完毕(必须)return(CY);uchar read_byte()/读一字节,从 AT24C02 中读一字节uchar i,k;for(i=0;i8;i+)sda=1;_nop_();scl=1; /scl 拉高,准备读数据_nop_();k=(k0;a-)/for(b=100;b0;b-);/bit busy() /应答查询,stop()后,启动AT24C02内部写周期 ,启动查询start()

9、;CY=write_byte(0xa0);return(CY);/初始化EEPROM子程序内容为0XFF,nPage(031)void Init_Flash(uchar nPage) /8 bytes/1 page init 0xFFuchar nLen;uchar Addr;nLen=8;Addr=8*nPage;start();write_byte(0xa0);write_byte(Addr);for(;nLen!=0;nLen-)write_byte(0xff);stop();void write_add(uchar address,uchar date)/向 AT24C02 中写数据s

10、tart();write_byte(0xa0);/respons();write_byte(address);/respons();write_byte(date);/respons();stop();/从AT24C02中给定的地址nAddr起,将存放在以指针nContent开头的存储空间中的nLen个字节数据,连续写入AT24C02void write_flash(uchar *nContent,uchar nAddr, uchar nLen)uchar i,temp;uchar Addr;Addr = nAddr;start();write_byte(0xa0);write_byte(Ad

11、dr);for(i=0;inLen;i+)if(Addr%8=0)stop(); while(busy();start();write_byte(0xa0);write_byte(Addr);temp=*nContent;write_byte(temp);nContent+;Addr+;stop();uchar read_add(uchar address)/从 AT24C02 中读出数据uchar date;start();write_byte(0xa0);/respons();write_byte(address);/respons();start();write_byte(0xa1);/

12、respons();date=read_byte();NoAck();stop();return date;/从AT24C02中给定的地址nAddr起,读取nLen个字节数据存放在以指针nContent开头的存储空间。void read_flash(uchar *nContent,uchar nAddr, uchar nLen)uchar Addr;Addr = nAddr;start();write_byte(0xa0);write_byte(Addr);start();write_byte(0xa1);while(-nLen)*nContent=read_byte();nContent+;

13、Ack(); /发确认信号*nContent=read_byte();NoAck(); /无确认信号stop(); /发停止信号/*-功能:延时x*0.14ms-*/void delay1(unsigned char x) /x*0.14MS unsigned char i; while(x-) for (i = 0; i8) /最多显示8段nLen = 8;for(i=0;inLen;i+)temp = *nContent;nContent+;P0=tabletemp;P2=P2&0xf0|i; /译中74HC138:Yi(i=0,1,.7),选中第i+1个数码管delay1(10);/延时

14、P2=P2|0x0f; /取消位选,消隐/*-主程序功能:实现存储器EEPROM AT24C02的数据读写操作-*/void main() uchar dat16=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,i;uchar out116=0;uchar out2;P0 = 0xff;P1 = 0xff;P2 = 0xff;P3 = 0xff; init();/初始化 AT24C02Init_Flash(0); /将第31页初始化为0xFF while(busy();/write_add(23,0x5);/在 23 地址处写入数据 0x5;write_flash(dat,23,16); /在 23 地址处连续写入数组dat16数据 ;/delay2(100); while(busy();/out2=read_add(23);/读出地址为 23 处的数据,存储到数组read_flash(out1,23,16); /读出地址为 23 起的16个数据,存储到数组out116 while(1) display(out1,8);/显示out1前8个数字/display(out1+8,8);/显示out1后8个数字

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁