找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 873|回复: 1
收起左侧

有没有大佬能帮我把这个单片机程序多加点注释,看不懂

[复制链接]
ID:818973 发表于 2020-9-14 17:28 | 显示全部楼层 |阅读模式
#include "STC12C5A60S2.h"
#include"HW_Printf.h"
#include "BH1750.h"
#include"Sys_Setting.h"
#include "HW_iic.h"
#include <intrins.h>
#include <math.h>
#include<stdio.h>


void delaytime(u16 ms)
{
    u16 i=0;
    u16 j=0;
    for(i=0;i<ms;i++)
    {
        for(j=0;j<110;j++);
    }
}

void delay(unsigned int i)
{
    while(i--);
}
void delay_ms(unsigned int i)
{
    while(i--)
    delay(90);
}


void Delay10u()
{
    unsigned char i;
    _nop_();
    _nop_();
    _nop_();               
    i = 24;
    while (--i);
}

void Delay18ms()                //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();
    _nop_();
    i = 1;
    j = 194;
    k = 159;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    }while (--i);
}

sbit TRH = P2^0;//温湿度传感器DHT11数据接入
int TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,respond,com_data,temp;

//-------dht11函数区---------
char DHT11_rec_byte()
{   
    char i;
    com_data=0;
    for(i=0;i<=7;i++)   
    {
        respond=2;
        while((!TRH)&&respond++);
        Delay10u();
        Delay10u();
        Delay10u();
        if(TRH)
        {
            temp=1;
            respond=2;
            while((TRH)&&respond++);
        }
        else
        temp=0;

        com_data<<=1;
        com_data|=temp;   
    }
    return(com_data);  
}

/****************************************************************************/
//湿度读取子程序
//温度高8位== TH_data
//温度低8位== TL_data
//湿度高8位== RH_data
//湿度低8位== RL_data
//校验 8位 == CK_data
//调用的程序有 delay();, Delay_5us();,RECEIVE();
/***************************************************************************/
void DHT11_receive()
{
    //主机拉低18ms
    TRH=0;
    Delay18ms();
    TRH=1;
    //DATA总线由上拉电阻拉高 主机延时50us
    Delay10u();
    Delay10u();
    //delay_us();delay_us();delay_us();delay_us();
    //主机设为输入 判断从机响应信号
    TRH=1;
    //判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行   
    if(!TRH)   
    {
        respond=2;
        //判断DHT11发出 80us 的低电平响应信号是否结束
        while((!TRH)&& respond++);
        respond=2;
        //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
        while(TRH && respond++);
        //数据接收状态   
        RH_temp = DHT11_rec_byte();
        RL_temp = DHT11_rec_byte();
        TH_temp = DHT11_rec_byte();
        TL_temp = DHT11_rec_byte();
        CK_temp = DHT11_rec_byte();
        TRH=1;
    }                                                                        
}         

void main()
{
    u16 Rec_Val = 0;
    Uart1_Init();
    Init_BH1750();      
    delaytime(100);
    DHT11_receive();   //温湿度读取
    while(1)
    {
        Single_Write_BH1750(0x01);   // power on
        Single_Write_BH1750(0x10);   // H- resolution mode
        delay(500);
        Rec_Val = Multiple_read_BH1750();
        DHT11_receive();   //温湿度读取
        delay(100);

        printf("**************************\n");        
        printf("The light value is %d \n",Rec_Val);
        delaytime(2000);

        printf("The tempature is:%d\n",(int)TH_temp);
        delaytime(2000);

        printf("The humdity is:%d\n",(int)RH_temp);   
        delaytime(2000);
        printf("**************************\n");
        
        delaytime(8000);                             
    }

}
回复

使用道具 举报

ID:819009 发表于 2020-9-16 15:05 来自手机 | 显示全部楼层
虽然我也看不懂,但是我猜是一个单片机控制的温湿度计
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表