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

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常用语句讲解_图文.ppt
C51常用语句讲解 - 第13章 C51语句和流程 ? C51语句,即C51语言中的操作命令,用于使单片 机完成特定的功能。C51的源程序是由一系列的语 句组成的,这些语句可以...
C51数据类型.doc
C51数据类型 - 1、 C 基本数据类型: 、 基本数据类型: 关键字 类型
C51编程基础_图文.ppt
C51编程基础 - 4 单片机C语言及程序设计 目录 4.1 C51概述 4.2 C51数据类型及存储 4.3 C51变量的定义及数...
C51常用语句_图文.pdf
C51常用语句 - 第13章 C51语句和流程 ? C51语句,即C51语言中的操作命令,用于使单片 句 言中的操作命令 使单片 机完成特定的功能。C51的源程序是由一系列的...
c51的数据类型.doc
c51的数据类型 - 每写一个程序,总离不开数据的应用,在学习 c51 语言的过
C51中的位操作.pdf
C51中的位操作 - C51 中的位操作 在对单处机进行编程的过程中,对位的操作是经常遇到的。 C51 对位的操控能力是非常 强大的。从这一点上,就可以看出 C 不光...
C51单片机基础学习教程(C语言)_图文.pdf
C51单片机基础学习教程(C语言) - C51单片机基础学习教程(C语言)是一本
C51的函数.pdf
C51的函数 - C51 的函数 在前面对 C51 进行介绍的过程中其实已经星星点点地提及了一些 C51 函数的知识,在 这一章里将对 C51 的函数进行详细系统地介绍。 函数...
C51函数参考.pdf
C51函数参考 - 《单片机控制装置安装与调试》 电子工业出版社 Keil c51 函数参考 一、数学函数<math.h > (1)cabs 原型:char cabs(char val);...
Keil C51基本关键字.pdf
Keil C51基本关键字 - Keil C51 基本关键字: 一、由 ANSI
C51常用算法.pdf
C51常用算法 - C 语言常用算法 C 语言常用算法归纳 应当掌握的一般算法
单片机Keil C51软件的使用方法_图文.doc
单片机Keil C51软件的使用方法 - Keil C51 软件的使用 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编 辑、编译、仿真于一体,支持汇编和 C 语言的...
单片机的C51语言基础_图文.ppt
单片机的C51语言基础_信息与通信_工程科技_专业资料。单片机的C51语言基础 ? ? ? ? C51的程序结构 C51的数据结构 C51与汇编语言的混合编程 C51初步应用编程 51...
C51中的位操作.doc
C51中的位操作_数学_自然科学_专业资料。C51中的位操作,位处理 C51 中的位操作在对单片机进行编程的过程中,对位的操作是经常遇到的。C51 对位的操控能力是非常 ...
C51常用数据类型.doc
C51常用数据类型 - C51 常用数据类型 数据类型 无符号字符型 有符号字符
c51单片机中断详解_图文.ppt
c51单片机中断详解 - 中断系统 微机的输入/输出方式 单片机在进行控制时,要
Keil C51软件的使用教程_图文.doc
Keil C51软件的使用教程 - Lesson 1 Keil C51 软件是众
keil C51使用简明教程.doc
keil C51使用简明教程 - 我和单片机有个约定之 51 单片机 51系列单片机开发工具之keilC51 μVision3 入门教程 我和单片机有个约定之 51 单片机 1.安装 ...
C51关键字.doc
C51关键字_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载 | 举报文档 C51关键字_信息与通信_工程科技_专业资料。 文档贡献者 zjm0202 贡献于2012-...
C51中运算符的优先级.doc
C51中运算符的优先级 - 附录 2 C 语言中的运算符及其优先级 C 语言中的
更多相关文章: