DHT11+LCD12864

news/2025/1/11 14:57:27/

基于STC12C5A60S2单片机的DHT11+LCD12864代码

  1. DHT11.h
  2. DHT11.c
  3. LCD12864.h
  4. LCD12864.c
#ifndef __DHT11_H
#define __DHT11_H#include <STC12C5A60S2.H>
#include <intrins.h>#ifndef __UDEFINE_
#define __UDEFINE_
#define uchar unsigned char
#define uint unsigned int
#endif /*__UDEFINE_*//*DHT11*/
sbit WS_data = P1^0;/*DHT11函数声明*/
void delay1s(void);
uchar WS_Start(void);
uchar WS_Read(void);
void get_temandhum(uchar* tem,uchar* hum);#endif /*__DHT11_H*/
#include "NHT11.h"
#include "LCD12864.h"
/*******************************************DHT11***************************************************/uchar WS_Start()
{unsigned char a,b,c;uint flag = 255;WS_data = 0;for(c=193;c>0;c--)for(b=114;b>0;b--)for(a=1;a>0;a--);WS_data = 1;while(WS_data == 1 && flag > 10){flag--;}		//等待DHT11的低电平if(WS_data == 0){flag = 1;for(b=1;b>0;b--)for(a=218;a>0;a--);}else{flag = 0;}return flag;
}uchar WS_Read()
{uchar a,b;uchar num = 0x00;uchar i,temp;for(i = 0; i < 8;i++){b= 255;while(WS_data == 1 && b > 0){b--;	}  	//一个while()两用 //读第一个数据,判断80us的高电平 读之后的数据判断高电平是否读完b= 255;while(WS_data == 0 && b > 0){b--;}	//50usfor(a=109;a>0;a--);     //40ustemp = WS_data;num = (num << 1)|temp;	}return num;
}void get_temandhum(uchar* tem,uchar* hum)
{uchar ERR[] = "ReaERR";uchar RIT[] = "ReaCOR";uchar LTEM,HTEM,LHUM,HHUM,Check;Check = WS_Start();if(Check == 1){HHUM = WS_Read();LHUM = WS_Read();HTEM = WS_Read();LTEM = WS_Read();Check = WS_Read();if(Check == HHUM + LHUM + HTEM +LTEM){*tem = HTEM;*hum = HHUM;LCD_Pos(1,0);for(Check = 0; Check < 6;Check++){LCD_WriteDat(RIT[Check]);	}}else{LCD_Pos(1,0);for(Check = 0; Check < 6;Check++){LCD_WriteDat(ERR[Check]);	}		}		}else{}
}
//延时1s函数与LCD的冲突,单独用需要添加
/***************************************************************************************************/
#ifndef __LCD12864_H
#define __LCD12864_H#include <STC12C5A60S2.H>
#include <intrins.h>#ifndef __UDEFINE_
#define __UDEFINE_
#define uchar unsigned char
#define uint unsigned int
#endif /*__UDEFINE_*//*LCD12864*/
#define LCD_data P0
sbit EN = P3^4;
sbit RS = P3^5;
sbit RW = P3^6;
sbit PSB = P3^7;/*LCD12864函数声明*/
void delay1ms(void);
void delay1s(void);
void LCD_Init(void);
void LCD_WriteCmd(uchar cmd);
void LCD_WriteDat(uchar dat);
void LCD_Pos(uchar x,uchar y);
void LCD_Test(void);#endif /*__LCD12864_H*/
#include "LCD12864.h"/*******************************************LCD12864************************************************/
void LCD_Test()
{uchar i,j;uchar TestStr[] = "                测试                ";LCD_Init();LCD_Pos(1,0);while(1){LCD_WriteCmd(0x0c);for(i = 0;i < 20;i+=2){LCD_Pos(1,0);for(j = i;j< 16+i;j++)LCD_WriteDat(TestStr[j]);delay1s();}}
}void LCD_Pos(uchar x,uchar y)
{uchar pos;if(1 == x){x = 0x80;}else if(2 == x){x = 0x90;}else if(3 == x){x = 0x88;}else if(4 == x){x = 0x98;}pos = x+y;LCD_WriteCmd(pos);		
}void LCD_Init()
{PSB = 1;/*清除显示*/  //将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H"LCD_WriteCmd(0x01);delay1ms();/*设置功能*/	// 4/8数据 AND 是否打开拓展功能LCD_WriteCmd(0x30);delay1ms();/*显示状态开关*/	//不知道干啥的LCD_WriteCmd(0x0C);delay1ms();	
}void delay1s(void)   //误差 -0.000000000099us
{unsigned char a,b,c;for(c=217;c>0;c--)for(b=171;b>0;b--)for(a=73;a>0;a--);
}void delay1ms(void)   //误差 -0.018084490741us
{unsigned char a,b;for(b=21;b>0;b--)for(a=130;a>0;a--);_nop_();  //if Keil,require use intrins.h
}void LCD_WriteCmd(uchar cmd)
{RW = 0;RS = 0;EN = 0;delay1ms();LCD_data = cmd;delay1ms();EN = 1;delay1ms();EN = 0;
}void LCD_WriteDat(uchar dat)
{RW = 0;RS = 1;EN = 0;delay1ms();LCD_data = dat;delay1ms();EN = 1;delay1ms();EN = 0;
}
/***************************************************************************************************/

http://www.ppmy.cn/news/242142.html

相关文章

第8章:SpringMVC的文件上传和下载

一、文件上传和下载 1.文件下载 使用ResponseEntity用于控制器方法的返回值类型&#xff0c;该控制器方法的返回值就是响应到浏览器的响应报文。使用ResponseEntity实现下载文件的功能。 ①创建file.html ② 在FileController.java类里面 文件不管是上传还是下载&#xff0…

Excel 有哪些可能需要熟练掌握而很多人不会的技能?

以下是一些 Excel 中可能需要熟练掌握而很多人不会的技能&#xff1a; 1. 数据透视表的使用&#xff1a;数据透视表可以帮助你快速计算和分析大量数据&#xff0c;非常适合用于数据汇总和分析。 2. 高级筛选&#xff1a;高级筛选可以帮助你筛选出符合指定条件的数据&#xff…

C# list的sort排序

目录 前言&#xff1a; 值类型的排序&#xff1a; 方法一&#xff1a;直接调用sort函数 方法二&#xff1a;通过C# ling表达式与CompareTo接口配合使用 方法三&#xff1a;降序的实现 对于自定义类型的sort排序 方法一&#xff1a;通过实现IComparable接口重写CompareT…

【数组内存管理】

数组的内存管理 内存分配内存释放内存重新分配总结 在Python中&#xff0c;数组(List)是一种常用的数据结构&#xff0c;可以存储任意数量和类型的元素。数组的内存管理是由解释器自动完成的&#xff0c;因此开发者无需手动分配或释放内存空间。在本文中&#xff0c;我们将探讨…

从裸机启动开始运行一个C++程序(四)

先序文章请看 从裸机启动开始运行一个C程序&#xff08;三&#xff09; 从裸机启动开始运行一个C程序&#xff08;二&#xff09; 从裸机启动开始运行一个C程序&#xff08;一&#xff09; 跳转 前面我们介绍过&#xff0c;8086CPU总是在执行CS:IP所对应的内存位置的指令&…

数字签名与签名验证过程

数字签名&#xff0c;就是用公钥加密明文的摘要生成的&#xff0c;验签&#xff0c;就是用公钥解密数字签名得到明文的摘要&#xff0c;再用拿到的明文计算摘要&#xff0c;两个摘要做对比&#xff1b;就是这么一个核心过程&#xff0c;主要是为了源认证&#xff0c;证明自己是…

Java实现Mqtt收发消息

Java实现Mqtt收发消息 文章目录 Java实现Mqtt收发消息windows mqtt 平台服务搭建mqtt 客户端工具&#xff1a;mqttbox整体代码结构mqtt基础参数配置类mqtt客户端连接mqtt接收的消息处理类对应的MqttService注解和MqttTopic注解 MqttGateway 发送消息指定topic接收处理方法 java…

vue 路由的hash和history模式的区别

Vue-Router有两种模式&#xff1a;hash模式和history模式。默认的路由模式是hash模式。 1. hash模式 简介&#xff1a; hash模式是开发中默认的模式&#xff0c;它的URL带着一个#&#xff0c;例如&#xff1a;www.weiwehao.com/#/flower&#xff0c;它的hash值就是#/flower。 …