首页 > 其他分享 >基于51单片机的雨刮器【雨量,速度,手动自动,点动,数码管】(仿真)

基于51单片机的雨刮器【雨量,速度,手动自动,点动,数码管】(仿真)

时间:2024-03-31 15:58:24浏览次数:37  
标签:和校验 点动 高低 雨刮器 unsigned char 数码管 dht11

#include "DHT11.h"

unsigned char dht11_dat1[5];//湿度高低+温度高低+和校验
unsigned char dht11_dat2[5];

void delay1ms(unsigned int i) //延时函数
{ 
unsigned char j; 
 while(i--)
 {
	for(j=0;j<110;j++);
 }
}




void dht11_recive1()//接收
{
unsigned char j,k,m;
unsigned int i;
  SDA1=0;
  delay1ms(30);//开始信号20ms
  SDA1=1;
  for(i=0;i<1000;i++)//等待响应
  {
  if(!SDA1)
  	break;
  }
  if(i==1000)
  {	
    SDA1=1;
   	return;//如果没有响应,返回
  }
  for(i=0;i<1000;i++)//等待响应结束
  {
  if(SDA1)
  	break;
  }
  if(i==1000)
  {
    SDA1=1;
   	return;//如果响应超时,返回
  }
  for(i=0;i<1000;i++)//等待开始
  {
  if(!SDA1)
  	break;
  }
  if(i==1000)
  {	
    SDA1=1;
   	return;//如果没有响应,返回
  }
for(k=0;k<5;k++) //接收5个数据
	{
	for(j=0;j<8;j++)//接收8位
		{ 
			m<<=1;
			//===========================
		  for(i=0;i<1000;i++)//等待0信号结束
  			{
  			if(SDA1)
  				break;
  			}
  			if(i==1000)
  			{	
    			SDA1=1;
   				return;//如果超时,返回
  			}
			//===========================
		   for(i=0;i<1000;i++)//等待开始信号
  			{
  			if(!SDA1)
  				break;
  			}
  			if(i==1000)
  			{
    			SDA1=1;
   				return;//如果超时,返回
  			}
			if(i<5)
				m++;
		}
		dht11_dat1[k]=~m;
	}
	delay1ms(1);	  	
} 




void dht11_recive2()//接收
{
unsigned char j,k,m;
unsigned int i;
  SDA2=0;
  delay1ms(30);//开始信号20ms
  SDA2=1;
  for(i=0;i<1000;i++)//等待响应
  {
  if(!SDA2)
  	break;
  }
  if(i==1000)
  {	
    SDA2=1;
   	return;//如果没有响应,返回
  }
  for(i=0;i<1000;i++)//等待响应结束
  {
  if(SDA2)
  	break;
  }
  if(i==1000)
  {
    SDA2=1;
   	return;//如果响应超时,返回
  }
  for(i=0;i<1000;i++)//等待开始
  {
  if(!SDA2)
  	break;
  }
  if(i==1000)
  {	
    SDA2=1;
   	return;//如果没有响应,返回
  }
for(k=0;k<5;k++) //接收5个数据
	{
	for(j=0;j<8;j++)//接收8位
		{ 
			m<<=1;
			//===========================
		  for(i=0;i<1000;i++)//等待0信号结束
  			{
  			if(SDA2)
  				break;
  			}
  			if(i==1000)
  			{	
    			SDA2=1;
   				return;//如果超时,返回
  			}
			//===========================
		   for(i=0;i<1000;i++)//等待开始信号
  			{
  			if(!SDA2)
  				break;
  			}
  			if(i==1000)
  			{
    			SDA2=1;
   				return;//如果超时,返回
  			}
			if(i<5)
				m++;
		}
		dht11_dat2[k]=~m;
	}
	delay1ms(1);	  	
} 

资料借鉴于此纷传

标签:和校验,点动,高低,雨刮器,unsigned,char,数码管,dht11
From: https://blog.csdn.net/qq_63964231/article/details/137202170

相关文章

  • 大电流LED驱动/数码管驱动芯片VK16K33A SOP28,适用于电饭煲,数字电表等
    产品品牌:永嘉微电/VINKA产品型号:VK16K33A封装形式:SOP28概述:VK16K33A是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有数据锁存器、键盘扫描、LED驱动模块等电路。数据通过I2C通讯接口与MCU通信。SEG脚接LED阳极,GRID脚接LED阴极,可支持16SEGx8GRID的点阵LED......
  • 基于EP4CE6F17C8的FPGA数码管时钟显示实例
    一、电路模块本例的电路模块与“基于EP4CE6F17C8的FPGA数码管动态显示实例”中的完全一样,此处就不再给出了。二、实验代码本例使用6个数码管显示时钟的时、分、秒,时与分之间及分与秒之间通过小数点来分隔,代码使用Verilog编写,采用例化的形式,使用了两种方式来实现。第一种方式,共......
  • 聊一聊数码管(提高篇第一期)
    数码管数码管内部原理图及其种类如何判别晶体管引脚排列及其内部结构数码管静态显示原理当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数......
  • 基于EP4CE6F17C8的FPGA双数码管六十进制秒计数实例
    一、电路模块本例的电路模块与“基于EP4CE6F17C8的FPGA数码管动态显示实例”中的完全一样,此处就不再给出了。二、实验代码本例实现2个数码管循环显示00~59,显示间隔为1秒,代码使用Verilog编写,采用例化的形式,共有三个文件。先编写数码管实现显示字形解码的程序,模块名称为seg_deco......
  • 数码管的动态显示
    1.共阴极数码管实现HELLO #include<reg51.h>charstr[]={0x76,0x79,0x38,0x38,0x3F};//HELLOcharwei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; voiddelay(intn){ inti=0,j=0; for(i=0;i<n;i++) { for(j=0;j<120;j++); }} voidseg(){ ......
  • FPGA使用两个HC595驱动8位数码管
    FPGA使用两个HC595驱动8位数码管本文章给出使用FPGA3根线来驱动8位数码管的示例代码,输入为disp_data,共7*8=56位,输出输入如图所示。硬件方面参数该程序只能控制数码管的7位,如有小数点位则控制不了,如有需要请自行修改。最低7位是最右边的那个数码管(这个需要根据你自己的板子......
  • proteus+keil5仿真学习笔记(第二章 1位数码管计数器)
    第二章1位数码管计数器目录第二章1位数码管计数器前言一、数码管的结构原理二、按键应用三、中断处理四、程序设计及仿真proteus电路程序总结前言主要介绍数码管、按键的应用,并涉及单片机中断处理技术。一、数码管的结构原理数码管结构如下:有两种数码......
  • proteus+keil5仿真学习笔记(第三章 4位数码管计数器)
    第三章4位数码管计数器前言一、多位数码管显示程序二、定时器原理三、程序设计与仿真proteus电路程序总结前言4位数码管计数器与1位数码管计数器相比,增加了片选电路,以确定选择哪个数码管进行工作。单片机定时器的应用也与中断处理相似,需要设置一些规定的寄存器,以......
  • 基于EP4CE6F17C8的FPGA单数码管秒计数实例
    一、电路模块本例的电路模块与“基于EP4CE6F17C8的FPGA数码管动态显示实例”中的完全一样,此处就不再给出了。二、实验代码本例实现1个数码管循环显示字符1~F,显示间隔为1秒,代码使用Verilog编写,采用例化的形式,共有三个文件。先编写数码管实现显示字形解码的程序,模块名称为seg_de......
  • FPGA入门笔记008——数码管动态扫描设计与验证
    #FPGA入门笔记008——数码管动态扫描设计与验证1、数码管动态扫描原理​ 8段数码管的结构图如图1所示:图1——8段数码管结构图(a为共阴极,b为共阳极)​ 对于共阴数码管需要给对应段以高电平才会使其点亮,而对于共阳极数码管则需要给低电平才会点亮。AC620上板载的是共阳极数......