• PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 4KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 56
    下载次数
  • 2009-05-17 10:32
    上传日期
温湿度显示KeilC程序非常好用非常好用非常好用非常好用非常好用
LCD.rar
  • DHT90与LCD1602的温湿度显示KeilC程序.txt
    15.2KB
内容介绍
/*********************************************************************************** ;功能说明:DHT90与LCD1602的温湿度显示KeilC程序 ;文件名称:DHT90.c ;微处理器:AT89S52 ;编译环境:Keil uVision V2.38a ;作 者:Huang Yanxiang ;版 权:(c)Huang Yanxiang ;创建日期:2008.08.15 ;版 本:V1.2 ;修改日期:2008.08.26 ;修改说明:添加了一个LCD_disp_str()函数,修改了延时函数的注释。 ;***********************************************************************************/ /*************定义接口******************** P0------DB0~DB7 (LCD1602) P2.0------RS (LCD1602) P2.1------RW (LCD1602) P2.2------E (LCD1602) P2.6------SCK (DHT90) P2.7------DATA (DHT90) *****************************************/ #include <aT89x51.h rel='nofollow' onclick='return false;'> #include <intrins.h> #include <math.h> //Keil library #include <stdio.h> //Keil library //*********************第一部分LCD1602设置 START**************************************** #define LCD_DB P0 sbit LCD_RS=P2^0; //P2^0是p2.0的意思;LCD_RS与P2.0等效起来,对LCD_RS 读写,就是对P2.0读写 好处在于LCD_RS含义直接明了,写程序多了就会知道有必要de sbit LCD_RW=P2^1; //P2^1是p2.1的意思 sbit LCD_E=P2^2; //P2^2是p2.2的意思 /******定义函数****************/ #define uchar unsigned char #define uint unsigned int void LCD_init(void); //初始化函数 void LCD_write_command(uchar command); //写指令函数 void LCD_write_data(uchar dat); //写数据函数 void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一个字符,X(0-15),y(1-2) void LCD_disp_str(uchar x,uchar y,uchar *str); //LCD1602显示字符串函数 void delay_n10us(uint n); //延时函数 /*-------------------------------------- ;模块名称:LCD_init(); ;功 能:初始化LCD1602 ;占用资源:-- ;参数说明:-- ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_init(void) { delay_n10us(10); LCD_write_command(0x38);//设置8位格式,2行,5x7 delay_n10us(10); LCD_write_command(0x0c);//整体显示,关光标,不闪烁 delay_n10us(10); LCD_write_command(0x06);//设定输入方式,增量不移位 delay_n10us(10); LCD_write_command(0x01);//清除屏幕显示 delay_n10us(100); //延时清屏,延时函数,延时约n个10us } /*-------------------------------------- ;模块名称:LCD_write_command(); ;功 能:LCD1602写指令函数 ;占用资源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E). ;参数说明:dat为写命令参数 ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_write_command(uchar dat) { delay_n10us(10); LCD_RS=0; //指令 LCD_RW=0; //写入 LCD_E=1; //允许 LCD_DB=dat; delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。 LCD_E=0; delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。 } /*-------------------------------------- ;模块名称:LCD_write_data(); ;功 能:LCD1602写数据函数 ;占用资源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E). ;参数说明:dat为写数据参数 ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_write_data(uchar dat) { delay_n10us(10); LCD_RS=1; //数据 LCD_RW=0; //写入 LCD_E=1; //允许 LCD_DB=dat; delay_n10us(10); LCD_E=0; delay_n10us(10); } /*-------------------------------------- ;模块名称:LCD_disp_char(); ;功 能:LCD1602显示一个字符函数,在某个屏幕位置上显示一个字符,X(0-15),y(1-2)。 ;占用资源:-- ;参数说明:X为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),dat为所要显示字符对应的地址参数。 ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_disp_char(uchar x,uchar y,uchar dat) { uchar address; if(y==1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); } /*-------------------------------------- ;模块名称:LCD_disp_str(); ;功 能:LCD1602显示字符串函数,在某个屏幕起始位置{X(0-15),y(1-2)}上显示一个字符串。 ;占用资源:-- ;参数说明:X为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),str为所要显示字符串对应的指针参数。 ;创建日期:2008.08.16 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_disp_str(uchar x,uchar y,uchar *str) { uchar address; if(y==1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); while(*str!='\0') { LCD_write_data(*str); str++; } } /*-------------------------------------- ;模块名称:delay_n10us(); ;功 能:延时函数,延时约n个10us ;占用资源:-- ;参数说明:-- ;创建日期:2008.08.15 ;版 本:FV1.1(函数版本Function Version) ;修改日期:2008.08.26 ;修改说明:修改为较精确的延时函数,"_nop_()"延时1us@12M晶振 ;-------------------------------------*/ void delay_n10us(uint n) //延时n个10us@12M晶振 { uint i; for(i=n;i>0;i--) { _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); } } //*********************第一部分LCD1602设置 END**************************************** //*********************第二部分DHT90设置 START**************************************** sbit SCK = P2^6; //定义通讯时钟端口 sbit DATA = P2^7; //定义通讯数据端口 typedef union { unsigned int i; //定义了两个共用体 float f; } value; enum {TEMP,HUMI}; //TEMP=0,HUMI=1 #define noACK 0 //用于判断是否结束通讯 #define ACK 1 //结束数据传输 //adr command r/w #define STATUS_REG_W 0x06 //000 0011 0 #define STATUS_REG_R 0x07 //000 0011 1 #define MEASURE_TEMP 0x03 //000 0001 1 #define MEASURE_HUMI 0x05 //000 0010 1 #define RESET 0x1e //000 1111 0 /****************定义函数****************/ void s_transstart(void); //启动传输函数 void s_connectionreset(void); //连接复位函数 char s_write_byte(unsigned char value);//DHT90写函数 char s_read_byte(unsigned char ack); //DHT90读函数 char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);//测量温湿度函数 void calc_dht90(float *p_humidity ,float *p_temperature);//温湿度补偿 /*-------------------------------------- ;模块名称:s_transstart(); ;功 能:启动传输函数 ;占用资源:-- ;参数说明:-- ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void s_transstart(void) // generates a transmission start // _____ ________ // DATA: |_______| // ___ ___ // SCK : ___| |___| |______ { DATA=1; SCK=0; //Initial state _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0; } /*-------------------------------------- ;模块名称:s_connectionreset(); ;功 能:连接复位函数 ;占用资源:-- ;参数说明:-- ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void s_connectionreset(void) // communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart // _____________________________________________________ ________ // DATA: |_______| // _ _ _ _ _ _ _ _ _ ___ ___ // SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___
评论
    相关推荐
    • msp430.rar
      基于msp430的一些系统设计论文: 基于MSP430单片机的气象数据采集系统.pdf 基于MSP430的低功耗水中低频信号采集系统.pdf 基于MSP430的低频信号采集系统.pdf 基于双MSP430单片机的风力数据采集系统.pdf
    • main.rar
      msp430g2553实现温湿度的测量
    • LCD_DHT11.rar
      LCD屏幕上显示温湿度,将温湿度传感器采集的值在LCD屏幕上显示。
    • stm32温湿度检测仿真.zip
      基于stm32温湿度检测仿真,实时检测温湿度并在lcd1602液晶屏上显示。
    • 可以显示温湿度的多功能单片机电子时钟
      基于单片机开发的电子时钟,可以记录显示时间,显示当前环境的温湿度,附 Proteus 仿真电路图,单片机电子时钟实物详细注释的代码和课程设计报告书。
    • 基于MSP430空气检测原理图设计
      系统采用低功耗的MsP430作为主控芯片,利用DHT11温湿度传感器、GP2Y1010AU0F灰尘传感器和TGS2600气体传感器检测室内空气质量,将采集到的数据传输给单片机,并显示到TFTLCD液晶屏上。单片机根据接收到的数据采用按键...
    • MSP430F149开发板光盘中的例程
      基于MSP430F149单片机的温湿度传感器SHT1X驱动程序.rar 基于MSP430F149的12864的显示图片.rar 基于MSP430F149的数字钟源代码(以1602LCD液晶显示).rar 基于MSP430F149的触摸手写程序.zip 展示了MSP430F14x单片机...
    • MSP430系列程序,各种例程。
      通过MSP430(149)单片机控制DHT11温湿度传感器 MSP430F149单片机与RF2401硬件SPI无线通信 MSP430f149控制LCD12864显示汉字、字母 MSP430F149通过SPI接口控制ADS1216 MSP430F449实现频率测量,呼吸灯,自己写的,...
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路