完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想通过24c02,led1602实现按K1键写一个数(数的大小要求在0到9999,这个程序是自己基于之前能正常实现功能但只能读写0到255的数的一段代码改的),按K2键屏幕显示之前写的数的数值。但是实际操作后每次读出来的数不是255就是511,不知道哪里出了问题,希望大家耐心帮帮忙看看哪边出了问题,谢谢!!!
unsigned char wordCode0[6] = "write:"; unsigned char wordCode1[6] = " read:"; void At24c02Write(unsigned char ,unsigned short int dat ); unsigned short int At24c02Read(unsigned char ); void Delay10ms(unsigned int c); void main() { unsigned short int num0,num1 = 0,n; LcdInit(); LcdWriteCom(0x80); for(n=0; n<6; n++) { LcdWriteData(wordCode0[n]); } LcdWriteCom(0x80 + 0x40); for(n=0; n<6; n++) { LcdWriteData(wordCode1[n]); } while(1) { if(K1 == 0) { Delay10ms(1); if(K1 == 0) At24c02Write(2,num0); while((n < 50)&&(K3==0)) { n++; Delay10ms(1); } n=0; } if(K2 == 0) { Delay10ms(1); if(K2 == 0) num1 = At24c02Read(2); while((n < 50)&&(K2 == 0)) { n++; Delay10ms(1); } n=0; } if(K3 == 0) { Delay10ms(1); if(K3 == 0) num0++; } if(K4 == 0) { Delay10ms(1); if(K4 == 0) num0--; } LcdWriteCom(0x87); LcdWriteData('0' + (num0/1000)); LcdWriteData('0' + (num0%1000/100)); LcdWriteData('0' + (num0%1000%100/10)); LcdWriteData('0' + (num0%1000%100%10)); LcdWriteCom(0x87 + 0x40); LcdWriteData('0' + (num1/1000)); LcdWriteData('0' + (num1%1000/100)); LcdWriteData('0' + (num1%1000%100/10)); LcdWriteData('0' + (num1%1000%100%10)); } } void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } void At24c02Write(unsigned char addr,unsigned short int dat) { unsigned short int a,b; uchar c,d; a=a|dat; a=a>>8; c=(uchar)a; b=b|dat; d=(uchar)b; I2C_Start(); I2C_Sendbyte(0xa0); ack(); I2C_Sendbyte(addr); ack(); I2C_Sendbyte(c); ack(); I2C_Sendbyte(d); ack(); I2C_Stop(); } unsigned short int At24c02Read(unsigned char addr) { unsigned short int num; uchar e,f; I2C_Start(); I2C_Sendbyte(0xa0); ack(); I2C_Sendbyte(addr); ack(); I2C_Start(); I2C_Sendbyte(0xa1); ack(); e=I2C_Readbyte(); ack(); f=I2C_Readbyte(); I2C_Stop(); num=e; num=num<<8; num=num|f; return num; } |
|
相关推荐
4个回答
|
|
这里有AT24C02代码,
|
|
|
|
你写和读的时候要有延时,写到那个寄存处地址 就读哪个 这个还是很简单的 网上例子也多 不行可以换个驱动程序试一试,应该是时序的问题
|
|
|
|
at24C在读写一个byte的时候是byte操作,但是超过一个字节就是页操作了,对照规格书的页操作时序好好检查一下,估计是页操作的页地址和时序有问题。你自己翻书吧,总不能叫别人还翻书帮你查程序,那学到的经验是别人的又不是你的。
|
|
|
|
应该是时序的问题,还有,我赞同楼上的说法
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
464 浏览 0 评论
478 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
439 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
994 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1056 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11788 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 15:48 , Processed in 0.816588 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号