当前位置: 首页 > news >正文

【STM32单片机_(HAL库)】3-4-1【中断EXTI】【智能排队控制系统】LCD1602显示字符串

1.硬件

  • STM32单片机最小系统
  • LCD1602显示模块

2.软件

  • LCD1602驱动文件添加
  • GPIO常用函数
  • main.c程序
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "lcd1602.h"int main(void)
{HAL_Init();                         /* 初始化HAL库 */stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */led_init();                         /* 初始化LED灯 */lcd1602_init();//lcd1602_show_char();lcd1602_show_line(1, 2, "STM32");lcd1602_show_line(2, 1, "HELLO");//从第一个格为0开始数while(1){ }
}
  • LCD1602.c程序
#include "lcd1602.h"
#include "delay.h"//RS引脚定义
#define RS_GPIO_Port    GPIOB
#define RS_GPIO_Pin     GPIO_PIN_1
#define RS_HIGH     HAL_GPIO_WritePin(RS_GPIO_Port, RS_GPIO_Pin, GPIO_PIN_SET);
#define RS_LOW      HAL_GPIO_WritePin(RS_GPIO_Port, RS_GPIO_Pin, GPIO_PIN_RESET);//RW引脚定义
#define RW_GPIO_Port    GPIOB
#define RW_GPIO_Pin     GPIO_PIN_2
#define RW_HIGH     HAL_GPIO_WritePin(RW_GPIO_Port, RW_GPIO_Pin, GPIO_PIN_SET);
#define RW_LOW      HAL_GPIO_WritePin(RW_GPIO_Port, RW_GPIO_Pin, GPIO_PIN_RESET);//EN引脚定义
#define EN_GPIO_Port    GPIOB
#define EN_GPIO_Pin     GPIO_PIN_10
#define EN_HIGH     HAL_GPIO_WritePin(EN_GPIO_Port, EN_GPIO_Pin, GPIO_PIN_SET);
#define EN_LOW      HAL_GPIO_WritePin(EN_GPIO_Port, EN_GPIO_Pin, GPIO_PIN_RESET);void lcd1602_init(void)//LCD1602初始化
{//初始化GPIOlcd1602_gpio_init();//上电初始化lcd1602_start();
}void lcd1602_gpio_init(void)
{GPIO_InitTypeDef gpio_initstruct;__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();gpio_initstruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;          // 两个LED对应的引脚gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;             // 推挽输出gpio_initstruct.Pull = GPIO_PULLUP;                     // 上拉gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;           // 高速HAL_GPIO_Init(GPIOA, &gpio_initstruct);gpio_initstruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_10;          // 两个LED对应的引脚gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;             // 推挽输出gpio_initstruct.Pull = GPIO_PULLUP;                     // 上拉gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;           // 高速HAL_GPIO_Init(GPIOB, &gpio_initstruct);
}void lcd1602_start(void)//上电初始化
{
//(1) 延时 15msdelay_ms(15);
//(2) 写指令 38H(不检测忙信号)lcd1602_write_cmd(0x38);
//(3) 延时 5msdelay_ms(5);
//(4) 以后每次写指令,读/写数据操作均需要检测忙信号
//(5) 写指令 38H:显示模式设置lcd1602_write_cmd(0x38);
//(6) 写指令 08H:显示关闭lcd1602_write_cmd(0x08);
//(7) 写指令 01H:显示清屏lcd1602_write_cmd(0x01);
//(8) 写指令 06H:显示光标移动设置lcd1602_write_cmd(0x06);
//(9) 写指令 0CH:显示开及光标设置lcd1602_write_cmd(0x0C);
}void lcd1602_write_cmd(char cmd)//写指令RS=0,根据写指令时序图
{RS_LOW;//引脚定义RW_LOW;EN_LOW;GPIOA->ODR = cmd;delay_ms(5);EN_HIGH;delay_ms(5);EN_LOW;
}void lcd1602_write_data(char dataShow)//写数据RS=1
{RS_HIGH;RW_LOW;EN_LOW;GPIOA->ODR = dataShow;delay_ms(5);EN_HIGH;delay_ms(5);EN_LOW;
}void lcd1602_show_char()
{//在哪里显示?lcd1602_write_cmd(0x80 + 0x02);//对照显存地址,第一行第三个空格//显示什么?lcd1602_write_data('L');
}void lcd1602_show_line(char row, char col, char *string)
{switch(row){case 1://第一行lcd1602_write_cmd(0x80 + col);//第一行第col+1个位置,对照显存地址while(*string){lcd1602_write_data(*string);string++;}break;case 2:lcd1602_write_cmd(0x80 + 0x40 + col);//第一行第col+1个位置,对照显存地址while(*string){lcd1602_write_data(*string);string++;}break;}
}
  • LCD1602.h程序
#ifndef __LCD1602_H__
#define __LCD1602_H__#include "sys.h"void lcd1602_init(void);
void lcd1602_gpio_init(void);
void lcd1602_start(void);
void lcd1602_write_cmd(char cmd);
void lcd1602_write_data(char dataShow);
void lcd1602_show_char(void);
void lcd1602_show_line(char row, char col, char *string);#endif

3.实物效果

  • 硬件模块接线
LCD1602STM32
VSSGND
VDD5V
V0GND
RSPB1
RWPB2
EPB10
D0PA0
D1PA1
D2PA2
D3PA3
D4PA4
D5PA5
D6PA6
D7PA7
BLA3.3V
BLKGND

**注意:**STM32F103CBT6最小系统中PB2管脚与BOOT1为统一管脚,可在下载完程序后,将BOOT1跳线帽拔掉连接中间排针。
在这里插入图片描述
ST-Link下载方式

  • 实验现象
    LCD1602显示字符串。
    在这里插入图片描述

LCD1602显示模块字符串keil源文件

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 25考研计算机组成原理复习·4.3程序的机器级代码表示
  • Pytorch构建网络模型结构都有哪些方式
  • 通过C# 读取PDF页面大小、方向、旋转角度
  • 攀高行为检测识别摄像机
  • JavaWeb系列四: DOM 上
  • 多线程篇(基本认识 - 线程相关API)(持续更新迭代)
  • 数学建模笔记(四):熵权
  • 排序算法-堆排序
  • 甲方(北汽)渗透测试面试经验分享
  • Nginx: 负载均衡场景下上游服务器异常时的容错机制
  • github访问加速项目@一键部署自动更改host修改加速Github访问
  • k8s调度器Scheduler
  • Lodash——JavaScript中的工具库
  • buuctf [MRCTF2020]hello_world_go
  • 速盾:服务器接入cdn后上传图片失败怎么解决?
  • $translatePartialLoader加载失败及解决方式
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【347天】每日项目总结系列085(2018.01.18)
  • Cumulo 的 ClojureScript 模块已经成型
  •  D - 粉碎叛乱F - 其他起义
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • js操作时间(持续更新)
  • PHP 的 SAPI 是个什么东西
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 笨办法学C 练习34:动态数组
  • 编写符合Python风格的对象
  • 动态规划入门(以爬楼梯为例)
  • 关于Flux,Vuex,Redux的思考
  • 前端之Sass/Scss实战笔记
  • 事件委托的小应用
  • 手写双向链表LinkedList的几个常用功能
  • 无服务器化是企业 IT 架构的未来吗?
  • 小程序开发中的那些坑
  • 云大使推广中的常见热门问题
  • HanLP分词命名实体提取详解
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​secrets --- 生成管理密码的安全随机数​
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​如何防止网络攻击?
  • ​如何在iOS手机上查看应用日志
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (day6) 319. 灯泡开关
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (论文阅读40-45)图像描述1
  • (强烈推荐)移动端音视频从零到上手(上)
  • (四)Controller接口控制器详解(三)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (五)IO流之ByteArrayInput/OutputStream
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)大型网站架构演变和知识体系
  • .Net CF下精确的计时器