专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

Rainbow LCD显示:制作一个简单的电子温湿度计

作者:huqin   来源:本站原创   点击数:  更新时间:2014年05月09日   【字体:

  液晶显示器型号多种多样,我们这里仅以1602这种最简单的16*2字符点阵液晶模块为例,结合DHT11来制作一个简单的电子温湿度计:这个温湿度计分两行显示,第一行显示当前温度,第二行显示当前的湿度,温湿度每隔1秒钟刷新一次。


 
    1602模块共16个脚,具体功能见表格:

    由于STM32是3.3V供电,所以我们需要选用3.3V电压的1602模块,同时我们为了节约口线,采用了四位数据模式,D0-D3未使用。1602与Rainbow之间的接线关系如下:
    VSS => GND
    VDD => 3.3V
    VL  => 从电位器接出,电位器接在GND和3.3V之间
    RS  => PC0
    R/W => GND
    E   => PC2
    D0-D3 悬空
    D4  => PA0
    D5  => PA2
    D6  => PA4
    D7  => PA6
    BLA => 3.3V
    BLK => 与GND之间接一个100-200欧姆的电阻

 
    由于Rainbow对1602使用了C++进行封装,使用起来很简单,步骤如下:
    1、定义lcd对象,并指定相应的管脚:LiquidCrystal lcd(PC0, PC2, PA0, PA2, PA4, PA6),这里我们采用四位数据方式,R/W接地,对应的接线如前所述
    2、调用lcd.begin(16, 2),将lcd的模式设置成两行显示,每行16个字符
    3、调用lcd.setCursor()设置当前光标位置,lcd.print()在光标处输出字符串

 
    在软件包的“Projects\E-Thermometer”文件夹包含了本文所述的电子温湿度计的程序,可以直接编译、烧写和调试。我们来看看代码:
#include "WProgram.h"
#include "Dht11.h"
#include "LiquidCrystal.h"

 
//定义Dth11对象,需要指定DHT11数据管脚对应的GPIO管脚
Dht11 dht11(DHT11_DATA_PIN);

 
//定义LCD对象,使用d4-d7四条数据线进行驱动,将rw接地
//我们共用到了6个IO:RS、E、D4-D7,RW接低电平
//本程序接法:
// RS => PC0
// E => PC2
// D4-D7 => PA0、PA2、PA4、PA6
LiquidCrystal lcd(PC0, PC2, PA0, PA2, PA4, PA6);

 
void setup()
{
  //初始化开发板
  boardInit();
  //两行显示,每行16个字符
  lcd.begin(16, 2);

 
  lcd.print("Waiting...");
}

 
void loop()
{
  while(1)
  {
    //判断数据采集是否成功
    if(dht11.read() == Dht11::OK)
    {
      //定位到第一行,第一列显示温度
      lcd.setCursor(0, 0);
      lcd.print("Temperature:");
      lcd.print(dht11.getTemperature());
      lcd.write(0xDF);
      lcd.print("C");
      //第二行显示湿度
      lcd.setCursor(0, 1);
      lcd.print("Humidity:");
      lcd.print(dht11.getHumidity());
      lcd.print("%");
    }

 
    delay(1000);
  }
}

 

 
int main(void)
{
  setup();
  while(1) loop();
}
    程序编译无误后,通过ST-LINK写入到Rainbow中,将DHT11温湿度模块插入到Rainbow中,就可以在液晶上直观显示出当前的温湿度。

 
关闭窗口