Arduino程序设计(八)LCD显示实验

文章介绍了如何使用LM35、DS18B20和DHT11温度/温湿度传感器配合LCD1602进行环境温度和湿度的显示,详细讲解了硬件连接、代码实现以及实验现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

  • 本文主要介绍温度/温湿度传感器的LCD显示实验,分别是:
  • 1、LM35采集环境温度LCD显示;
  • 2、DS18B20采集环境温度LCD显示;
  • 3、DHT11采集环境温湿度LCD显示。

一、基于LM35的LCD显示实验

1. LM35简介

  • (1)LM35介绍
LM35特性特性说明
基本功能LM35作为常用的温度传感器,可以检测周围的温度
工作原理利用感温材料,通过内部电路将温度值转化为对应的电压信号
工作电压4~30V,常用5V供电
温度测量测量范围0~100℃ ,误差 ±0.5℃
输出信号线性模拟信号输出,LM35输出电压和摄氏温度程线性关系
线性变化系数+10mV/℃(即每升高一度,输出电压增加10mV)
应用使用简单,常用于温度检测装置或者温度报警器
  • (2)LM35引脚及封装
    在这里插入图片描述
  • 常用封装:TO-92,型号选用LM35DZ。
  • 举例:LM35与Arduino UNO开发板接线, 引脚1接5V,引脚2接模拟信号输出A0,引脚3接GND
  • (3)LM35温度值计算
  • ① 计算公式:
  • x 1024 \frac{x}{1024} 1024x= T ℃ ∗ 10 m V / ℃ 5000 m V \frac{T℃*10mV/℃}{5000mV} 5000mVT10mV/℃
  • 其中, x x x为返回值,即引脚2采集的数据, T T T为当前温度值,浮点型数据。
  • ② 进一步,得到当前温度的计算公式:
  • T T T= 500 x 1024 \frac{500x}{1024} 1024500x= 0.4883 x 0.4883x 0.4883x

2. LCD1602简介

  • (1) LCD1602介绍
    在这里插入图片描述
    注意:LCD1602显示ASCII码包括英文字母、数字和标点符号(不能显示中文)。
  • (2)技术参数与接口说明在这里插入图片描述
  • (3)LCD1602与Arduino UNO开发板连接方式
Arduino UNO引脚LCD1602引脚引脚功能
Pin 6RS数据/命令选择
Pin 7E使能引脚
Pin 9D4数据传输
Pin 10D5数据传输
Pin 11D6数据传输
Pin 12D7数据传输
GNDVSS电源负极
5VVDD电源正极
串联1KΩ电阻接GNDV0调节对比度
GNDRW读/写选择
5VA背光源正极
GNDK背光源负极

3. LM35采集环境温度LCD显示

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。
  • (2) LM35采集环境温度LCD显示的电路图,如下图所示:
    在这里插入图片描述
  • (3)实验准备:下载安装 “LiquidCrystal” 库文件,库函数的功能说明如下表所示。
常见的 LiquidCrystal 的库函数功能说明
LiquidCrystal name(RS,EN,D4,D5,D6,D7)作用:初始化构造器,创建一个LCD1602对象;RS:数据/ 命令选择所连接的引脚;EN:使能引脚;D4~D7:数据引脚
name.begin(c,l)作用:初始化LCD1602;c:屏幕的列数,一般是16;l:屏幕的行数,一般是2
name.print(s)作用:输出;s:输出的值
name.clear()作用:清屏
name.setCursor(c,l)作用:设置光标;c:第几列;l:第几行
name.display()作用:开始显示
name.noDisplay()作用:关闭显示
name.write(s)作用:输出一位;s:输出的字符
name.creatChar(s,d)作用:创建新符号;s:字符编号;d:符号数据
  • (4)实现功能:
  • ① LCD开机画面,第一行显示“ Welcome to use ! ”,延时1S后清屏;
  • ② 显示LM35采集温度,LCD第一行显示 “ LM35 temp = ”,第二行显示 “ xx.x℃ ”。

代码实现:

//LCD实验
//LM35采集温度,LCD显示温度值

#include <LiquidCrystal.h>

#define LM35 A0
#define RS 6
#define EN 7
#define D4 9
#define D5 10
#define D6 11
#define D7 12

LiquidCrystal lcd(RS,EN,D4,D5,D6,D7);      //构造一个LiquidCrystal的类成员

int val = 0;        //存放AD变量值
float temp = 0;     //存放温度值的10倍

void setup()
{
  lcd.begin(16,2);    //初始化LCD1602
  lcd.print("Welcome to use!");   //液晶显示Welcome to use!
  delay(1000);        //延时1000ms
  lcd.clear();        //液晶清屏
}

void loop()
{
  val = analogRead(LM35);   //读取AD值
  temp = val * 4.8876;      //转换为温度值的10倍,有利于液晶显示
  lcd.setCursor(0,0);       //设置液晶开始显示的指针位置
  lcd.print("LM35 temp ="); //液晶显示“LM35 temp =”
  lcd.setCursor(0,1);       //设置液晶开始显示的指针位置
  lcd.print((int)temp/10);  //液晶显示温度整数值
  lcd.print(".");           //液晶显示小数点
  lcd.print((int)temp%10);  //液晶显示温度小数值
  
  lcd.print((char)223);     //液晶显示“°”
  lcd.print("C");           //液晶显示“C”
  delay(1000);              //延时1000ms
}
  • (5)实现现象:
    在这里插入图片描述

二、基于DS18B20的LCD显示实验

1. DS18B20简介

  • (1)DS18B20介绍
供电电压3.0~5V ,常用3.3V或5V供电
单总线接口DS18B20与MCU连接时,仅需要一根数据线,即可实现MCU与DS18B20的双向通讯
多点组网多个DS18B20可以并联在唯一的数据线上,实现组网多点测温
硬件简单DS18B20在使用时不需要任何外围器件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
测温范围-55℃ ~ +125℃;在 -10 ~ +85℃时,精度为 ±0.5℃
分辨率9 ~ 12位,对应的可分辨温度分别为 0.5℃,0.25℃,0.125℃ 和 0.0625℃
负压特性电源极接反时,芯片不会因发热而烧毁,但不能正常工作
  • (2)DS18B20外形及电路设计

  • DS18B20外形:
    在这里插入图片描述

  • 举例:DS18B20与Arduino UNO开发板接线, 引脚1接GND,引脚2接数字信号输出D4,引脚3接5V

  • 常见电路如下:
    在这里插入图片描述

2. DS18B20采集环境温度LCD显示

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2) DS18B20采集环境温度LCD显示的电路图,如下图所示:
    在这里插入图片描述

  • (3)实现功能:

  • ① LCD开机画面,第一行显示“ You can use it.”,延时1s后清屏;

  • ② 显示DS18B20采集温度,LCD第一行显示 “ DS18B20 temp = ”,第二行显示 “ xx.x℃ ”。

代码实现:

//LCD实验
//DS18B20采集环境温度,LCD显示

#include <LiquidCrystal.h>                       //加载单LCD库函数
#include <OneWire.h>                             //加载单总线库函数
#include <DallasTemperature.h>                   //加载DS18B20温度采集库函数

#define RS 6
#define EN 7
#define D4 9
#define D5 10
#define D6 11
#define D7 12
#define ONE_WIRE_BUS 4                           //定义DS18B20数据口连接ESP8266的4号IO上

float Temp = 0;

OneWire oneWire(ONE_WIRE_BUS);                   //初始化连接在单总线上的单总线设备
DallasTemperature sensors(&oneWire);

LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);       //构造一个LiquidCrystal的类成员

void setup(void)
{
  sensors.begin();     //初始化DS18B20
  
  lcd.begin(16, 2);   //初始化LCD1602
  lcd.print("You can use it.");   //液晶显示You can use it.
  delay(1000);        //延时1000ms
  lcd.clear();        //液晶清屏
}

void loop(void)
{
  sensors.requestTemperatures();                 //发送命令获取温度
  Temp = sensors.getTempCByIndex(0);             //Temp存储当前温度值

  lcd.setCursor(0, 0);      //设置液晶开始显示的指针位置
  lcd.print("DS18B20 temp ="); //液晶显示“DS18B20 temp =”
  lcd.setCursor(0, 1);      //设置液晶开始显示的指针位置
  lcd.print((int)(Temp * 10) / 10); //液晶显示温度整数值
  lcd.print(".");           //液晶显示小数点
  lcd.print((int)(Temp * 10) % 10); //液晶显示温度小数值

  lcd.print((char)223);     //液晶显示“°”
  lcd.print("C");           //液晶显示“C”
  delay(1000);              //延时1000ms
}

  • (4)实现现象:
    在这里插入图片描述

三、基于DHT11采集环境温湿度LCD显示

1. DHT11简介

  • (1)DHT11介绍
DHT11特性特性说明
基本功能DHT11是常用的温湿度传感器,可以检测附近环境温度和湿度
工作原理利用NTC感温元件和电容感湿元件,通过内部电路将温湿度值转化为校准后的数字信号进行输出
工作电压3.3~5V ,常用5V供电
测量范围温度测量范围0-50℃,误差±2℃;湿度测量范围20%-95%,误差±5%
输出信号数字信号
应用使用简单,常用于温湿度检测装置或者温湿度
优点报警器响应快速、抗干扰、相应库和示例丰富
  • (2)DHT11外形及引脚说明
  • ① DHT11模块和DHT11温湿度传感器外形,如下图所示:
    在这里插入图片描述
  • ② DHT11温湿度传感器引脚说明:
    在这里插入图片描述

2. DHT11采集环境温湿度LCD显示

  • (1)本实验采用Arduino UNO R3开发板及自主搭建电路的方式,实现预设功能。

  • (2) DHT11采集环境温湿度LCD显示的电路图,如下图所示:
    在这里插入图片描述

  • (3)实验准备:下载安装 “DHT sensor library” 库文件,库函数的功能说明如下。
    在这里插入图片描述
    在这里插入图片描述

  • (4)实现功能:

  • ① LCD开机画面,第一行显示“ DHT11 working.”,延时1s后清屏;

  • ② 显示DHT11采集温湿度,LCD第一行显示 “ Temp = xx.x℃ ”,第二行显示 “ Humi = xx% ”。

代码实现:

//LCD实验
//DHT11采集温湿度值,LCD显示

#include<DHT.h>
#include <LiquidCrystal.h>

#define RS 6
#define EN 7
#define D4 9
#define D5 10
#define D6 11
#define D7 12
#define DHTPIN 3

DHT dht(DHTPIN, DHT11);                    //初始化DHT传感器
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //构造一个LiquidCrystal的类成员

void setup()
{
  lcd.begin(16, 2);              //初始化LCD1602
  lcd.print("DHT11 working.");   //液晶显示DHT11 working.
  delay(1000);                   //延时1s
  lcd.clear();                   //液晶清屏
  dht.begin();                   //初始化DHT11
}

void loop()
{
  float h = dht.readHumidity();   // 读取湿度
  float t = dht.readTemperature();// 读取温度为摄氏温度

  lcd.setCursor(0, 0);            //设置液晶开始显示的指针位置
  lcd.print("Temp = ");           //液晶显示“Temp =”
  lcd.print((int)(t * 10) / 10);  //液晶显示温度整数值
  lcd.print(".");                 //液晶显示小数点
  lcd.print((int)(t * 10) % 10);  //液晶显示温度小数值
  lcd.print((char)223);           //液晶显示“°”
  lcd.print("C");                 //液晶显示“C”

  lcd.setCursor(0, 1);            //设置液晶开始显示的指针位置
  lcd.print("Humi = ");           //液晶显示“Humi =”
  lcd.print((int)h);              //液晶显示温度整数值
  lcd.print("%");                 //液晶显示“%”
  
  delay(2000);                    //DHT11间隔2s采集一次数据
}

  • (5)实现现象:
    在这里插入图片描述

参考资料1: CSDN如何编辑数学公式
参考资料2: Arduino全套零基础入门视频进阶教程(适合0基础,含arduino项目保姆级教程)
参考资料3: 【雕爷学编程】Arduino动手做(55)–DHT11温湿度传感器模块3

#include //包含头文件 #include //包含固有函数 #define uint unsigned int //定义一下方便使用 #define uchar unsigned char //定义一下方便使用 #define DATA P0 //LCD12864数据线 sbit RS=P2^2; // 数据\指令 D、I 选择 sbit RW=P2^1; // 读\写 选择 R、W sbit EN=P2^0; // 读\写使能 sbit cs1=P2^4; // 片选1 sbit cs2=P2^3; // 片选2 /********************************/ /* 定义图形字库 */ uchar code Hzk[]={ //左屏幕第1页 0xFF,0xFF,0xFF,0xFF,0x7F,0xBF,0x3F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF, 0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF, 0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF, 0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF, //左屏幕第2页 0xFF,0xFF,0xFF,0xAB,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, //左屏幕第3页 0xFF,0xFF,0xFF,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0xE0,0xEA,0xE0,0xEA, 0xE0,0xEA,0xE0,0xEA,0xE0,0xEA,0xC0,0xAA,0x00,0xAA,0xE0,0xEA,0xE0,0xEA,0xE0,0xEA, 0xE0,0xEA,0xE0,0xEA,0xE0,0xEA,0x80,0xAA,0x00,0xAA,0x00,0xAA,0xC0,0xEA,0xE0,0xEA, 0xE0,0xEA,0xE0,0xEA,0xC0,0xEA,0x80,0xAA,0x00,0xAA,0xE0,0xEA,0xE0,0xEA,0xE0,0xEA, //左屏幕第4页 0xFF,0xFF,0xFF,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0xFF,0xFF,0xFF,0xFF, 0x38,0xBA,0x38,0xBF,0x3F,0xBF,0x1F,0xAF,0x00,0xAA,0xFF,0xFF,0xFF,0xFF,0xFF,0xBA, 0x78,0xFA,0xFD,0xFF,0xDF,0xBF,0x0F,0xAA,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x01,0xAA, 0x00,0xAA,0x01,0xEF,0xFF,0xFF,0xFF,0xFE,0x00,0xAA,0x00,0xAA,0x00,0xAA,0xFF,0xFF, //左屏幕第5页 0xFF,0xFF,0xFF,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x0F,0xAF,0x0F,0xAF, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x0F,0xAF,0x0F,0xAF,0x0F,0xAA, 0x00,0xAA,0x03,0xAF,0x0F,0xAF,0x0F,0xAE,0x00,0xAA,0x01,0xAB,0x07,0xAF,0x0F,0xAE, 0x0E,0xAE,0x0F,0xAF,0x07,0xAF,0x03,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x0F,0xAF, //左屏幕第6页 0xFF,0xFF,0xFF,0xEA,0x80,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, //左屏幕第7页 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, //左屏幕第8页 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, //右屏幕第1页 0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF, 0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF, 0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF, 0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x1F,0xBF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, //右屏幕第2页 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x01,0xFF,0xFF,0xFF,0xFF,0x00, //右屏幕第3页 0xE0,0xEA,0xE0,0xEA,0xE0,0xEA,0xE0,0xAA,0x00,0xEA,0xE0,0xEA,0xE0,0xEA,0xE0,0xEA, 0xE0,0xEA,0xE0,0xEA,0xE0,0xAA,0x00,0xAA,0xE0,0xEA,0xE0,0xEA,0x00,0xAA,0x00,0xAA, 0x00,0xEA,0xE0,0xEA,0xE0,0xAA,0x00,0xAA,0x80,0xEA,0xC0,0xEA,0xE0,0xEA,0xE0,0xEA, 0xE0,0xEA,0x80,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xFF,0xFF,0xFF,0xFF,0x00, //右屏幕第4页 0xFF,0xFF,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xFF,0xFF,0xFF,0xFF,0xBA,0x38,0xBA, 0x38,0xBA,0x38,0xBA,0x00,0xAA,0x00,0xAA,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0x00,0xAA, 0x00,0xFF,0xFF,0xFF,0xFF,0xAA,0x00,0xAA,0x8F,0xAF,0x9F,0xBF,0x3C,0xBE,0x38,0xFB, 0xFB,0xFB,0xF3,0xEB,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xFF,0xFF,0xFF,0xFF,0x00, //右屏幕第5页 0x0F,0xAF,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAF,0x0F,0xAF,0x0F,0xAE,0x0E,0xAE, 0x0E,0xAE,0x0E,0xAE,0x0E,0xAA,0x00,0xAA,0x03,0xAF,0x07,0xAF,0x0F,0xAE,0x0E,0xAE, 0x0F,0xAF,0x07,0xAB,0x01,0xAA,0x00,0xAB,0x03,0xAF,0x07,0xAF,0x0E,0xAE,0x0E,0xAF, 0x0F,0xAF,0x07,0xAB,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xFF,0xFF,0xFF,0xFF,0x00, //右屏幕第6页 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA, 0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0x00,0xAA,0xE0,0xFF,0xFF,0xFF,0xFF,0x00, //右屏幕第7页 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00, //右屏幕第8页 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F, 0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00, }; /*状态检查,LCD是否忙*/ void CheckState() { uchar dat;//状态信息(判断是否忙) RS=0; // 数据\指令选择,D/I(RS)=“L” ,表示 DB7∽DB0 为显示指令数据 RW=1; //R/W=“H” ,E=“H”数据被读到DB7∽DB0 do{ DATA=0x00; EN=1; //EN下降源 _nop_(); //一个时钟延时 dat=DATA; EN=0; dat=dat>>7; //仅当第7位为0时才可操作(判别busy信号) }while(!(dat==0x00)); } /*写命令到LCD中*/ SendCommandToLCD(uchar com) { CheckState();//状态检查,LCD是否忙 RS=0; //向LCD发送命令。RS=0写指令,RS=1写数据 RW=0;//R/W=“L” ,E=“H→L”数据被写到 IR 或 DR DATA=com; //com :命令 EN=1;//EN下降源 _nop_(); _nop_(); EN=0; } /*设置页 0xb8是页的首地址*/ void SetLine(uchar page) { page=0xb8|page; //1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页 SendCommandToLCD(page); } /*设定显示开始行,0xc0是行的首地址*/ void SetStartLine(uchar startline) { startline=0xc0|startline; //1100 0000 SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示 } /*设定列地址--Y 0-63 ,0x40是列的首地址*/ void SetColumn(uchar column) { column=column &0x3f; //column最大值为64,越出 0=<column<=63 column= 0x40|column; //01xx xxxx SendCommandToLCD(column); } /*开关显示,0x3f是开显示,0x3e是关显示*/ void SetOnOff(uchar onoff) { onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1 SendCommandToLCD(onoff); } /*写显示数据 */ void WriteByte(uchar dat) { CheckState();//状态检查,LCD是否忙 RS=1; //RS=0写指令,RS=1写数据 RW=0;////R/W=“L” ,E=“H→L”数据被写到 IR 或 DR DATA=dat;//dat:显示数据 EN=1; //EN下降源 _nop_(); _nop_(); EN=0; } /*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/ void SelectScreen(uchar screen) { switch(screen) { case 0: cs1=0;//全屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; case 1: cs1=0;//左屏 _nop_(); _nop_(); _nop_(); cs2=1; _nop_(); _nop_(); _nop_(); break; case 2: cs1=1;//右屏 _nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; } } /*清屏screen: 0-全屏,1-左屏,2-右*/ void ClearScreen(uchar screen) { uchar i,j; SelectScreen(screen); for(i=0;i<8;i++) //控制页数0-7,共8页 { SetLine(i); SetColumn(0); for(j=0;j<64;j++) //控制列数0-63,共64列 { WriteByte(0x00); //写点内容,列地址自动加1 } } } /*延时程序*/ void delay(uint z) { uint i,j; for(i=0; i<z; i++) for(j = 0; j < 110; j++); } /*向上滚屏*//*这里用做滚动显示*/ void lcd_rol() { uint i; for(i = 0; i < 64; i++) { cs1=0; // 片选1 SendCommandToLCD(0xc0+i); cs1=1; cs2=0;// 片选2 //SendCommandToLCD(0xc0+62-i); SendCommandToLCD(0xc0+i); cs2=1; // 片选2 delay(100);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值