51单片机AT24C02存储器结合数码管显示出现的若干个问题

 题目:

 问题1---数码管闪烁---对应的解决方法---减少延时时间---时间过长闪烁越明显---时间过短会不显示

问题2---数码管出现固定的数字,代码如下:

    Nixie_ShowNumber(1,AT24C02_ReadFrame(0x01)/10);
	Delay2ms();
	Nixie_ShowNumber(2,AT24C02_ReadFrame(0x01)%10);
	Delay2ms();

         ---无论怎么改都没有变化---最后发现是 写数据帧 的时序看错

问题3---数码管只有第一、二个数码管发生变化

        ---起初想到抓狂认为可能是因为51单片机故障原因,在一个主函数中多个if语句只会执行第一个if语句

        ---但是有些说不过去,挣扎了几个小时,发现是 写数据帧 的顺序对数码管显示有影响

        ---最后发现是 因为 AT24C02存储器读写数据是需要时间,故需要进行延时

代码如下:

void Data_Update()
{
	unsigned char i;
	for(i=0;i<3;i++)
	{
		Delay2ms();//!!!!!读写需要时间
		AT24C02_WriteFrame(0x01|(0x01<<i),Data[i]);
		Delay2ms();//!!!!!读写需要时间
	}
}

谨以此篇记录这煎熬的过程!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的代码示例,可以将字符串"1234"写入AT24C02存储器的地址0x00处,然后从存储器中读取数据并显示51单片机数码管上。请注意,该代码示例仅供参考,需要根据具体的硬件环境和程序设计进行调整。 ```c++ #include <Wire.h> #include <String.h> #define I2C_ADDR 0x50 // AT24C02存储器的I2C地址 int digitPins[] = {2, 3, 4, 5}; // 数码管的引脚 void setup() { Wire.begin(); // 初始化I2C总线 for (int i = 0; i < 4; i++) { pinMode(digitPins[i], OUTPUT); // 设置数码管引脚为输出模式 digitalWrite(digitPins[i], HIGH); // 关闭数码管 } } void loop() { // 将字符串"1234"写入AT24C02存储器的地址0x00处 Wire.beginTransmission(I2C_ADDR); Wire.write(0x00); // 写入地址0x00 Wire.write("1234"); // 写入数据"1234" Wire.endTransmission(); // 从AT24C02存储器的地址0x00处读取数据并显示数码管上 Wire.beginTransmission(I2C_ADDR); Wire.write(0x00); // 读取地址0x00处的数据 Wire.endTransmission(); Wire.requestFrom(I2C_ADDR, 4); // 请求读取4个字节的数据 String data = ""; while (Wire.available()) { data += char(Wire.read()); // 将字节转换成字符并拼接成字符串 } for (int i = 0; i < 4; i++) { digitalWrite(digitPins[i], LOW); // 打开数码管 delay(5); // 延迟一段时间,确保数码管能够正确显示 digitalWrite(digitPins[i], HIGH); // 关闭数码管 delay(1); // 延迟一段时间,确保数码管能够正确关闭 } } ``` 这段代码中,我们首先通过Wire库将字符串"1234"写入AT24C02存储器的地址0x00处,然后再从该地址读取数据并将其转换成字符串。最后,将字符串中的每个字符依次显示数码管上。需要注意的是,该代码示例仅供参考,实际应用中需要根据具体的硬件环境和程序需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值