赐予我力量吧 2023-04-02 18:31 采纳率: 80%
浏览 25
已结题

为什么中间变量用了出现错误?

为什么写iic 的时候读取用中间变量读不出来,比如unsigned char i,用 i = at24c02_writebyte(0x00,1)就不能显示出正确的数值

void main()
{
    unsigned char i = 0;
    P2 = 0xa0;
    P0 = 0x00;
    P2 = 0x00;    
    
    P2 = 0x80;
    P0 = 0xff;
    P2 = 0x00;   
    
    i = at24c02_writebyte(0x00,1);
    Delay(200);       
    while(1)
    {
        DisplaySMG_Bit(0x01,SMGNoDot_CA[i]);
        Delay(10);
    }
}

但是如果不用i这个中间变量就可以



```c
void main()
{
    P2 = 0xa0;
wanzheng    P0 = 0x00;
    P2 = 0x00;    
    
    P2 = 0x80;
    P0 = 0xff;
    P2 = 0x00;   
    
    at24c02_writebyte(0x00,1);
    Delay(200);     
    while(1)
    {
        DisplaySMG_Bit(0x01,SMGNoDot_CA[AT24C02_Readbyte(0x00)]);
        Delay(10);
    }
}

但是如果不用i这个中间变量就可以

```c

#include "reg52.h"
#include "iic.h"     
#define  AT24C02_ADD 0xa0
unsigned char SMGNoDot_CA[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 

void Delay(unsigned int t)
{
    while(t--);
}

//================
void DisplaySMG_Bit(unsigned char pos ,unsigned char value)
{
    P2 = 0xc0;
    P0 = pos;
    P2 = 0xe0;
    P0 = value;
}

//================

void at24c02_writebyte(unsigned char dizhi,unsigned char shuzhi)
{
    IIC_Start();
    IIC_SendByte(AT24C02_ADD);
    IIC_WaitAck();             
    IIC_SendByte(dizhi);     
    IIC_WaitAck();             
    IIC_SendByte(shuzhi);     
    IIC_WaitAck();   
    IIC_Stop();
}

unsigned char AT24C02_Readbyte(unsigned char dizhi)  
{
  unsigned char Data;    
    IIC_Start();
    IIC_SendByte(AT24C02_ADD); 
    IIC_WaitAck();            
    IIC_SendByte(dizhi);       
    IIC_WaitAck();  
  IIC_Start();    
    IIC_SendByte(AT24C02_ADD | 0x01); 
    IIC_WaitAck();    
    Data = IIC_RecByte(); 
    IIC_SendAck(1);
    IIC_Stop();
    return Data;
}

void main()
{
    P2 = 0xa0;
    P0 = 0x00;
    P2 = 0x00;    
    
    P2 = 0x80;
    P0 = 0xff;
    P2 = 0x00;   
    
    at24c02_writebyte(0x00,1);
    Delay(200);     
    while(1)
    {
        DisplaySMG_Bit(0x01,SMGNoDot_CA[AT24C02_Readbyte(0x00)]);
        Delay(10);
    }
}
  • 写回答

2条回答 默认 最新

  • [小G] 2023-04-02 18:42
    关注

    函数 at24c02_writebyte 返回值类型为void,用i=at24c02_writebyte()是错误用法,这个函数不会给你返回任何东西;
    而AT24C02_Readbyte有返回值就可以

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题