大家好,我是『芯知识学堂』的SingleYork,
今天笔者要跟大家分享的是该例程单片机部分代码的配置。
首先,我们需要配置GPIO的模式,根据板子硬件的实际情况,
我们将Y0-Y5这6个输出对应的控制IO的工作模式配置成强推挽模式,
将X0-X7这8个输入对应的控制IO的工作模式配置成准双向口模式,
跟串口相关的P30和P31也配置成准双向口模式:
串口笔者使用的是串口1,对应的IO是P30和P31,
波特率使用115200,数据位8位,然后使能中断即可:
定时器笔者使用的定时器0,定时时间是1ms,
主要用于AD采样计时,每10毫秒读取一次AD口数据,具体配置如下:
两路AD引脚是P10和P11,这里主要需要注意一下AD采样后的数据对齐模式ADC_RES_H2L8,
然后对应的IO口需要设置成高阻模式:
AD采样后的数据处理用了简单的平均值处理,每10ms采集一次数据,
采样10次后求平均值,然后再根据电源电压计算出对应AD口的电压,
这里计算后为了触摸屏上能显示一位小数,数据进行了放大10倍的处理。
当然咯,这种简单平均值的方式还是有点过于简单,会造成采样后的数值有比较大的波动,
比较好点的算法是在采样多个数据后,进行冒泡排序算法排序,
然后去掉最大和最小的几个值或多个值,再将中间的多个值取平均值,
即所谓的“中值求平均算法”(也许叫的不太专业,大致就是这么个意思),
感兴趣的小伙伴们可以自己动手尝试一下。
接下来是GPIO状态的刷新,这里主要是方便单片机通过串口将输入输出的状态发送到触摸屏进行显示:
串口中断部分,主要是先进行了帧头5A A5的校验,在帧头校验OK后,
收到指定数据长度后就认为当前帧接收完成了,当然咯,如果怕接收到的数据出错,
可以加上和校验、异或校验、CRC校验之类的,笔者在别的项目中也经常用到,本例中就暂不做讲解:
串口一帧数据接收完成,就开始解析收到的数据,在解析数据的时候,
也主要是通过判断特定位的值,来判断接收到的数据是否正确,从而执行相关的动作。
这里主要有3个功能:
1、接收触摸屏的轮询指令,在收到指令后,根据协议返回指定的数据; 2、接收触摸屏的Y0-Y5的按键指令,然后对Y0-Y5进行输出状态取反; 3、接收触摸屏的“定时闪烁”参数修改指令,然后更新参数;
这3个指令的格式都是一样,处理的方式也是基本一致:
5A A5 -- 帧头 06 -- 数据长度(从该位开始到最后所有数据字节数,不包含该位) 83 -- 功能码 00 20 -- 寄存器起始地址 01 -- 寄存器个数 00 01 -- 寄存器值
只有在收到触摸屏的轮询指令后,单片机才会向触摸屏返回数据,返回数据的时候,增加了和校验:
最后,在main函数中,写上如下代码即可,整个单片机代码部分就完成了(还有些跟库函数相关的代码,大家可以看下源代码):
在main函数中,先将Y0-Y5的输出关闭是因为这款单片机上电默认的IO口是准双向口,
上电瞬间可能会导致对应的输出指示灯短时间内亮一下,
在咨询过STC的技术之后进行了这样处理,后续新出的STC8系列及STC32系列,就不会有这个问题。
至此,整个例程的单片机部分的代码就介绍完了,在写完代码编译没问题后,
我们就可以使用USB转UART模块将程序下载到单片机中:
这款USB转UART模块跟普通的USB转UART模块有点不一样,它是自带2路串口,
其中一路可以对STC单片机实现一键下载,关于这个模块的详细资料,
硬件连接好后,我们只需要使用STC提供的ISP软件,按照如下配置,就可以将程序一键下载到单片机中了。
程序下载OK后,我们就可以使用串口助手来验证串口通讯是否正常,
这也是调试的一种方法,不然万一单片机串口通讯有问题,
直接跟屏连起来后导致通讯不上,就比较难查问题所在。
在确认好单片机部分代码没问题后,我们就可以将单片机和屏连接起来测试了,
手上没有屏的小伙伴们,也可以直接用单片机通过USB转UART模块跟模拟器连在一起测试,效果也是一样的。
好了,关于单片机部分的代码就介绍完了,下一讲笔者将要给大家介绍淘晶驰屏的密码登录及密码修改功能,
|