基于STM32的LCD1602显示Proteus仿真设计(仿真+程序+设计报告+讲解视频)

这里写目录标题

  • 1.主要功能
  • 0. 资料清单&下载链接
  • 资料下载链接:
  • 2.仿真设计
  • 3. 程序设计
  • 4. 设计报告
  • 5. 框图

基于STM32的LCD1602显示Proteus仿真设计(仿真+程序+设计报告+讲解视频)

仿真图proteus 8.9

程序编译器:keil 5

编程语言:C语言

设计编号:C0094

1.主要功能

1.使用Proteus仿真软件和STM32F103系列芯片设计LCD1602显示电路。

2.开始仿真后数码管LCD1602第一行显示hello world。第二行显示字母和数字。

3.使用STM32CubeMx图像化工具新建工程。

主要硬件设备:STM32F103C6+LCD1602液晶

0. 资料清单&下载链接

img

0、常见使用问题及解决方法–必读!!!!

1、程序代码

2、Proteus仿真

3、功能要求

4、设计报告

5、讲解视频

6、框图

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

资料下载链接:

百度网盘链接:

https://pan.baidu.com/s/1TltN_W-7AI_xivUP2dFZDQ?pwd=7fty

2.仿真设计

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

开始仿真后LCD1602第一行显示hello world。第二行显示字母和数字num=87654321。

img

3. 程序设计

程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序是HAL版本编写的,有stm32cubemx配置文件。有注释可以结合讲解视频理解。

img

img

lcd1602驱动代码

#include "system.h"
#include "lcd1602.h"
//D0-D7设定方向:I-输入;O-输出
void DataDir(char dir)
{GPIO_InitTypeDef GPIO_InitStruct = {0};HAL_GPIO_WritePin(GPIOA, LED0_Pin|LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin|LED6_Pin|LED7_Pin, GPIO_PIN_SET);GPIO_InitStruct.Pin = LED0_Pin|LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin|LED5_Pin|LED6_Pin|LED7_Pin;GPIO_InitStruct.Pull = GPIO_PULLUP;if(dir == 'I'){GPIO_InitStruct.Mode = GPIO_MODE_INPUT;}else if(dir == 'O'){GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;}HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}//D0-D7读数据
uint8_t ReadData(void)
{uint8_t dat=0;//DataDir('I');if(HAL_GPIO_ReadPin(GPIOA, LED0_Pin)==GPIO_PIN_SET) dat|=0x01;if(HAL_GPIO_ReadPin(GPIOA, LED1_Pin)==GPIO_PIN_SET) dat|=0x02;if(HAL_GPIO_ReadPin(GPIOA, LED2_Pin)==GPIO_PIN_SET) dat|=0x04;if(HAL_GPIO_ReadPin(GPIOA, LED3_Pin)==GPIO_PIN_SET) dat|=0x08;if(HAL_GPIO_ReadPin(GPIOA, LED4_Pin)==GPIO_PIN_SET) dat|=0x10;if(HAL_GPIO_ReadPin(GPIOA, LED5_Pin)==GPIO_PIN_SET) dat|=0x20;if(HAL_GPIO_ReadPin(GPIOA, LED6_Pin)==GPIO_PIN_SET) dat|=0x40;if(HAL_GPIO_ReadPin(GPIOA, LED7_Pin)==GPIO_PIN_SET) dat|=0x80;return dat;
}//D0-D7写数据
void WriteData(uint8_t dat)
{uint16_t Set_Pins = 0, Rst_Pins = 0;//DataDir('O');if(dat & 0x01) Set_Pins |= LED0_Pin;else Rst_Pins |= LED0_Pin;if(dat & 0x02) Set_Pins |= LED1_Pin;else Rst_Pins |= LED1_Pin;if(dat & 0x04) Set_Pins |= LED2_Pin;else Rst_Pins |= LED2_Pin;if(dat & 0x08) Set_Pins |= LED3_Pin;else Rst_Pins |= LED3_Pin;if(dat & 0x10) Set_Pins |= LED4_Pin;else Rst_Pins |= LED4_Pin;if(dat & 0x20) Set_Pins |= LED5_Pin;else Rst_Pins |= LED5_Pin;if(dat & 0x40) Set_Pins |= LED6_Pin;else Rst_Pins |= LED6_Pin;if(dat & 0x80) Set_Pins |= LED7_Pin;else Rst_Pins |= LED7_Pin;HAL_GPIO_WritePin(GPIOA, Set_Pins, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, Rst_Pins, GPIO_PIN_RESET);
}//LCD忙等待
void LCD_Busy_Wait(void)
{uint8_t status;DataDir('I');RS_InstructionR();RW_Read();do{E_Set();__NOP();status = ReadData();E_Rst();}while(status & 0x80);
}//写LCD指令
void LCD_Write_Cmd(uint8_t cmd)
{DataDir('O');WriteData(cmd);RS_InstructionR();RW_Write();E_Rst();RS_InstructionR();RW_Write();E_Set();__NOP();E_Rst();LCD_Busy_Wait();
}//写LCD数据寄存器
void LCD_Write_Data(uint8_t dat)
{DataDir('O');WriteData(dat);RS_DataR();RW_Write();E_Set();__NOP();E_Rst();LCD_Busy_Wait();
}//LCD初始化
void LCD_Init(void)
{LCD_Write_Cmd(0x38);HAL_Delay(2);LCD_Write_Cmd(0x01);HAL_Delay(2);LCD_Write_Cmd(0x06);HAL_Delay(2);LCD_Write_Cmd(0x0c);HAL_Delay(2);
}//在x行(0-1),y列(0-15)显示字符串
void LCD_ShowString(uint8_t x, uint8_t y, char *str)
{
//	LCD_Write_Cmd(0x01);  //清屏 会有抖动现象uint8_t i=0;//设置显示起始位置if(x == 0)LCD_Write_Cmd(0x80|y);else if(x == 1)LCD_Write_Cmd(0xc0|y);//输出字符串for(i=0; i<16 && str[i]!='\0'; i++){LCD_Write_Data(str[i]);HAL_Delay(2);}
}void LCD_ShowChar(uint8_t x, uint8_t y,uint8_t dat)
{//设置显示起始位置if(x == 0)LCD_Write_Cmd(0x80|y);else if(x == 1)LCD_Write_Cmd(0xc0|y);LCD_Write_Data(dat);
}//在x行(0-1),y列(0-15)显示数字
void LCD_ShowNum(uint8_t x, uint8_t y,uint8_t num)
{     //设置显示起始位置if(x == 0)LCD_Write_Cmd(0x80|y);else if(x == 1)LCD_Write_Cmd(0xc0|y);LCD_ShowChar(x,y,num+'0');} 

4. 设计报告

54534字设计报告,内容包括硬件设计、软件设计、结论等。

img

5. 框图

程序流程

img

硬件框图

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot项目编译报错 类文件具有错误的版本 61.0, 应为 52.0

springboot项目在编译时报错&#xff1a; /Users/Apple/Developer/art/caicai/cai-api/dubbo-samples/1-basic/dubbo-samples-spring-boot/dubbo-samples-spring-boot-provider/src/main/java/org/apache/dubbo/springboot/demo/provider/ProviderApplication.java:22:32 java…

PVE纵览-备份与快照指南

PVE纵览-备份与快照指南 文章目录 PVE纵览-备份与快照指南摘要1 备份与快照概述定义与区别备份与快照在PVE中的应用场景 2 PVE 备份功能详解备份类型与策略配置备份任务自动化备份管理 3 PVE 快照功能详解快照的工作原理快照的创建与恢复机制快照对系统性能的影响快照的使用场景…

Mac如何实现最简单的随时监测实时运行状态的方法

Mac book有着不同于Windows的设计逻辑与交互设计&#xff0c;使得Mac book有着非常棒的使用体验&#xff0c;但是在Mac电脑的使用时间过长时&#xff0c;电脑也会出现响应速度变慢或应用程序崩溃的情况&#xff0c;当发生的时候却不知道什么原因导致的&#xff0c;想要查询电脑…

JavaWeb合集23-文件上传

二十三 、 文件上传 实现效果&#xff1a;用户点击上传按钮、选择上传的头像&#xff0c;确定自动上传&#xff0c;将上传的文件保存到指定的目录中&#xff0c;并重新命名&#xff0c;生成访问链接&#xff0c;返回给前端进行回显。 1、前端实现 vue3AntDesignVue实现 <tem…

WPF之iconfont(字体图标)使用

1&#xff0c;前文&#xff1a; WPF的Xaml是与前端的Html有着高度相似性的标记语言&#xff0c;所以Xaml也可同Html一般轻松使用阿里提供的海量字体图标&#xff0c;从而有效的减少开发工作度。 2&#xff0c;下载字体图标&#xff1a; 登录阿里图标库网iconfont-阿里巴巴矢量…

leetcode92:反转链表||

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1a;[1,4,3,2…

Python-安装与PyCharm的安装配置(1)

目录 安装 打开运行 PyCharm的安装 新建项目 安装 找到官网下载对应的电脑对应的版本 Welcome to Python.org -- 官网 下载稳定版的 安装记得勾选配置环境&#xff0c;这样自己就不需要再配置环境了 安装成功 至此python的运行环境就安装好了 打开运行 在开始菜单中可以…

python的编程基础分支,循环与函数的应用知识

编程基础是学习任何编程语言的必备知识之一。在Python中&#xff0c;分支、循环和函数是常用的编程概念&#xff0c;它们可以让我们编写出更复杂、更灵活的程序。 分支 分支是根据条件来决定程序执行的不同路径。在Python中&#xff0c;我们使用if语句来实现分支。 if 条件:# …

qt QLocale详解

1、概述 QLocale是Qt框架中的一个类&#xff0c;用于处理与本地化相关的操作。它能够方便地实现日期、时间、数字和货币的格式化和解析&#xff0c;支持不同的语言、区域设置和字符集。QLocale提供了一种跨平台的方式来获取当前系统的语言设置&#xff0c;并返回该语言的本地化…

缓存、注解、分页

一.缓存 作用&#xff1a;应用查询上&#xff0c;内存中的块区域。 缓存查询结果&#xff0c;减少与数据库的交互&#xff0c;从而提高运行效率。 1.SqlSession 缓存 1. 又称为一级缓存&#xff0c;mybatis自动开启。 2. 作用范围&#xff1a;同一…

uniapp vue3 使用echarts-gl 绘画3d图表

我自己翻遍了网上&#xff0c;以及插件市场&#xff0c;其实并没有uniapp 上使用echarts-gl的样例&#xff0c;大多数都是使用插件市场的echarts的插件 开始自己尝试直接用echartsgl 没有成功&#xff0c;后来尝试使用threejs 但是也遇到一些问题&#xff0c;最后我看官网的时…

【言语理解】片段阅读整体概述

1.1 题型分类 片段阅读一般有以下六种&#xff1a; 中心理解题 “这段文字意在说明&#xff1a;” “这段文字意在强调&#xff1a;” “这段文字主要介绍了&#xff1a;” “下列对文意概括最恰当的是&#xff1a;”标题拟定题 “最适合做这段文字标题的是&#xff1a;”下文…

什么是 OpenTelemetry?

OpenTelemetry 定义 OpenTelemetry (OTel) 是一个开源可观测性框架&#xff0c;允许开发团队以单一、统一的格式生成、处理和传输遥测数据&#xff08;telemetry data&#xff09;。它由云原生计算基金会 (CNCF) 开发&#xff0c;旨在提供标准化协议和工具&#xff0c;用于收集…

ESP32 gptimer通用定时器初始化报错:assert failed: timer_ll_set_clock_prescale

背景&#xff1a;IDF版本V5.1.2 &#xff0c;配置ESP32 通用定时器&#xff0c;实现100HZ&#xff0c;占空比50% 的PWM波形。 根据乐鑫官方的IDF指导文档设置内部计数器的分辨率&#xff0c;计数器每滴答一次相当于 1 / resolution_hz 秒。 &#xff08;ESP-IDF编程指导文档&a…

【NOIP普及组】统计单词数

【NOIP普及组】统计单词数 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 一般的文本编辑器都有查找单词的功能&#xff0c;该功能可以快速定位特定单词在文章中的位置&#xff0c;有的还能统计出特定单词在文章中出现的次数。 现在&#x…

Unity 如何优雅的限定文本长度, 包含对特殊字符,汉字,数字的处理。实际的案例包括 用户昵称

常规限定文本长度 ( 通过 UntiyEngine.UI.Inputfiled 附带的长度限定 ) 痛点1 无法对中文&#xff0c;数字&#xff0c;英文进行识别&#xff0c;同样数量的汉字和同样数量的英文像素长度是不一样的&#xff0c;当我们限定固定长度后&#xff0c;在界面上的排版不够美观 痛点2…

jmeter常用配置元件介绍总结之函数助手

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之函数助手 1.进入函数助手对话框2.常用函数的使用介绍2.1.RandomFromMultipleVars函数2.2.Random函数2.3.R…

发现了NitroShare的一个bug

NitroShare 是一个跨平台的局域网开源网络文件传输应用程序&#xff0c;它利用广播发现机制在本地网络中找到其他安装了 NitroShare 的设备&#xff0c;从而实现这些设备之间的文件和文件夹发送。 NitroShare 支持 Windows、macOS 和 Linux 操作系统。 NitroShare允许我们为…

【 ElementUI 组件Steps 步骤条使用新手详细教程】

本文介绍如何使用 ElementUI 组件库中的步骤条组件完成分步表单设计。 效果图&#xff1a; 基础用法​ 简单的步骤条。 设置 active 属性&#xff0c;接受一个 Number&#xff0c;表明步骤的 index&#xff0c;从 0 开始。 需要定宽的步骤条时&#xff0c;设置 space 属性即…

互联网技术净土?原生鸿蒙开启全新技术征程

鸿蒙生态与开发者的崭新机会 HarmonyOS NEXT承载着华为对未来操作系统的深刻理解&#xff0c;如今已发展为坚实的数字底座。它不仅在技术层面取得了全面突破&#xff0c;还在中国操作系统市场中站稳了脚跟。 当前&#xff0c;HarmonyOS NEXT的代码行数已超过1.1亿&#xff0c…