fangjinghang 2024-04-08 22:17 采纳率: 75%
浏览 2
已结题

关于采样可变电阻和光敏电阻电压

为什么这个代码在数码管上显示的都是零,没有数值?

#include <REGX52.H>
#include "iic.h"
#include <intrins.h>

unsigned char Collect_dat1=0;
float Result_dat1=0;
unsigned int Display_dat1=0;

unsigned char Collect_dat3=0;
float Result_dat3=0;
unsigned int Display_dat3=0;

unsigned char channel=0;

code unsigned char Seg_Table[] = 
{
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0x88, //A
0x83, //b
0xc6, //C
0xa1, //d
0x86, //E
0x8e //F
};

unsigned char code SMG_Dot[10]={0x40,0x79,
    0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

void SelectHC573(unsigned char n)
{
    switch(n)
    {
        case 4:
            P2=(P2&0x1f)|0x80;
          break;
        case 5:
            P2=(P2&0x1f)|0xa0;
          break;
        case 6:
            P2=(P2&0x1f)|0xc0;
          break;
        case 7:
            P2=(P2&0x1f)|0xe0;
          break;
        case 0:
            P2=(P2&0x1f)|0x00;
          break;
    }
}

void Delay(unsigned int x)        //@11.0592MHz
{
    unsigned char i, j;

    while(x--)
    {
    _nop_();
    _nop_();
    _nop_();
    i = 11;
    j = 190;
    do
    {
        while (--j);
    } while (--i);
  }
}

void Initsystem()
{
    SelectHC573(4);
    P0=0xff;
    SelectHC573(5);
    P0=0x00;
}

void DisplayBit(unsigned char position,unsigned char value)
{
    SelectHC573(6);
    P0=0x01<<position;
    SelectHC573(7);
    P0=value;
}

void DisplayNixie()
{
    DisplayBit(0,SMG_Dot[Display_dat3/100]);
    Delay(2);
    DisplayBit(1,Seg_Table[(Display_dat3/10)%10]);
    Delay(2);
    DisplayBit(2,Seg_Table[Display_dat3%10]);
    Delay(2);
    
    DisplayBit(5,SMG_Dot[Display_dat1/100]);
    Delay(2);
    DisplayBit(6,Seg_Table[(Display_dat1/10)%10]);
    Delay(2);
    DisplayBit(7,Seg_Table[Display_dat1%10]);
    Delay(2);
}

unsigned char ReadPCF8591(unsigned char dat)
{
    unsigned char temp;
    
    I2CStart();
    I2CSendByte(0x90);
    I2CWaitAck();
    if(dat==1)
    {
      I2CSendByte(0x01);
    }
    else if(dat==3)
    {
        I2CSendByte(0x03);
    }
    I2CWaitAck();
    I2CStop();
    
    I2CStart();
    I2CSendByte(0x91);
    I2CWaitAck();
    temp=I2CReceiveByte();
    I2CSendAck(1);
    I2CStop();
    
    return temp;
}

void Write_Read()
{
    Collect_dat1=ReadPCF8591(1);
    Collect_dat3=ReadPCF8591(3);
    
    Result_dat1=Result_dat1*(5.0/255);
    Result_dat3=Result_dat3*(5.0/255);
    
    Display_dat1=Result_dat1*100;
    Display_dat3=Result_dat3*100;
}

void main()
{
    Initsystem();
    while(1)
    {
        DisplayNixie();
        Write_Read();
    }
}


  • 写回答

5条回答 默认 最新

  • Kwan的解忧杂货铺 2024-04-08 22:17
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题:为什么这个代码在数码管上显示的都是零,没有数值?

    解决方案:

    1. 检查硬件连接,确保采样可变电阻和光敏电阻的接口正确连接。

    2. 检查采样数据是否正确读取。可以使用串口调试助手等工具查看采样到的数据是否正确。

    3. 检查数码管是否正常工作。可以通过直接输出数字信号测试数码管是否正常。

    4. 检查代码是否正确。可以通过检查代码中的计算和显示逻辑是否正确来确定问题所在。

    代码修改建议:

    1. 在函数Write_Read()中,需要将读取到的数据转换为电压值。可以在读取数据后进行转换。

    2. 在函数Write_Read()中,需要将转换后的电压值乘以100才能得到正确的显示值。可以在转换为电压值后,乘以100得到正确的显示值。

    3. 在函数Write_Read()中,需要将转换后的电压值赋值给全局变量Result_dat1和Result_dat3才能进行显示。可以在转换为电压值后,将其赋值给全局变量。

    修改后的代码:

    unsigned char ReadPCF8591(unsigned char dat)
    {
        unsigned char temp;
        
        I2CStart();
        I2CSendByte(0x90);
        I2CWaitAck();
        if(dat==1)
        {
          I2CSendByte(0x01);
        }
        else if(dat==3)
        {
            I2CSendByte(0x03);
        }
        I2CWaitAck();
        I2CStop();
        
        I2CStart();
        I2CSendByte(0x91);
        I2CWaitAck();
        temp=I2CReceiveByte();
        I2CSendAck(1);
        I2CStop();
        
        return temp;
    }
    
    void Write_Read()
    {
        Collect_dat1=ReadPCF8591(1);
        Collect_dat3=ReadPCF8591(3);
        
        Result_dat1=Collect_dat1*(5.0/255);
        Result_dat3=Collect_dat3*(5.0/255);
        
        Display_dat1=Result_dat1*100;
        Display_dat3=Result_dat3*100;
    }
    
    void main()
    {
        Initsystem();
        while(1)
        {
            DisplayNixie();
            Write_Read();
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日

悬赏问题

  • ¥20 求下下面这个数据结构代码
  • ¥15 路由器考试怎么办,有懂行的吗 ,eNSP
  • ¥20 前端 二进制文件流图片转化异常
  • ¥15 github上的这个C语言项目如何跑起来
  • ¥15 java 判断某个数 区间是否存在
  • ¥15 appium控制多个雷电模拟器问题
  • ¥15 C# iMobileDevice
  • ¥15 谁会做这个啊#ensp#Boson NetSim
  • ¥15 如何编写针对TPS6503320FRGE型号的电源管理芯片的编程代码?
  • ¥15 设计简单目录管理系统,要满足以下内容