2019 3/31 键盘的封装还有串口的封装与通信

3/31 键盘的封装还有串口的封装与通信

键盘的封装

功能:实现自动换行,光标的闪烁,退格,触摸光标移位,并且可以从移动了位置的光标输入和退格。
定义键盘按键的结构体
typedef struct Event
{
int xpos;
int ypos;
int wideth;
int height;
char *title;
int flag;
void (*handle)(struct Event);
}EVENT;
将每个按键都附上他自己的值
EVENT keyboard[Board_Max];
*随后检测按键的按下位置与按键是否相符如果相符的话就执行对应的 void (handle)(struct Event);函数
如果按下的是普通输入需要显示的按键就进入
void Input_Add(EVENT keyboard,int number); 将你输入的字符给传入一个专门用来存放显示字符的结构体数组
INPUT KeyBoard_Input[Input_Max]={0};并且存入该字符的显示时的坐标位置,这样比较方便检测触屏光标的偏移功能。
并且每次执行一次Input_Add函数都将显示的内容 INPUT KeyBoard_Input[Input_Max] 进行全部打印。
触摸光标偏移在触摸接受到的数据如果时在 显示输出的 INPUT KeyBoard_Input[Input_Max] 中的字符坐标,那就将之后添加或删除数据的点设在该坐标对应的字符前
再次输入字符就把这个光标对应字符以后的数据全部完后移一个单位把这个字符塞入,或者如果时删除数据就把这个光标对应字符之后的数据全部往前移。
按键改变大小写,和改变数字和字符
就是把keyboard 里的对应位置的title值重新赋值一下。
在这里插入图片描述
大小写的改变也是类似。
关于光标的闪烁
光标的闪烁采用的是软定时器TIM的使用。将显示’|’ 和’ '(空白)将其填充掉,达到闪烁的效果。定时器中存入这两个事件。
并且每当触屏识别到触屏按键按在显示的字符坐标上时就会给再软定时器中的显示两个事件的位置重新附上值
在这里插入图片描述
自动换行
每当检测到一行的字符总数超过20个时就将每个Y的坐标都向上移一个单位,并且下一行出现黄色条码供输出。
而当退格时小于20时就将每个字符的Y轴向下移动一个单位,并且用背景色覆盖上面的一条输出内容。
由于是改变坐标所以即使换行了依旧可以使用手动触摸改变光标位置的操作。

串口的封装与通信

首先创建结构体。
typedef struct QUEUE
{
unsigned int head;
unsigned int tail;
unsigned int queue_len;

unsigned int queue_size;

char *pdata;
}QUEUE_T;
head是用来输出的时候从head开始
tail是用来输入的时候从tail出入
len用来定义环形缓存区的大小
size用来判断是否超过缓存区大小

*void queue_init(QUEUE_T pqueue,int len)
初始化该结构体。有点需要注意在初始化data的是时候记得要先分配空间
在这里插入图片描述
因为太久没写可能会忘记,导致程序一直跑飞

*void queue_datain(QUEUE_T pqueue,char data)
将输入的data传入 pqueue->pdata[(pqueue->tail)]

*char queue_dataout(QUEUE_T pqueue)
输出被传入的字符,注意在外部接收 的时候不能用改函数直接给存的函数赋值,因为没执行一次该函数head就会++ 会导致很多问题

void Analysis(char ch)
用来解析输入的字符存入数组之中,并且完成解析。

*void choice_power(char a)
再用一个函数来解析得到的字符串a,完成相关操作

遇到问题:在写代码的时候遇到了很多内存跑飞的问题
通过调试都解决了

心得体会:现在感觉第二阶段掌握的已经有点底了,和开学刚学的时候对内存的理解感觉有了很大的提高,一跑飞调试,或者按思路理一理就能知道跑飞的原因和内存的错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值