• 方案介紹
    • 1.主要功能
    • 0. 資料清單&下載鏈接
    • 資料下載鏈接:
    • 2.仿真設(shè)計(jì)
    • 3. 程序設(shè)計(jì)
    • 4. 設(shè)計(jì)報(bào)告
    • 5. 框圖
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于STM32的LCD1602顯示Proteus仿真設(shè)計(jì)(仿真+程序+設(shè)計(jì)報(bào)告+講解視頻)

2024/11/11
5301
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

設(shè)計(jì)資料獲取聯(lián)系方式.doc

共1個(gè)文件

仿真圖proteus 8.9

程序編譯器:keil 5

編程語言:C語言

設(shè)計(jì)編號(hào):C0094

1.主要功能

1.使用Proteus仿真軟件STM32F103系列芯片設(shè)計(jì)LCD1602顯示電路。

2.開始仿真后數(shù)碼管LCD1602第一行顯示hello world。第二行顯示字母和數(shù)字。

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

主要硬件設(shè)備:STM32F103C6+LCD1602液晶

0. 資料清單&下載鏈接

img

0、常見使用問題及解決方法–必讀?。。?!

1、程序代碼

2、Proteus仿真

3、功能要求

4、設(shè)計(jì)報(bào)告

5、講解視頻

6、框圖

Altium Designer 安裝破解

KEIL+proteus 單片機(jī)仿真設(shè)計(jì)教程

KEIL安裝破解

Proteus元器件查找

Proteus安裝

Proteus簡(jiǎn)易使用教程

單片機(jī)學(xué)習(xí)資料

相關(guān)數(shù)據(jù)手冊(cè)

答辯技巧

設(shè)計(jì)報(bào)告常用描述

鼠標(biāo)雙擊打開查找嘉盛單片機(jī)51 STM32單片機(jī)課程畢業(yè)設(shè)計(jì).url

資料下載鏈接:

百度網(wǎng)盤鏈接:

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

2.仿真設(shè)計(jì)

打開仿真工程,雙擊proteus中的單片機(jī),選擇hex文件路徑,然后開始仿真。

開始仿真后LCD1602第一行顯示hello world。第二行顯示字母和數(shù)字num=87654321。

img

3. 程序設(shè)計(jì)

程序是用keil5 mdk版本打開的,如果打開有問題,核實(shí)下keil的版本。程序是HAL版本編寫的,有stm32cubemx配置文件。有注釋可以結(jié)合講解視頻理解。

img

img

lcd1602驅(qū)動(dòng)代碼

#include "system.h"
#include "lcd1602.h"
//D0-D7設(shè)定方向: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讀數(shù)據(jù)
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寫數(shù)據(jù)
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數(shù)據(jù)寄存器
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);  //清屏 會(huì)有抖動(dòng)現(xiàn)象
	uint8_t i=0;
	//設(shè)置顯示起始位置
	if(x == 0)
		LCD_Write_Cmd(0x80|y);
	else if(x == 1)
		LCD_Write_Cmd(0xc0|y);
	//輸出字符串
	for(i=0; i<16 && str[i]!='?'; i++)
	{
		LCD_Write_Data(str[i]);
		HAL_Delay(2);
	}
}

void LCD_ShowChar(uint8_t x, uint8_t y,uint8_t dat)
{

	//設(shè)置顯示起始位置
	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)顯示數(shù)字
void LCD_ShowNum(uint8_t x, uint8_t y,uint8_t num)
{     

	//設(shè)置顯示起始位置
	if(x == 0)
		LCD_Write_Cmd(0x80|y);
	else if(x == 1)
		LCD_Write_Cmd(0xc0|y);
	
   LCD_ShowChar(x,y,num+'0');
	
} 

4. 設(shè)計(jì)報(bào)告

54534字設(shè)計(jì)報(bào)告,內(nèi)容包括硬件設(shè)計(jì)、軟件設(shè)計(jì)、結(jié)論等。

img

5. 框圖

程序流程

img

硬件框圖

img

  • 設(shè)計(jì)資料獲取聯(lián)系方式.doc
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時(shí)響應(yīng)!