当前位置:首页 >> 电子/电路 >>

C51


DHT11.c 文件
#include<reg52.h> #include<Time_Delay.h> //the main only needs to call getDHT11(),then the temperature and huminity was geted in F16T,F16RH as float sbit bit11=P2^0; unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; //用于最终读取的温湿度数据 // read 8 bits onice char COM(void) { char i,U8temp,U8comdata; for(i=0;i<8;i++) {

while(!bit11); //表示 读取的高电位延时大于20多us则读取的是1否则读取的是 0 //通过U8FLAG可判断 Delay_us(35); U8temp=0; if(bit11)U8temp=1; while(bit11); U8comdata<<=1; U8comdata|=U8temp; //0 }//rof return U8comdata; } //-------------------------------//-----温湿度读取子程序-----------//-------------------------------//----以下变量均为全局变量-------//----温度高8位== U8T_data_H-----//----温度低8位== U8T_data_L-----//----湿度高8位== U8RH_data_H----//----湿度低8位== U8RH_data_L----//----校验8位== U8checkdata----//----调用相关子程序如下---------//---- Delay();, Delay_10us();,COM(); bit11显示数据的脉长

//-------------------------------void getDHT11(void) { //主机拉低18ms GO1: bit11=0; Delay_ms(20); bit11=1; //总线由上拉电阻拉高 主机延时20us Delay_us(60); //主机设为输入 判断从机响应信号 // bit11=1; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 //T ! if(!bit11) { while(!bit11); //wait DHT goto high

while(bit11); //数据接收状态 U8RH_data_H=COM(); U8RH_data_L=COM(); U8T_data_H=COM(); U8T_data_L=COM(); U8checkdata=COM(); bit11=1; //数据校验

if((U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata) check wrong,read again goto GO1; }//fi F16T=U8T_data_H+(float)U8T_data_L/256; //change integer to float F16RH=U8RH_data_H+(float)U8RH_data_L/256; }

//if

LCD1602 文件
#include<reg52.h> #include <stdio.h> #include <INTRINS.H> #include <Lcd_1602.h> #include <Time_Delay.h> #define LCD_DATA P0 #define uint unsigned int #define uchar unsigned char /*只由主函数调用的 有 Init_Lcd() LCD_write_str(uchar X,uchar Y,uchar *s) LCD_value(unsigned char x,unsigned char y,float f) */ sbit LCD_RS = P2^5; sbit RW = P2^6; sbit LCD_E = P2^7; /*************************************************************************** //显示开 //显示关 #define LCD_CURSOR_ON 0x0A //显示光标 //无光标 //有光标,光标闪动 //有光标,光标不闪动 //进入模式设置指令 //新数据后光标右移 //新数据后光标左移 //画面可平移 //画面不可平移 //设定显示屏或光标移动方向指令 //光标左移1格,且AC值减1 //光标右移1格,且AC值加1 //显示器上字符全部左移一格,但光标不动 //显示器上字符全部右移一格,但光标不动 ***************************************************************************/ //注 有主函数调用的函数都已作说明 其他函数一般不由主函数调用 //1602 control define //LCD1602 data transfer define

/**************************************************************************** 称:Init_Lcd()主函数调用 *名 能:Lcd初始化 *功 *入口参数:无 *出口参数:无 *范 例:在主函数中直接调用

****************************************************************************/ //LCD初始化 { LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x0c,0); Delay_ms(1); LCD_write_char(0x06,0); Delay_ms(1); LCD_write_char(0x0c,0); Delay_ms(1); // } /**************************************************************************** 称:LCD_write_str(uchar X,uchar Y,uchar *s)主函数调用 *名 能:在指定地址写一个字符串eg:Y=0,1,2,3,4,5,6,7,8,9,10...15 。X=0,1。 *功 *入口参数:X:横坐标Y:纵坐标*s:字符串首地址 *出口参数:无 *范 例: LCD_write_str(1,1,uchar *s)

****************************************************************************/ void LCD_write_str(unsigned char X,unsigned char Y,unsigned char *s) { LCD_write_char(0,' '); //写地址 //写显示字符 { LCD_write_char( 0, *s ); s ++; }

}

/**************************************************************************** the optic sign flash? 称:LCD_set_xy( uchar x, uchar y ) *名 能:指定一个地址 *功 *入口参数:X:横坐标Y:纵坐标 *出口参数:无 *范 例: LCD_set_xy(5,1)

*************CD_set_xy********************************************************* ******/ void LCD_set_xy( uchar x, uchar y ) //写地址函数 { unsigned char address; if (y == 0) address = 0x80 + x; else address = 0xc0 + x; LCD_write_char( address, 0 ); }

/**************************************************************************** 称:LCD_en_write(void) *名 能:液晶使能 *功 *入口参数:无 *出口参数:无 *范 例:直接调用

*************CD_set_xy********************************************************* ******/ //液晶使能 { _nop_(); LCD_E=1;//EN=1 _nop_(); LCD_E=0;//EN=0 } //-----------------------------------------------/**************************************************************************** *名 称:LCD_write_char(uchar cd,uchar ab)

*功 无效

能:写指令或数据 当写ab时 应使cd=0

当cd不为0则写cd且ab的赋值

*入口参数:cd:指令内容ab:数据内容 指令常量已在上面定义 但一般不用 *出口参数:无 *范 例: LCD_write_char( 0,‘f’ )

*************CD_set_xy********************************************************* ******/ void LCD_write_char(uchar cd,uchar ab) //写数据 { Delay_us(20); if(cd==0) { //RS=1,写显示内容 LCD_byte(ab); } else { //RS=0,写命令 LCD_byte(cd); } }

/**************************************************************************** 称:LCD_byte(abc); *名 能:写一个字符到or called one byte to LCD中 *功 *入口参数: *出口参数:无

*************CD_set_xy********************************************************* ******/ void LCD_byte(unsigned char abc) { RW = 0; LCD_E = 0; LCD_DATA = abc; LCD_en_write(); } //在液晶中显示浮点数函数 LCD_value(unsigned char x,unsigned char y,float f)

{ //不能定义为char* str,数组长度一定要大于浮点 数的总位数 //1表示小数位数 小数太多 自动四舍五入 LCD_write_str( x, y, str); return 0; }

主函数文件
#include <reg52.h> #include <intrins.h> #include <Lcd_1602.h> #include <Time_Delay.h> #include"DHT11.h"

//全局变量声明 void main () { Init_Lcd(); LCD_write_str(0,1,"abc"); //液晶预显示测试 LCD_value(0,0,34.345); Delay_ms(2000); Init_Lcd(); while(1) { getDHT11(); LCD_write_str(0,0,"T="); //字符"应用转义格式 LCD_write_str(0,1,"RH="); LCD_value(4,1,F16RH); Delay_ms(500); } } LCD_write_str(9,1,"%");

延时函数文件
this is fit to old C51 12MHz, 12 devide freqency //以下为延时函数 void Delay_ms(unsigned int n)//n毫秒延时

{ unsigned char j; while(n--) { for(j=0;j<125;j++); } } //N us延时函数 void Delay_us(unsigned char n) { n=n/2; while(--n); } 精度 ± 4us

电路图

实际效果


赞助商链接
相关文章:
C51单片机实战100例
C51 单片机实战 100 例 目录 目录 1 函数的使用和熟悉 4 实例 3:用单片机控制第一个灯亮 4 实例 4:用单片机控制一个灯闪烁:认识单片机的工作频率 4 实例 5...
C51中运算符的优先级
运算符优先级 4页 1下载券 10 C51运算符和表达式 2页 1下载券C​5​1​中​运​算​符​的​优​先​级 ...
C51变量说明
C51 编译器编译时能自动识别程序中使用频 率最高的变量,并自动将其作为寄存器变量,用户无需专门声明。 2)在定义变量时,必须通过数据类型说明符指明变量的数据类型...
C51单片机循环语句
C51单片机循环语句_电子/电路_工程科技_专业资料。单片机循环语句C51 单片机循环语句循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作...
C51程序在Keil C51下的调试步骤
C51程序在Keil C51下的调试步骤_计算机软件及应用_IT/计算机_专业资料。C51 程序在 Keil C51 下的调试步骤 现在广泛使用的 C51 集成开发环境是 Keil 软件。要使用...
c51单片机c语言应用100例
c51单片机c语言应用100例_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档c51单片机c语言应用100例_电子/电路_工程科技_专业资料。目录目录...目...
C51的基本运算
C51的基本运算_电脑基础知识_IT/计算机_专业资料。实用C51 的基本运算 1) C51 的算术和赋值运算 (1)算术运算符和算术表达式 C51 语言一共支持 5 种算术运算符号...
Keil C51基础教程
第一节 系统概述 Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇 编相比,C 语言在功能上、结构性、可读性、可维护性...
C51单片机编程基本知识
C51 单片机编程基本知识全文选段:该控制指令将 C 文件编译生成汇编文件(.SRC),该汇编文件可改名后,生成汇编.ASM 文件, 再用 A51 进行编译。 第三节 Keil C51...
C51数据类型
C51数据类型_IT/计算机_专业资料。1、 C 基本数据类型: 、 基本数据类型: 关键字 类型 符号 所占位数 字节 数表示范围 有整 型 无 实型 有 (signed)short...
更多相关文章: