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

ops/2024/11/14 22:26:56/

这里写目录标题

  • 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.ppmy.cn/ops/133695.html

相关文章

【Android】View—基础知识,滑动,弹性滑动

基础知识 什么是View 在 Android 中&#xff0c;View 是用户界面&#xff08;UI&#xff09;中的基本组件&#xff0c;用于绘制图形和处理用户交互。所有的 UI 组件&#xff08;如按钮、文本框、图片等&#xff09;都是 View 的子类。可以说&#xff0c;View 是构建 Android …

在jquery里,使用$.each()函数循环数组,对象,dom的用法

介绍 $.each() 能遍历一维数组&#xff0c;多维数组&#xff0c;JSON对象&#xff0c;dom2元素。在开发中可以很高效的处理各种数据结构。前提&#xff0c;需要导入jquery 使用 遍历JSON对象 var objDemo {name: linda,age:12, desc: a girl};$.each(objDemo,function(i,va…

小程序开发进阶之路-AI编程助手

之前&#xff0c;我独自一人开发了一个名为“心情追忆”的小程序&#xff0c;旨在帮助用户记录日常的心情变化及重要时刻。从项目的构思、设计、前端&#xff08;小程序&#xff09;开发、后端搭建到最终部署&#xff0c;所有环节都由我一人包办。经过一个月的努力&#xff0c;…

MySQL技巧之跨服务器数据查询:高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中

MySQL技巧之跨服务器数据查询&#xff1a;高级篇-先调用A数据库的MySql存储过程再复制到B数据库的表中 基础篇已经描述&#xff1a;借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MySQL数据库的…

c语言中的文件操作(2)

文件的打开-fopen 函数介绍 文件的打开方式 相对路径与绝对路径 文件关闭函数fclose 文件操作的正确流程 函数的介绍 文件的打开形式 相对路径与绝对路径 文件的关闭函数-fclose 正确的文件操作的流程 前言 通过前面的章节我们已经知道文件的基本的概念&#xff0c;我们如…

Hbase Shell

一、启动运行HBase 首先登陆SSH&#xff0c;由于之前在Hadoop的安装和使用中已经设置了无密码登录&#xff0c;因此这里不需要密码。然后&#xff0c;切换至/usr/local/hadoop&#xff0c;启动Hadoop&#xff0c;让HDFS进入运行状态&#xff0c;从而可以为HBase存储数据&#…

kafka是如何处理数据乱序问题的?

1.数据有序 生产者发送的数据&#xff0c;单分区内可以做到有序&#xff0c;多分区无法保证&#xff0c;除非把多个分区的数据拉取到消费端&#xff0c;进行排序&#xff0c;但是这样做效率很低&#xff0c;不如直接设置一个分区 2.数据乱序 1&#xff09;kafka在1.x版本之前…

php回调函数(匿名)的使用

在 PHP 中&#xff0c;回调函数&#xff08;或匿名函数&#xff09;可以通过参数传递值&#xff0c;通常是在调用该回调时提供的。回调函数可以接收传入的值&#xff0c;并在其内部使用这些值。 <?php/*** php回调函数&#xff08;匿名&#xff09;的使用* 通过参数传递值…