你好,我有一个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) ;
}
}