OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4938|回复: 4

AT24C02显示数据不对的疑问

[复制链接]

49

主题

148

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2017-11-23
在线时间
133 小时
发表于 2021-1-12 16:01:48 | 显示全部楼层 |阅读模式
1金钱
各位大神,我在使用原子大神的探索者做AT24C02读写测试,原子大神的例子是读写1个文字,我改成读写一组设定的数值,完毕编译都无错误,但就是读出的和设定的不一样,不知道哪里有问题,麻烦各位大神帮忙看下。
说明下,我的目的是key1按下,写入设定值到AT24C02里面存储,key0按下,读出AT24C02里的设定值并显示在LCD上。

主程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "usmart.h"
#include "24cxx.h"
/************************************************
ALIENTEK 探索者STM32F407开发板 实验24
IIC实验-HAL库函数版
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/

//要写入到24c02的字符串数组
const u8 TEXT_Buffer[]={"Explorer STM32F4 IIC TEST"};//定义一个数组,数组内容是Explorer STM32F4 IIC TEST
#define SIZE sizeof(TEXT_Buffer)

int main(void)
{
  u8 key;
        u16 i=0;
        u8 datatemp[SIZE];         
        unsigned char dat[16];//定义写入的数据暂存数组
        unsigned char ddd[16];//定义读出的数据暂存数组
        u8 t1=3,t2=90,t3=124,t4=37;//定义写入数据映射
        u8 d1,d2,d3,d4;//定义读出数据映射
       
  HAL_Init();                  //初始化HAL库   
  Stm32_Clock_Init(336,8,2,7); //设置时钟,168Mhz
        delay_init(168);                   //初始化延时函数
        uart_init(115200);                 //初始化USART
        usmart_dev.init(84);                     //初始化USMART
        LED_Init();                                                //初始化LED       
        KEY_Init();                                                //初始化KEY
        LCD_Init();                                   //初始化LCD
       
        AT24CXX_Init();                                    //初始化IIC
        POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"Apollo STM32F4/F7");
        LCD_ShowString(30,70,200,16,16,"IIC TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2016/1/13");         
        LCD_ShowString(30,130,200,16,16,"KEY1:Write  KEY0:Read");        //显示提示信息       

   //Write_Flash(dat,0,16);    //将dat数组中的数据写入AT24C02中地址从0开始
   //Read_Flash(dat,1,16);    //读出AT24C02中从地址1开始依次往后16个字节放入dat数组中
        while(AT24CXX_Check())//检测不到24c02
        {
                LCD_ShowString(30,150,200,16,16,"24C02 Check Failed!");
                delay_ms(500);
                LCD_ShowString(30,150,200,16,16,"Please Check!      ");
                delay_ms(500);
                LED0=!LED0;//DS0闪烁
        }
        LCD_ShowString(30,150,200,16,16,"24C02 Ready!");   
        POINT_COLOR=BLUE;//设置字体为蓝色          
        while(1)
        {
                key=KEY_Scan(0);
                  //key1按下,写入数据
                if(key==KEY1_PRES)//KEY1按下,写入24C02
                {
                        LCD_Fill(0,170,239,319,WHITE);//清除半屏   
                        LCD_ShowString(30,170,200,16,16,"Start Write 24C02....");
                        //AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);
                  dat[0]=t1;
                        dat[1]=t2;
                        dat[2]=t3;
                        dat[3]=t4;                       
                        AT24CXX_Write(0,(u8*)dat,16);  //将dat数组中的数据写入AT24C02中地址从0开始       
                       
                        LCD_ShowString(30,170,200,16,16,"24C02 Write Finished!");//提示传送完成
                }
                //key0按下,读取数据
                if(key==KEY0_PRES)//KEY0按下,读取字符串并显示
                {
                        LCD_ShowString(30,170,200,16,16,"Start Read 24C02.... ");
                        //AT24CXX_Read(0,datatemp,SIZE);
                        AT24CXX_Read(0,(u8*)ddd,16);//读出AT24C02中从地址1开始依次往后16个字节放入dat数组中
                       
                        LCD_ShowString(30,170,200,16,16,"The Data Readed Is:  ");//提示传送完成
                        LCD_ShowString(30,190,200,16,16,datatemp);//显示读到的字符串
                }


                d1=ddd[0];//读到的数据映射
                d2=ddd[1];//读到的数据映射
                d3=ddd[2];//读到的数据映射
                d4=ddd[3];//读到的数据映射
               
               
                i++;
                delay_ms(10);
                if(i==20)
                {
                        LED0=!LED0;//提示系统正在运行       
                        i=0;
                }
                LCD_ShowxNum(10,3,t1,4,16,0);//显示写入的数值
                LCD_ShowxNum(50,3,t2,4,16,0);
                 LCD_ShowxNum(90,3,t3,4,16,0);
                LCD_ShowxNum(130,3,t4,4,16,0);               
                LCD_ShowxNum(10,20,ddd[0],4,16,0);//显示读到的数值
                LCD_ShowxNum(50,20,ddd[1],4,16,0);
                LCD_ShowxNum(90,20,ddd[2],4,16,0);
                LCD_ShowxNum(130,20,ddd[3],4,16,0);
                LCD_ShowxNum(10,37,d1,4,16,0);//显示读到的映射数据
                LCD_ShowxNum(50,37,d2,4,16,0);
                LCD_ShowxNum(90,37,d3,4,16,0);
                LCD_ShowxNum(130,37,d4,4,16,0);       
                }
}


LCD显示截图如下
微信图片_20210112155644.jpg 微信图片_202101121556441.jpg

最佳答案

查看完整内容[请看2#楼]

你读出来时放在(u8*)ddd里面,但是后来显示处理用的是datatemp。这是俩数组了,怎么可能对啊?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2021-1-12 16:01:49 | 显示全部楼层
你读出来时放在(u8*)ddd里面,但是后来显示处理用的是datatemp。这是俩数组了,怎么可能对啊?
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2021-1-12 18:54:17 | 显示全部楼层
你的代码我试了没有问题,应该是因为你例程实验时写入了上一次的数据,新的代码初始化时没有对24c02进行清零操作,直接进行数据读取导致的。
回复

使用道具 举报

49

主题

148

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2017-11-23
在线时间
133 小时
 楼主| 发表于 2021-1-13 10:12:55 | 显示全部楼层
感谢大神们指点,这个显示的数据肯定是原例程存入的数据,但我按key1键又存入新数据了啊,而且我把原例程的存写注释掉了,看样子我的存入好像没存入成功。所以还能仍然读出原来的数据。
回复

使用道具 举报

49

主题

148

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2017-11-23
在线时间
133 小时
 楼主| 发表于 2021-1-16 10:34:01 | 显示全部楼层
问题解决了,感谢大神们的指导!!!
经过几天联系不同的朋友板子测试,最后确定,我所使用的板子,不知什么原因,这个AT24C02写入有问题,无法写入,但可以读出,又换了个相同的板子,读写正常了,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-1 01:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表