LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
LCD1602特性:
3.3V或5V工作电压,对比度可调
内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能
有80字节显示数据存储器DDRAM
内建有192个5X7点阵的字型的字符发生器CGROM
8个可由用户自定义的5X7的字符发生器CGRAM
LCD1602引脚功能:
字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:
STM32单片机驱动LCD1602程序:
#ifndef _LCD1602_H
#define _LCD1602_H
#include “LCD1602.H”
//============================端口位清除寄存器==============================================//
#define LCD1602_RS0 GPIOE-》BRR = 0x00000004 //低电平 PE.2
#define LCD1602_RW0 GPIOE-》BRR = 0x00000010 //低电平 PE.4
#define LCD1602_EN0 GPIOE-》BRR = 0x00000040 //低电平 PE.6
//============================端口位设置/清除寄存器=========================================//
#define LCD1602_RS1 GPIOE-》BSRR = 0x00000004 //高电平 PE.2
#define LCD1602_RW1 GPIOE-》BSRR = 0x00000010 //高电平 PE.4
#define LCD1602_EN1 GPIOE-》BSRR = 0x00000040 //高电平 PE.4
#define DATA_OUT GPIOD-》ODR//数据端口 PB0-PB7
//==========================================================================================//
//单片机系统时钟在72MHZ下的延时
void Delay_us(unsigned long CountLing)
{
signed char i;
while(CountLing--)
{
i = 10;
while(i--);
}
}
//==========================================================================================//
//LCD1602液晶读忙状态
void LCD_FBUF(void)
{
LCD1602_RS0; //RS信号拉低
LCD1602_RW1; //RW信号拉高
LCD1602_EN1;//EN信号拉高
DATA_OUT = 0xFF; //数据端口 11111111全高电平
while((DATA_OUT & 0x80) == 0x80); //判断数据端口PB7 是否一直高
LCD1602_RW1;//RW信号拉高
LCD1602_EN0; //EN信号拉低
}
//==========================================================================================//
//LCD1602写指令子函数
void Write_LCD1602_Instruction_Com(unsigned char Com)
{
LCD_FBUF(); //读忙状态
LCD1602_RS0; //RS信号拉低写指令
LCD1602_RW0; //RW信号拉低
LCD1602_EN0; //EN信号拉低
DATA_OUT = Com; //数据端口指令输入
Delay_us(340); //延时1ms
LCD1602_EN1; //EN信号一个高脉冲
Delay_us(340); //延时1ms
LCD1602_EN0;
}
//==========================================================================================//
//LCD1602写数据子函数
void Write_LCD1602_Instruction_Data(unsigned char Date)
{
LCD_FBUF(); //读忙状态
LCD1602_RS1; //RS信号拉高写数据指令
LCD1602_RW0;
LCD1602_EN0; //EN信号拉低
DATA_OUT = Date; //数据端口数据输入
Delay_us(340); //延时1ms
LCD1602_EN1; //EN信号一个高脉冲
Delay_us(340); //延时1ms
LCD1602_EN0;
}
//==========================================================================================//
//LCD1602写指令和写数据子函数
void Write_LCD1602_Instruction_Com_Data(unsigned char CountLiey, unsigned char Date)
{
if(CountLiey == 0) //CountLiey == 0 写指令
{
Write_LCD1602_Instruction_Com(Date); // 写指令
}
else //CountLiey !=0 写数据
{
Write_LCD1602_Instruction_Data(Date); //不等于0写数据
}
}
//==========================================================================================//
//LCD1602写指令初始化子函数
void Init_LCD1602(void)
{
Write_LCD1602_Instruction_Com(0x38); //设置16×2显示,5×7点阵,8位数据接口
Delay_us(6); //延时 200us
Write_LCD1602_Instruction_Com(0x38); //设置16×2显示,5×7点阵,8位数据接口
Delay_us(6); //延时 200us
Write_LCD1602_Instruction_Com(0x0C); //设置打开显示
Delay_us(6); //延时 200us
Write_LCD1602_Instruction_Com(0x06); //读或写一个字符后地址指针加1
Delay_us(6);
Write_LCD1602_Instruction_Com(0x01); //显示清屏
Delay_us(6);
}
#endif
//========================================END==================================================//
#include “stm32f10x_lib.h”
#include “LCD1602.H”
//#include “DS18B20.H”
typedef volatile unsigned char uint8;
typedef volatile unsigned int uint16;
typedef volatile unsigned long uint32;
//==========================================================================================//
//配置GPIO端口
void GPIO_InitStructReadtempCmd(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//GPIOC端口初始化
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_4 | GPIO_Pin_6; // LCD1602 RS-RW-EN脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //输出速率50MHZ
GPIO_Init(GPIOE, &GPIO_InitStruct); //GPIOE端口初始化
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |//数据脚 PB0-PB7
GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //输出速率50MHZ
GPIO_Init(GPIOD, &GPIO_InitStruct); //GPIOD端口初始化
}
//==========================================================================================//
//配置GPIO外设时钟
void RCC_APB2PeriphReadtempyCmd(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); // 开启GPIOD外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); // 开启GPIOE外设时钟
}
//==========================================================================================//
//函数主题
int main(void)
{
RCC_APB2PeriphReadtempyCmd();//外设时钟初始化 //注意外设初始化一定要在GPIO端口配置初始化前面
GPIO_InitStructReadtempCmd(); //GPIO端口配置初始化
while(1)
{
Write_LCD1602_Instruction_Com_Data(0, 0x80+4); //0是写指令
Write_LCD1602_Instruction_Com_Data(1, ‘A’ ); //1是写数据
}
}
上一篇:关于基于STM32系列单片机的DMD投影仪的驱动电路的相关设计
下一篇:在STM32F407板子上搭建TCP服务器及TFTP服务器
推荐阅读最新更新时间:2024-11-11 22:26
设计资源 培训 开发板 精华推荐
- 使用 Ricoh Electronic Devices Co., Ltd 的 RP505K001C-TR 的参考设计
- USB Host应用MIC2025-2YM单通道配电开关MM8典型应用
- OP495GSZ 3V 低压差稳压器的典型应用
- gsm-fm桌面收音机
- 使用 Lattice Semiconductor 的 MIPI CSI-2 Controller Core 的参考设计
- 使用 ROHM Semiconductor 的 BD45315 的参考设计
- DC161A,LT1373HV 演示板,SLIC 电源,-20Vout at 60mA 和 -60Vout at 35mA+
- MTRDEVKSPNK144: S32K144 3相PMSM开发套件
- 基于ATMega32A开发的QMK(支持VIA)980配列键盘
- AD9215BCP-65EB,AD9215BCP-65 评估板,3 V 单电源,10 位,65 MSPS 模数转换器 (ADC)
- 【颁奖礼】摸黑抢楼赢大礼!
- 是德科技白皮书下载:攻克当前面临的毫米波测试难关
- Vicor白皮书下载——双向电源:“安静”改变世界的驱动力
- Arrow&allegro有奖直播:下一代磁感应解决方案:XtremeSense™ TMR 技术如何促进高效应用
- ADI基于ADPD188BI的烟雾探测器集成解决方案 有奖直播 5月13日上午10:00-11:30 为您揭晓!
- 系列二:TI模拟芯片选型指南(参与过系列一活动的也可以参加这期哟)
- 看MPLAB® Harmony集成软件框架之学习篇 你来评论我送礼!
- 【预约有礼】全球测量圈大咖直播:验证5G核心网,确保最佳性能
- 快来应援吧!投票选出你最爱的TI培训课程
- 有奖直播:走进实验室之是德科技高端新品示波器UXR-B测评