基于LCD1602的躲闪类小游戏(使用STM32,平台Proteus,Keil,STM32cube)

基于LCD1602的躲闪类小游戏(使用STM32,平台Proteus,Keil,STM32cube)

这是我的《通信接口与技术》期末设计的一部分~花了一些时间终于做完啦

这个地方主要涉及到的是LCD1602的使用部分。

B站游戏演示视频链接:
演示视频
其中:
'*'代表主人公物体
‘<'代表障碍
’-‘代表可走道路
视频部分有loser部分和winner部分~

电路图:
基于LCD1602的躲闪类小游戏(使用STM32,平台Proteus,Keil,STM32cube)_第1张图片
端口介绍:
VSS直接接地,VDD直接接电源,VEE是调节屏幕分辨率的端口,一般接可变电阻。RS和R/W端口控制读写数据或者命令部分,E是使能端。D0~D7为数据端口。
RS和R/W对应读写数据或者命令的关系如下:
基于LCD1602的躲闪类小游戏(使用STM32,平台Proteus,Keil,STM32cube)_第2张图片
这个地方我主要用到的是写命令和写数据的操作。

写命令对应的函数:

void lcd_wcom(uint16_t x)
{
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
	GPIOC->ODR = (GPIOC->ODR &0xff00) | x;
	HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
	HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
}

写数据对应的函数:

void lcd_wdat(uint16_t x)
{
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
	GPIOC->ODR = (GPIOC->ODR &0xff00) | x;
	HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
	HAL_Delay(1);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
}

以及LCD1602的初始化部分:

void lcd_init(void)
{
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
	lcd_wcom(0x38);	//16*2显示,5*7点阵,8位数据口
	lcd_wcom(0x0c);	//开显示,光标关闭
	lcd_wcom(0x06);	//文字不动,地址自动+1
	lcd_wcom(0x01);	//清屏
}

LCD1602主要的使用方式就是:
LCD1602代表液晶显示屏,一共有两行,一行可以显示16个字符。
我这里使用到的是字符型液晶显示屏。
一共就是可以显示32个字符。
其中每一个字符对应的位置都有一个地址。其中第一行的第一个字符对应的地址为0x80,依次递增下去。比如第二行的第一个字符对应的地址就是0xc0.
我们如果想让LCD显示字符的话,首先我们需要告诉LCD应该写在哪个位置。首先对应上面那张表我们把RS置低,R/W也置为低。(通过LCD的数据端口把D0~D7把地址输入进去。)
这就对应了我们的写命令操作。

同理写数据的操作也是一样的。
说一下上面的函数延时部分,必须要有延时,因为在设计LCD1602这个硬件的时候就对应了延时反应,如果不设置延时,可能会对应不上来。
对应的时序图是这样的:
基于LCD1602的躲闪类小游戏(使用STM32,平台Proteus,Keil,STM32cube)_第3张图片
了解完基本的LCD1602操作之后,就可以设置我们的游戏啦,设置游戏的方面主要还是显示的工作。
相关源码和电路图我CSDN上传的了对应的资源啦~

你可能感兴趣的:(STM32)