LCD1602字符串显示(STM32F103)

注:
本文只是博主学习记录分享,仅供参考。如有错误肯定是博主理解有问题,谢谢!

一、概述

1602液晶为5V电压驱动,带背光,可显示两行,每行16个字符,不可以显示汉字,内置1128个字符的ASCII字符集,并行通信方式。本验是通过STM32F103C8T6最小系统驱动液晶显示一串字符。

二、实验材料

1、STM32F103C8T6最小系统
2、LCD1602液晶
3、杜邦线若干

三、基本操作时序

状态输入输出
读状态RS=L,RW=H,E=HD0-D7=状态
写指令RS=L,RW=L,D0-D7=指令码,E=高脉冲
读数据RS=H,RW=H,E=HD0-D7=数据
写数据RS=H,RE=L,D0-D7=数据,E=高脉冲

四、硬件连接

在这里插入图片描述
注: PB2 为 BOOT1 引脚,可能替换其他引脚。PB3 和 PB4 默认为 J-Link 烧录功能。

五、程序代码

1、GPIO初始化

void Lcd1602_Pin_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_8 | 
								GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 |
								GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);
}

2、LCD1602初始化

void Lcd1602_Init(void)
{
	Lcd1602_Pin_Init();
	
	delay_ms(15);
		
	Lcd1602_Write_Cmd(0X38);
	Lcd1602_Write_Cmd(0X0C);//开显示不显示光标
	Lcd1602_Write_Cmd(0X06);//写一个指针加1
	Lcd1602_Write_Cmd(0X01);//清屏
	Lcd1602_Write_Cmd(0X80);//设置数据指针起点	
}

3、检测忙碌状态

void Lcd1602_Check_Busy(void)
{
	u8 signal;
	LCD_RS = 0;
	LCD_RW = 1;
	do
	{
		LCD_EN = 1;
		signal = LCD_BUSY;
		LCD_EN = 0;
	}while(signal);
}

4、写指令

void Lcd1602_Write_Cmd(int cmd)
{
	Lcd1602_Check_Busy();//检测忙碌状态
	LCD_RS = 0;
	LCD_RW = 0; 
	LCD_EN = 0;
	
	cmd=cmd<<8;
	GPIOB->ODR=((GPIOB->ODR & 0x00FF)|(cmd&0xFF00));//PB15-8是数据位,PB0-7的数据不能变
	
	delay_us(2); 
	LCD_EN = 1;
	delay_us(2);
	LCD_EN = 0;
	delay_ms(15);
}

5、写数据

void Lcd1602_Write_Data(int data)
{
	Lcd1602_Check_Busy();//检测忙碌状态
	LCD_RS = 1; 
	LCD_RW = 0;
	LCD_EN = 0;
		
	data<<= 8;
	GPIOB->ODR = ((GPIOB->ODR & 0X00FF) | (data& 0XFF00));
	
	delay_us(2);
	LCD_EN = 1;
	delay_us(2);
	LCD_EN = 0;
	delay_ms(15);
}

6、显示字符

//	@u8 row:行
//	@u8 col:列
//	@int ch:字符
void Lcd1602_DisplayChar(u8 row,u8 col,int ch)
{
	//显示位置
	int add = 0;
	//判断是那一行
	if(row == 2)
	{
		//第二行的首地址 0x40
		add += 0x40;
	}
	//第一行的首地址 0x80
	add += 0x80 + col - 1;
	Lcd1602_Write_Cmd(add); 
	//显示内容	
	Lcd1602_Write_Data(ch);	
}

7、显示字符串

//	@u8 row:行
//	@u8 col:列
//	@u8 *str:字符串首地址
void Lcd1602_DisplayString(u8 row,u8 col,u8 *str)
{
	while(*str != '\0')
	{
		Lcd1602_DisplayChar(row,col,*str);
		col += 1;
		str++;
	}
}

8、主程序

int main(void)
{
	u8 buf[] = {"I Love You!"};
	u8 date[] = {"2021/2/7"};
	u8 author[] = {"Qing"};
	
	Sys_Delay_Init();
	Lcd1602_Init();
	
	//单个字符
//	Lcd1602_DisplayChar(2,2,'A');
	//字符串
	Lcd1602_DisplayString(1,1,buf);
	Lcd1602_DisplayString(2,1,date);
	Lcd1602_DisplayString(2,13,author);
	
	while(1)
	{
		
	}
}

六、实验效果

在这里插入图片描述
完整程序及LCD1602液晶相关资料:
链接:https://pan.baidu.com/s/1Ok-P7IACpib_vLQX57ikVg
提取码:hcyp

如有错误还望指出,谢谢!

  • 35
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 43
    评论
### 回答1: LCD1602是一个常用的字符型液晶显示屏,可以显示16列2行的字符。STM32F103R6是ST公司推出的一款32位单片机芯片,具有丰富的外设和强大的运算能力。ADC全称为模数转换器(Analog-to-Digital Converter),用于将模拟信号转换为数字信号。 在STM32F103R6上使用ADC来获取模拟信号的数值,然后通过串口或者I2C总线将获取到的数值传给LCD1602进行显示是一种常见的应用场景。 首先,我们需要配置STM32F103R6的ADC外设。通过设置引脚的模拟输入功能和采样时钟的频率等参数来完成ADC的初始化。然后,我们需要编写程序来读取ADC转换结果的值。可以通过直接读取寄存器的方式或者使用库函数来实现。 接下来,我们将获取到的模拟信号数值显示LCD1602上。首先,我们需要配置LCD1602的引脚连接,确保STM32的GPIO口与LCD1602的数据口和控制口正确连接。然后,我们需要编写相关的程序来初始化LCD1602,包括设置显示模式、清屏、设置光标位置等。 最后,在主程序中,我们可以设置一个循环来不断地读取ADC的数值,并将其转换为需要显示的格式,然后通过调用LCD1602的相应接口将数值显示在LCD上。可以使用字符串拼接、格式化输出等方式来实现。 这样,我们就实现了使用STM32F103R6的ADC来获取模拟信号的数值,并通过LCD1602显示出来的功能。这样的应用可以用于电子测量、传感器数据显示、环境监测等各种场景中,方便用户观察和分析数据。 ### 回答2: LCD1602是一种常见的字符型液晶显示器,它可以显示16列2行共32个字符。STM32F103R6是一款基于Cortex-M3内核的低功耗微控制器,具有丰富的外设资源和高性能。ADC是模数转换器,可以将模拟信号转换为数字信号。 在使用STM32F103R6时,可以通过配置ADC外设来实现模拟信号的转换。首先,需要确定要转换的模拟信号的引脚,并配置相应的GPIO引脚为模拟输入模式。然后,通过设置ADC的时钟分频、采样时间和转换间隔等参数来进行初始化。 接下来,可以通过编程的方式启动ADC的转换,并通过DMA或轮询的方式获取转换结果。获取到的转换结果可以用来更新LCD1602上的显示内容。 为了控制LCD1602,需要使用相应的驱动库或编程接口,通过设置相应的控制信号和数据信号来更新LCD1602上的显示内容。可以使用STM32F103R6的GPIO来控制LCD1602的使能信号、读写信号和数据信号。 综上所述,通过配置STM32F103R6的ADC外设和LCD1602,可以实现模拟信号的转换并在LCD1602显示转换结果。 ### 回答3: LCD1602是一种常见的字符型液晶显示屏,它具有16列和2行的字符显示区域。STM32F103R6是一种32位的ARM Cortex-M3内核微控制器。ADC则是模拟到数字转换器,用于将模拟信号转换为数字信号。 在使用STM32F103R6的ADC时,可以通过配置相应的寄存器使其与LCD1602进行通信。首先,我们需要配置STM32F103R6的GPIO管脚和ADC模块的相关寄存器。然后,使用ADC来采集模拟信号,并将其转换为数字信号。接下来,将得到的数字信号通过串口或其他方式发送给LCD1602进行显示。 为了实现这个过程,我们可以使用STM32的开发工具,如Keil或者STM32CubeMX等。在编写程序时,我们需要引入相应的库文件和头文件,并编写相应的代码来配置ADC模块和LCD1602模块。对于ADC的配置,可以设置采样率、参考电压等参数。对于LCD1602的配置,需要设置数据引脚、使能引脚等。 在实际的应用中,我们可以采集各种模拟信号,如温度、光照强度等,并将其显示LCD1602上。这对于各种嵌入式系统和控制器应用来说是非常有用的。同时,我们还可以通过调整ADC的配置参数,提高采样精度和速度,以满足具体的应用需求。 总之,通过连接LCD1602STM32F103R6的ADC,我们可以实现模拟信号的采集和显示。通过适当的配置和编程,我们可以在LCD1602显示各种模拟量,以满足实际应用的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员超庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值