第三讲:代码框架、矩阵键盘、密码输入
移植工程
将002的工程代码移植到新建的003文件夹,并在属性中把MounRiver工程改名为003
在User中的属性中修改,确保添加的是003的Driver
若移植了MounRiver工程,一定要作此修改
新建定时器的源文件和头文件,将定时器独立封装出来,timer.c中调用头文件”debug.h“,将锁的状态独立封装成一个函数
在timer.h文件中引用函数
先引用头文件timer.h,在主函数调用lock函数,实现锁的开关
显示一组字符串
仿照LCD_ShowChinese函数,构造一次性显示一组字符串的函数,lcd_show_chinese
*s 是指针s所指向的内容(当前字符)
- 在C语言中,字符串以 \0(ASCII码0)结尾
- 当 *s == '\0' 时,while条件为假,循环结束
x+=16;:显示完一个汉字后,横坐标向右移动16个像素
if(x>127):检查横坐标是否超出屏幕宽度
x=0; y+=16;:换行处理
s+=2;:ASCII字符只占1个字节,但汉字占2个字节
在lcd.h文件中引用该函数
在主函数调用该函数来显示字符串
矩阵键盘
从timer.c文件中移植GPIO,并配置:配置推挽输出(Out_PP)或上拉模式(IPU)
/*
* OUT PP
* R4 PD11
* R3 PD9
* R2 PE15
* R1 PE13
*
* IPU上拉
* C1 PE11
* C2 PE9
* C3 PE7
* C4 PC5
*/
仿照蓝桥杯单片机矩阵键盘大模板改写 注:低电平有效
在key.h文件中引用函数
在主函数引用key.h文件,并调用矩阵键盘函数
配置定时器
移植蓝桥杯单片机V4T调度器大模板的调度器内容
变量声明:unsigned long int uwtick;用于计数
将按键处理函数和屏幕处理函数放在调度器里轮询调用
从第一讲代码中移植定时器3,作为调度器的计数
用于验证矩阵键盘与LCD接入调度器能否正常调度
按键处理函数
移植蓝桥杯单片机大模板的按键消抖处理代码
屏幕处理函数
if(key_index != key_index_old): 只有当用户新输入了一位密码时,才需要刷新屏幕,这是为了避免无意义的重绘
u8 i = key_index;
LCD_Fill(16, 45, 112, 66, YELLOW);:保存当前位数并清空显示区域,为重新绘制做准备
if(key_index == 7) key_index = 6;:如果key_index意外变成7,就强制限制为6,防止数组越界或显示超出区域
while(i--){......}:密码遮蔽显示逻辑,确保只显示最多6个星号
key_index_old = key_index;:将当前密码位数保存,用于下次比较,下次调用时,如果位数没变化,就不会重绘
编写字符串比较函数string_chek,用于密码正误检验
在按键处理函数写入逻辑:按下1-9,输出1-9的值;按下14,输出0;按下13,清空;按下16,确认




























