概述

STM32

stm32
STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核,按内核架构分为不同产品:主流产品(STM32F0、STM32F1、STM32F3)、超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)、高性能产品(STM32F2、STM32F4、STM32F7、STM32H7)。STM32上主要的编程语言是C,可以用eLua环境来运行Lua脚本,也可以安装MicroPython后运行Python。相对来说,主频较低,内存较小,价格便宜,方便作出的小产品大面积安装,做一些控制工作。
在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。新系列采用LQFP64、LQFP100和LFBGA100三种封装,不同的封装保持引脚排列一致性,结合STM32平台的设计理念,开发人员通过选择产品可重新优化功能、存储器、性能和引脚数量,以最小的硬件变化来满足个性化的应用需求。

汉字显示原理

常用的汉字内码系统有GB2312,GB13000,GBK,BIG5(繁体)等几种,其中GB2312支持的汉字仅有几千个,很多时候不够用,而GBK内码不仅完全兼容GB2312,还支持了繁体字,总汉字数有2万多个,完全能满足我们一般应用的要求。
本实例我们将制作三个GBK字库,制作好的字库放在SD卡里面,然后通过SD卡,将字库文件复制到外部FLASH芯片W25Q128里,这样,W25Q128就相当于一个汉字字库芯片了。
汉字在液晶上的显示原理与前面显示字符的是一样的。汉字在液晶上的显示其实就是一些点的显示与不显示,这就相当于我们的笔一样,有笔经过的地方就画出来,没经过的地方就不画。所以要显示汉字,我们首先要知道汉字的点阵数据,这些数据可以由专门的软件来生成。只要知道了一个汉字点阵的生成方法,那么我们在程序里面就可以把这个点阵数据解析成一个汉字。
知道显示了一个汉字,就可以推及整个汉字库了。汉字在各种文件里面的存储不是以点阵数据的形式存储的(否则那占用的空间就太大了),而是以内码的形式存储的,就是GB2312/GBK/BIG5等这几种的一种,每个汉字对应着一个内码,在知道了内码之后再去字库里面查找这个汉字的点阵数据,然后在液晶上显示出来。这个过程我们是看不到,但是计算机是要去执行的。
单片机要显示汉字也与此类似:汉字内码(GBK/GB2312),查找点阵库,解析,显示。
所以只要我们有了整个汉字库的点阵,就可以把电脑上的文本信息在单片机上显示出来了。这里我们要解决的最大问题就是制作一个与汉字内码对得上号的汉字点阵库。而且要方便单片机的查找。每个GBK码由2个字节组成,第一个字节为0X81~0XFE,第二个字节分为两部分,一是0X40~0X7E,二是0X80~0XFE。其中与GB2312相同的区域,字完全相同。我们把第一个字节代表的意义称为区,那么GBK里面总共有126个区(0XFE-0X81+1),每个区内有190个汉字(0XFE-0X80+0X7E-0X40+2),总共就有126190=23940个汉字。我们的点阵库只要按照这个编码规则从0X8140开始,逐一建立,每个区的点阵大小为每个汉字所用的字节数190。这样,我们就可以得到在这个字库里面定位汉字的方法:
当GBKL<0X7F时:Hp=((GBKH-0x81)*190+GBKL-0X40)*(size*2);
当GBKL>0X80时:Hp=((GBKH-0x81)*190+GBKL-0X41)*(size*2);
其中GBKH、GBKL分别代表GBK的第一个字节和第二个字节(也就是高位和低位),size代表汉字字体的大小(比如16字体,12字体等),Hp则为对应汉字点阵数据在字库里面的起始地址(假设是从0开始存放)。
这样我们只要得到了汉字的GBK码,就可以显示这个汉字了。从而实现汉字在液晶上的显示。

总体方案设计

系统总体方案设计

本次设计的益智游戏平台硬件部分由STM32F103嵌入式系统核心板、LCD触摸屏、红外接收头与红外遥控器及其他硬件资源构成。软件部分设计简洁的游戏显示界面,制定贪吃蛇游戏玩法及规则,实现对贪吃蛇的移动控制、游戏分数计算等操作。
该益智游戏系统主要实现的功能包括:控制贪吃蛇的四方向移动、随机生成有不同效果的食物、统计玩家分数、判断游戏成功与否、调整游戏参数等相关功能。

系统设计框图

system
上图为贪吃蛇益智游戏系统总框图,展示了该系统的主要功能。游戏系统方面包括:游戏界面绘制、游戏参数绘制、游戏操作介绍、游戏分数统计,游戏玩法方面包括、随即效果食物生成、遥控器操作贪吃蛇四向移动、LED灯指示游戏状态。

系统硬件设计

系统硬件总体设计

1
本次游戏系统设计主要需要使用到如下几个关键的硬件资源:MCU为STM32F103ZET6,LCD屏幕用于显示游戏界面,红外接收头用于接收红外遥控器的按键信息,按键用于操作系统程序,LED灯便于指示程序运行状态,有源蜂鸣器用于指示游戏结果,以及其他一些基础的硬件。

硬件电路图及说明

hardware
如上图所示为MCU部分原理图,U1是开发板的核心芯片,型号为:STM32F103ZET6。该芯片具有64KBSRAM、512KBFLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器(共12个通道)、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口、1个FSMC接口以及112个通用IO口。

系统软件设计

本次设计任务指标是设计贪吃蛇益智游戏系统,贪食蛇游戏是一条不停游动的蛇不断的捕食来达到自身的增长,但是若蛇碰到自身的身体或者碰到了任何障碍物,则游戏结束。
首先从物理的角度来分析蛇得运动规律。它是蠕动的,像水一样流动。他有个特性就是身体的每一个点都经过他头部所在的点,他每一个时刻骨节所要运动的目的地是他前一个骨节所在的位置。
游戏程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。移动时必须从蛇头开始,也就是蛇尾不能改作蛇头。当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。图形的实现是从蛇头的新位置开始画出蛇。用户可以用上下左右键控制蛇头的方向。
可以实现如下功能:

  1. 贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以游玩,已达到放松各种压力的目的。
  2. 游戏可以进行升级,也就是增加吃食物的难度,同时设置有多种不同效果的食物,以便使游戏更有挑战性,不会容易玩腻。
  3. 游戏界面大小可以任意指定,游戏中的相关参数、贪吃蛇速度可以调整设置。
  4. 实现美观的游戏界面。

结果展示