SepYoveL 2022-11-09 16:55 采纳率: 50%
浏览 125
已结题

单片机问题需要快点解决

你好,我有一个c51的代码不是自己写的但是我看不懂,需要有个人来帮忙写一下代码注释,要超详细的那种,希望可以帮帮忙.
虽然有注释了但是她说不够全面,需要再改。如果可以的话你可以给我讲,价格15.

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管编码

int Temperature, Humidity;    //定义温湿度

//数码管的位选
sbit S1=P2^0;
sbit S2=P2^1;
sbit S3=P2^2;
sbit S4=P2^3;

//DHT11引脚 
sbit DATA = P3^4;


uchar  U8FLAG,k;
uchar  U8count,U8temp;
uchar  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
uchar  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
uchar  U8comdata;
uchar  count, count_r=0;

uchar Read_Time=0;    //读取的时间
uchar SET_Time=10;    //设定的时间默认是10

uchar set_flag=0;
void Delay(uint j)
{
  uchar i;
  for(;j>0;j--)
  {     
    for(i=0;i<27;i++);
  }
}

void  Delay_10us(void)
{
  uchar i;
  i--;
  i--;
  i--;
  i--;
  i--;
  i--;
}
void  COM(void)
{
  uchar i;
  for(i=0;i<8;i++)       
  {
    U8FLAG=2;
    while((!DATA)&&U8FLAG++);
    Delay_10us();
    Delay_10us();
    Delay_10us();
    U8temp=0;
    if(DATA)U8temp=1;
    U8FLAG=2;
    while((DATA)&&U8FLAG++);
    //超时则跳出for循环          
    if(U8FLAG==1)break;
    //判断数据位是0还是1     
    
    // 如果高电平高过预定0高电平值则数据位为 1 
    
    U8comdata<<=1;
    U8comdata|=U8temp;        //0
  }//rof
}

//温湿度读取子程序
uchar Read_RH(void)
{
  //主机拉低18ms 
  DATA=0;
  Delay(200);  //原来为5
  DATA=1;
  //总线由上拉电阻拉高 主机延时20us
  Delay_10us();
  Delay_10us();
  Delay_10us();
  Delay_10us();
  //主机设为输入 判断从机响应信号 
  DATA=1;
  //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行      
  if(!DATA)         //T !      
  {
    U8FLAG=2;
    //判断从机是否发出 80us 的低电平响应信号是否结束     
    while((!DATA)&&U8FLAG++);
    U8FLAG=2;
    //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
    while((DATA)&&U8FLAG++);
    //数据接收状态         
    COM();
    U8RH_data_H_temp=U8comdata;
    COM();
    U8RH_data_L_temp=U8comdata;
    COM();
    U8T_data_H_temp=U8comdata;
    COM();
    U8T_data_L_temp=U8comdata;
    COM();
    U8checkdata_temp=U8comdata;
    DATA=1;
    //数据校验 
    U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
    if(U8temp==U8checkdata_temp)
    {
      U8RH_data_H=U8RH_data_H_temp;
      U8RH_data_L=U8RH_data_L_temp;
      U8T_data_H=U8T_data_H_temp;
      U8T_data_L=U8T_data_L_temp;
      U8checkdata=U8checkdata_temp;
    }//fi
    return 1;
  }//fi
  else   //传感器不响应
  {
    return 0;
  }
}
//读取温湿度
void Get_TH()
{
  uint temp;
  temp = Read_RH();
  //读出温湿度,只取整数部分
  Humidity = U8RH_data_H;
  Temperature = U8T_data_H;
}

//刷新数码管显示
void Show(uchar num1,uchar num2)
{
  static uchar t=0;

  P0=0xff;   //关闭显示
  switch(t)
  {
  case 0:
    S1=1;S2=0;S3=0;S4=0;
    P0=table[num1/10];
    t++;
    break;
  case 1:
    S1=0;S2=1;S3=0;S4=0;
    P0=table[num1%10];
    t++;
    break;
  case 2:
    S1=0;S2=0;S3=1;S4=0;
    P0=table[num2/10];
    t++;
    break;
  case 3:
    S1=0;S2=0;S3=0;S4=1;
    P0=table[num2%10];
    t=0;
    break;
  }
}


/*主程序:*/
void main()
{
  uchar time=0;
  while (1)
  {
      if(++time>200)//延时
      {
         time=0;
        Get_TH();      //读取温湿度
      }
      Show(Temperature,Humidity);    //显示温湿度
      Delay(1) ;
  }
}


  • 写回答

4条回答 默认 最新

  • cc ²ᶜ 2022-11-10 10:33
    关注

    cr

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

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月9日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)