STM32F103 LCD resistive LCD embedded system applications "fan disk" program implements the drawing to explain the ideas

First, the overall system analysis and design

1 , the topic of significance

Embedded hardware of course is the closest I first programming class, I actually particularly interested in hardware, but on the part of the screen or interest, nice, STM32F103 TFTLCD equipped with a resistive touch screen, I think we can use the touch screen to do their own want to do things, played before a called "fan disk" mobile phone app that symmetry depict the feeling I remember in particular deep, take advantage of this opportunity to do one of my own "fan disk" in the full LCD screen learning touch function based on the underlying code, to achieve these symmetrical beauty.

 

2 , needs analysis

 Android application store downloads of "fan disk":

Figure about three results, and finally draw a process diagram, demand is very simple to make and implement such a function

     

 

Finally, a process for the drawing of FIG, can see the gray dividing line is divided into several blocks phone screen, then choose a color, a drawing block, other blocks are copied in the same track, in the drawing process started, this a variety of continuous synchronous mirroring draw is a wonderful experience.

 

Because the resolution of the relationship, homemade may not be so delicate, but the functions are realized as much as possible, including the subject line drawing function, the choice of colors, switching mode and so on.

Homemade "fan disk":

 

 

They are

Intermediate symmetry

Symmetric four parts

Nine parts symmetry (use of higher mathematics knowledge)

 

Above a series of nine, two, four, eight RST corresponding to the

       Nine parts, symmetrical, four parts, the part, in general the drawing mode.

A bottom right block select color, select a color for (switching delay)

3 , the overall design

   3.1 System Development Environment

(Hewlett-Packard Shadow Elves 2nd generation) Intel®i5 6500® 4 2.0GHz, 16G memory, 1T + 128G solid-state hard drive

   Microsoft® Windows™ 10 Professional

 Keil Editor

3.2 系统总体功能,系统的结构,模块图、每个功能的详细说明

说明: 在原有触摸功能框架下开发,就是上课桌面上那个主要功能均在“main.c”文件内,触屏功能、函数集中在“lcd.h”文件内,“touch.c”文件用来测试、实现触屏功能。

 

3.2.1 主函数设计

“main.c” 为主要设计模块,包含绘图逻辑、运算、调用绘图、触屏函数等。

其中

rtp_test() 函数为整体绘图的逻辑

Load_Drow_Dialog() 函数为界面功能界面加载函数

Load_Color_Block()函数为界面右下角的颜色选取区域。

其中各种子函数科学组合,形成主体功能。

“lcd.h”提供 绘图函数

“touch.c” 提供 触摸位置数据

 

3.2.2 模式设计

提供(也就是这个LCD屏幕左上角的选择个数——5个)

点击即可刷新屏幕,并且绘制对应分隔线,即调用Load_Drow_Dialog()

所有模式选择其实只是对一个flag变量的判断

各个flag值对应的模式

上图绘制分割线

模式加载通过flag 所以绘图的逻辑也是根据flag 来判断的

绘制曲线轨迹函数

其中,九部对称绘图 的方法有别于其他有规则角度对称的方式,完全利用三角函数来计算,九部分轨迹坐标,特附上草稿纸一张——

可以看到用了比例关系,计算每条分割线的起始点坐标

利用了  一个圆上一点,旋转40度(360/9)之后的坐标,利用三角函数

具体原理——

 

3.2.3数据的初始化工作

  接下来,还需要有一些辅助性的变量来构成相关功能。

其中我本来想用struct 结构体来记录点的x,y 坐标,但是这个c语言有点奇怪,不能用(。。。。)所以用了指针数组来存储x,y像个点,其中具体骚操作像这样

这样,用一个temp指针循环用九次,每一次通过运算得到一次映射区域的值并进行绘制之后,再赋值给运算函数来计算下一个点。就是这样。

这个转40度运算坐标的函数——

为了不引入C语言的math.h库,我直接用了cos40 和 sin40 的近似值

返回一个包含x,y 值的指针。

其他,2、4、8对称的,其实只是坐标的正负值变化,乏善可陈,直接将所有结果输出即可

下图分别,左右对称、四部分对称 全部列出即可,当然也可以用上述函数获得旋转角度为90、45的坐标。

 

接下来就是颜色的选择

 

一开始我想用文字切换的方式,但当我看了lcd.h 里的函数之后并且研究一番过后,我发现我可以使一块指定的区域填充我想要的颜色,而且一个色块显示在右下角可能会更明显一些

这个色块的绘制函数——

 

可以看到,这个绘制函数的总体思路是,确定一个矩形区域的左上角、右下角坐标 sx\sy\ex\ey

然后获取这个矩形的宽度、长度 width、height

然后设置一个光标起始点  setCursor(sx,sy+i) 然后用LCD->LCD_RAM 赋值颜色常量值。

因为,这个 选中光标后,之后的n次循环并赋值LCD_RAM缓存会自动换行,而我们的色块是在右下角位置,所以需要一行行换,并且每次指定位置,所以每次起点是 sx,sy+i

注意上面的i !!!

然后再之后的 width长度像素点都赋值颜色常量。

这样效果就是这样—— 我这里用了五种颜色可供选择,点一次切换一次

这样之后,发现屏幕每次刷新频率还是挺高的,我的块点击换颜色切换太快了,所以用了一个延时切换下一个颜色的函数(其实就是一个while循环)

if 是用来判断点击是否在色块范围之内。

二、系统的详细设计

1、绘图功能的实现

 在完成以上所有的交互以及内部数据关联的运算处理后,最后要将这些数据展现到屏幕上。

图1.7

2.2绘图资源的载入与初始化

主要是 LCD_Init()这个函数,是在lcd.c 这个文件内部的——

可以看到这个初始化工作函数有个2000多行,这主要是它首先去判断了这块LCD屏幕的型号,并分别有不同的初始化设置,具体不再赘述。

初始化完屏幕,先呈现的是提示信息界面,这个我自己加了几行。

其中,按板子(STM32F103)上右边红色复位键显示,一开始无法显示屏幕内容的,可能复位才能加载lcd驱动,按复位键上面一个key
0按钮可以进入屏幕测试,类似手机的屏幕测试。

 

四、系统运行的结果

见第二部分截图

 

总结

       经过嵌入式系统的这次大作业学习,我对嵌入式编程有了更深入的了解,对硬件和软件的联系在认知上又加深了一层,这次作业,又了解了lcd屏幕的触摸交互的过程,和逻辑上的应用,这些其实是对自己编程知识系统的扩充,有趣。

 

我把资源上传到csdn上好了

地址:

迷盘,对称的美,学习触摸、显示的好教学代码

Guess you like

Origin blog.csdn.net/qq_38190111/article/details/92608680