项目名称:“药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(密码支持英文大写+英文小写+数字)
CSDN:YANG-03 Bilibili:-YANG-03
引言:本人在学习STM32电子密码锁和触摸屏时突发奇想,利用触摸屏来实现一个更加高级的一点点的密码锁,于是耗费N天N夜,写了这个“基于STM32触摸屏的超级无敌智能电子密码锁(密码支持英文大写+英文小写+数字)”。
…………其实我只写了main.c函数,其余像触摸屏驱动啥的都是用的正点原子官方给的程序驱动。
项目简介:本项目名称为:“药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(密码支持英文大写+英文小写+数字)。硬件包含STM32F103ZET6+3.5寸触摸屏,密码支持英文大小写+数字输入。输入方式仿照手机键盘(26键)。目前只是初版,尚有许多功能未完善。项目简单,这里给的代码复制粘贴到正点原子官方给的例程即可使用。到时只需要给触摸屏初始化一下后看到界面就知道怎么使用的了。
项目内容:
1.触摸屏简介:(这里触摸屏的介绍摘抄自正点原子官方资料中“STM32F1开发指南-库函数版本_V3.3”文档,详细可直接看官方手册)
目前最常用的触摸屏有两种:电阻式触摸屏与电容式触摸屏。
电阻触摸屏的主要部分是一块与显示器表面非常配合的电阻薄膜屏,这是一种多层的复合 薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(透明的导电电阻) 导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、它的内表面也涂有一层涂层、 在他们之间有许多细小的(小于 1/1000 英寸)的透明隔离点把两层导电层隔开绝缘。 当手指 触摸屏幕时,两层导电层在触摸点位置就有了接触,电阻发生变化,在 X 和 Y 两个方向上产生 信号,然后送触摸屏控制器。控制器侦测到这一接触并计算出(X,Y)的位置,再根据获得的 位置模拟鼠标的方式运作。这就是电阻技术触摸屏的最基本的原理。 电阻触摸屏的优点:精度高、价格便宜、抗干扰能力强、稳定性好。
电阻触摸屏的缺点:容易被划伤、透光性不太好、不支持多点触摸。
电容式触摸屏主要分为两种:
1、 表面电容式电容触摸屏。 表面电容式触摸屏技术是利用 ITO(铟锡氧化物,是一种透明的导电材料)导电膜,通过电 场感应方式感测屏幕表面的触摸行为进行。
2、 投射式电容触摸屏。 投射电容式触摸屏是传感器利用触摸屏电极发射出静电场线。一般用于投射电容传感技术 的电容类型有两种:自我电容和交互电容。 自我电容又称绝对电容,是最广为采用的一种方法,自我电容通常是指扫描电极与地构成 的电容。在玻璃表面有用 ITO 制成的横向与纵向的扫描电极,这些电极和地之间就构成一个电 容的两极。当用手或触摸笔触摸的时候就会并联一个电容到电路中去,从而使在该条扫描线上 的总体的电容量有所改变。在扫描的时候,控制 IC 依次扫描纵向和横向电极,并根据扫描前后 的电容变化来确定触摸点坐标位置。笔记本电脑触摸输入板就是采用的这种方式,笔记本电脑 的输入板采用 X*Y 的传感电极阵列形成一个传感格子,当手指靠近触摸输入板时,在手指和传 感电极之间产生一个小量电荷。采用特定的运算法则处理来自行、列传感器的信号来确定手指 的位置。 交互电容又叫做跨越电容,它是在玻璃表面的横向和纵向的 ITO 电极的交叉处形成电容。 交互电容的扫描方式就是扫描每个交叉处的电容变化,来判定触摸点的位置。当触摸的时候就 会影响到相邻电极的耦合,从而改变交叉处的电容量,交互电容的扫面方法可以侦测到每个交 叉点的电容值和触摸后电容变化,因而它需要的扫描时间与自我电容的扫描方式相比要长一些, 需要扫描检测 X*Y 根电极。目前智能手机/平板电脑等的触摸屏,都是采用交互电容技术。
接下来看看电容触摸屏的优缺点:
电容触摸屏的优点:手感好、无需校准、支持多点触摸、透光性好。
电容触摸屏的缺点:成本高、精度不高、抗干扰能力差。
部分代码:
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "24cxx.h"
#include "w25qxx.h"
#include "touch.h"
#include "remote.h"
#include "key16.h"
#include "beep.h"
#include "adc.h"
#include "timer.h"
/*
作 者:-YANG-
CSDN:YANG-03 Bilibili:-YANG-03
创建时间:2022/08/25
适用硬件:STM32F103ZET6E-mail:2194647952@qq.com
备 注:此历程基于正点原子官方例程所改动,仅供参考学习!
*/extern char k1;//矩阵键盘键值int Input_Toggle=0;//切换英文大小写
int Num_Toggle=0; //切换英文数字输入char key=' ';//触摸屏键值
char Shuru[11]={' '};//输入密码
char Mima[9]={'A','b','c','1','2','3','4','5','6'};//初始密码
int x;//修改位数
int flag1;//判断密码正确与否
int error_x;//密码输入错误次数/*密码锁*/
void Combination_Lock()
{int i;POINT_COLOR=BLACK;LCD_ShowString(160,180,48,16,16,"Error:");//显示错误次数LCD_ShowString(10,180,32,16,16,"Key:");//显示键值POINT_COLOR=RED;LCD_ShowNum(210,180,error_x,2,16);LCD_ShowChar(45,180,key,16,0);POINT_COLOR=BLACK;LCD_ShowString(10,50,104,16,16,"Please Enter:");LCD_DrawRectangle(30,68,210,98);POINT_COLOR=RED;for(i=0;i<x;i++)//显示输入数据{LCD_ShowChar(50+(i*16),75,Shuru[i],16,0);}LCD_DrawLine(50+(x*16),93,58+(x*16),93);//光标显示LCD_Fill(34+(x*16),93,42+(x*16),93,WHITE);LCD_Fill(66+(x*16),93,210+(x*16),93,WHITE);if(key>='A' && key<='Z')//密码输入(英文大写){Shuru[x]=key;x++;key=' ';delay_ms(100);}if(key>='a' && key<='z')//密码输入(英文小写){Shuru[x]=key;x++;key=' ';delay_ms(100);}if(key>='0' && key<='9')//密码输入(数字){Shuru[x]=key;x++;key=' ';delay_ms(100);}if(x>9 || x<0) x=0;if(key=='<')//删除,减一位{x--;key=' ';delay_ms(100);}if(key=='|')//切换英文大小写{Input_Toggle=!Input_Toggle;key=' ';delay_ms(100);}if(Input_Toggle==0) LCD_ShowString(68,186,8,12,12,"D");if(Input_Toggle==1) LCD_ShowString(68,186,8,12,12,"X");if(Num_Toggle==1) LCD_ShowString(68,186,8,12,12,"S");if(key=='#')//切换英文数字输入{LCD_Fill(0,200,240,320,WHITE);Num_Toggle=!Num_Toggle;key=' ';delay_ms(100);}if(key=='_')//模拟回车键确定,开始密码比对{for(i=0;i<9;i++){if(Shuru[i]==Mima[i])flag1=1;else{flag1=2;break;}}key=' ';delay_ms(100);}if(flag1==1)//密码正确{error_x=0;LED0=!LED0;LCD_ShowString(60,100,120,16,16,"Welcome To Use!"); }if(flag1==2)//密码错误{LCD_ShowString(60,100,120,16,16,"Password error!");x=0;error_x++;flag1=0;}
}/*触摸屏矩阵按键英文界面设计*/
void Touch_Interface_English()
{
// POINT_COLOR=RED;
// LCD_ShowString(30,5,300,16,16,"Long Time No See: YANG");/*嵌入式应用协会*/POINT_COLOR=RED;Chinese_Show_one(50,5,0,16,0);Chinese_Show_one(70,5,1,16,0);Chinese_Show_one(90,5,2,16,0);Chinese_Show_one(110,5,3,16,0);Chinese_Show_one(130,5,4,16,0);Chinese_Show_one(150,5,5,16,0);Chinese_Show_one(170,5,6,16,0);LCD_DrawLine(0,28,240,28);/*矩阵键盘横线*/LCD_DrawLine(0,200,240,200);LCD_DrawLine(0,230,240,230);LCD_DrawLine(0,260,240,260);LCD_DrawLine(0,290,240,290);/*矩阵键盘竖线*//*一*/LCD_DrawLine(24,200,24,230);LCD_DrawLine(48,200,48,230);LCD_DrawLine(72,200,72,230);LCD_DrawLine(96,200,96,230);LCD_DrawLine(120,200,120,230);LCD_DrawLine(144,200,144,230);LCD_DrawLine(168,200,168,230);LCD_DrawLine(192,200,192,230);LCD_DrawLine(216,200,216,230);/*二*/LCD_DrawLine(12,230,12,260);LCD_DrawLine(36,230,36,260);LCD_DrawLine(60,230,60,260);LCD_DrawLine(84,230,84,260);LCD_DrawLine(108,230,108,260);LCD_DrawLine(132,230,132,260);LCD_DrawLine(156,230,156,260);LCD_DrawLine(180,230,180,260);LCD_DrawLine(204,230,204,260);LCD_DrawLine(228,230,228,260);/*三*/LCD_DrawLine(36,260,36,290);LCD_DrawLine(60,260,60,290);LCD_DrawLine(84,260,84,290);LCD_DrawLine(108,260,108,290);LCD_DrawLine(132,260,132,290);LCD_DrawLine(156,260,156,290);LCD_DrawLine(180,260,180,290);LCD_DrawLine(204,260,204,290);/*四*/LCD_DrawLine(36,290,36,320);LCD_DrawLine(72,290,72,320);LCD_DrawLine(96,290,96,320);LCD_DrawLine(144,290,144,320);LCD_DrawLine(168,290,168,320);LCD_DrawLine(204,290,204,320);/*一*/POINT_COLOR=BLACK;LCD_ShowString(8,207,8,16,16,"Q");LCD_ShowString(32,207,8,16,16,"W");LCD_ShowString(56,207,8,16,16,"E");LCD_ShowString(80,207,8,16,16,"R");LCD_ShowString(104,207,8,16,16,"T");LCD_ShowString(128,207,8,16,16,"Y");LCD_ShowString(152,207,8,16,16,"U");LCD_ShowString(176,207,8,16,16,"I");LCD_ShowString(200,207,8,16,16,"O");LCD_ShowString(224,207,8,16,16,"P");/*二*/LCD_ShowString(20,237,8,16,16,"A");LCD_ShowString(44,237,8,16,16,"S");LCD_ShowString(68,237,8,16,16,"D");LCD_ShowString(92,237,8,16,16,"F");LCD_ShowString(116,237,8,16,16,"G");LCD_ShowString(140,237,8,16,16,"H");LCD_ShowString(164,237,8,16,16,"J");LCD_ShowString(188,237,8,16,16,"K");LCD_ShowString(212,237,8,16,16,"L");/*三*/LCD_ShowString(14,267,8,16,16,"|");LCD_ShowString(44,267,8,16,16,"Z");LCD_ShowString(68,267,8,16,16,"X");LCD_ShowString(92,267,8,16,16,"C");LCD_ShowString(116,267,8,16,16,"V");LCD_ShowString(140,267,8,16,16,"B");LCD_ShowString(164,267,8,16,16,"N");LCD_ShowString(188,267,8,16,16,"M");LCD_ShowString(214,267,16,16,16,"<-");/*四*/LCD_ShowString(6,297,24,16,16,"123");LCD_ShowString(42,297,24,16,16,"C/E");LCD_ShowString(80,297,8,16,16,"!");LCD_ShowString(108,297,24,16,16,"---");LCD_ShowString(152,297,8,16,16,"?");LCD_ShowString(174,297,16,16,16,"Fu");LCD_ShowString(210,297,24,16,16,"<--");
}/*触摸屏矩阵按键英文键值反馈*/
void Touch_Keypro_English()
{tp_dev.scan(0);/*键值显示*/
// POINT_COLOR=BLACK;
// LCD_ShowString(10,180,32,16,16,"Key:");
// POINT_COLOR=BLUE;LCD_ShowNum(45,180,k1,2,16);
// LCD_ShowChar(45,180,key,16,0);/*键值反馈*/if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下{ if(tp_dev.x[0]>0 && tp_dev.x[0]<24 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='Q';if(Input_Toggle==1) key='q';}if(tp_dev.x[0]>24 && tp_dev.x[0]<48 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='W';if(Input_Toggle==1) key='w'; }if(tp_dev.x[0]>48 && tp_dev.x[0]<72 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='E';if(Input_Toggle==1) key='e';}if(tp_dev.x[0]>72 && tp_dev.x[0]<96 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='R';if(Input_Toggle==1) key='r';}if(tp_dev.x[0]>96 && tp_dev.x[0]<120 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='T';if(Input_Toggle==1) key='t';}if(tp_dev.x[0]>120 && tp_dev.x[0]<144 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='Y';if(Input_Toggle==1) key='y';}if(tp_dev.x[0]>144 && tp_dev.x[0]<168 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='U';if(Input_Toggle==1) key='u';}if(tp_dev.x[0]>168 && tp_dev.x[0]<192 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='I';if(Input_Toggle==1) key='i';}if(tp_dev.x[0]>192 && tp_dev.x[0]<216 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='O';if(Input_Toggle==1) key='o';}if(tp_dev.x[0]>216 && tp_dev.x[0]<240 && tp_dev.y[0]>200 && tp_dev.y[0]<230){if(Input_Toggle==0) key='P';if(Input_Toggle==1) key='p';}if(tp_dev.x[0]>12 && tp_dev.x[0]<36 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='A';if(Input_Toggle==1) key='a';}if(tp_dev.x[0]>36 && tp_dev.x[0]<60 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='S';if(Input_Toggle==1) key='s';}if(tp_dev.x[0]>60 && tp_dev.x[0]<84 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='D'; if(Input_Toggle==1) key='d';}if(tp_dev.x[0]>84 && tp_dev.x[0]<108 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='F'; if(Input_Toggle==1) key='f';}if(tp_dev.x[0]>108 && tp_dev.x[0]<132 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='G'; if(Input_Toggle==1) key='g';}if(tp_dev.x[0]>132 && tp_dev.x[0]<156 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='H'; if(Input_Toggle==1) key='h';}if(tp_dev.x[0]>156 && tp_dev.x[0]<180 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='J'; if(Input_Toggle==1) key='j';}if(tp_dev.x[0]>180 && tp_dev.x[0]<204 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='K'; if(Input_Toggle==1) key='k';}if(tp_dev.x[0]>204 && tp_dev.x[0]<228 && tp_dev.y[0]>230 && tp_dev.y[0]<260){if(Input_Toggle==0) key='L'; if(Input_Toggle==1) key='l';}if(tp_dev.x[0]>0 && tp_dev.x[0]<36 && tp_dev.y[0]>260 && tp_dev.y[0]<290){key='|'; }if(tp_dev.x[0]>36 && tp_dev.x[0]<60 && tp_dev.y[0]>260 && tp_dev.y[0]<290){if(Input_Toggle==0) key='Z'; if(Input_Toggle==1) key='z';}if(tp_dev.x[0]>60 && tp_dev.x[0]<84 && tp_dev.y[0]>260 && tp_dev.y[0]<290){if(Input_Toggle==0) key='X'; if(Input_Toggle==1) key='x';}if(tp_dev.x[0]>84 && tp_dev.x[0]<108 && tp_dev.y[0]>260 && tp_dev.y[0]<290){if(Input_Toggle==0) key='C'; if(Input_Toggle==1) key='c';}if(tp_dev.x[0]>108 && tp_dev.x[0]<132 && tp_dev.y[0]>260 && tp_dev.y[0]<290){if(Input_Toggle==0) key='V'; if(Input_Toggle==1) key='v';}if(tp_dev.x[0]>132 && tp_dev.x[0]<156 && tp_dev.y[0]>260 && tp_dev.y[0]<290){if(Input_Toggle==0) key='B'; if(Input_Toggle==1) key='b';}if(tp_dev.x[0]>156 && tp_dev.x[0]<180 && tp_dev.y[0]>260 && tp_dev.y[0]<290){if(Input_Toggle==0) key='N'; if(Input_Toggle==1) key='n';}if(tp_dev.x[0]>180 && tp_dev.x[0]<204 && tp_dev.y[0]>260 && tp_dev.y[0]<290){if(Input_Toggle==0) key='M'; if(Input_Toggle==1) key='m';}if(tp_dev.x[0]>204 && tp_dev.x[0]<240 && tp_dev.y[0]>260 && tp_dev.y[0]<290){key='<'; }if(tp_dev.x[0]>0 && tp_dev.x[0]<36 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='#'; }if(tp_dev.x[0]>36 && tp_dev.x[0]<72 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='/'; }if(tp_dev.x[0]>72 && tp_dev.x[0]<96 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='!'; }if(tp_dev.x[0]>96 && tp_dev.x[0]<144 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='-'; }if(tp_dev.x[0]>144 && tp_dev.x[0]<168 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='?'; }if(tp_dev.x[0]>168 && tp_dev.x[0]<204 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='f'; }if(tp_dev.x[0]>204 && tp_dev.x[0]<240 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='_'; }}elsedelay_ms(10); //没有按键按下的时候
}/*触摸屏矩阵按键数字界面设计*/
void Touch_Interface_Number()
{
// POINT_COLOR=RED;
// LCD_ShowString(30,5,300,16,16,"Long Time No See: YANG");/*嵌入式应用协会*/POINT_COLOR=RED;Chinese_Show_one(50,5,0,16,0);Chinese_Show_one(70,5,1,16,0);Chinese_Show_one(90,5,2,16,0);Chinese_Show_one(110,5,3,16,0);Chinese_Show_one(130,5,4,16,0);Chinese_Show_one(150,5,5,16,0);Chinese_Show_one(170,5,6,16,0);LCD_DrawLine(0,28,240,28);/*矩阵键盘横线*/LCD_DrawLine(0,200,240,200);LCD_DrawLine(0,230,240,230);LCD_DrawLine(0,260,240,260);LCD_DrawLine(0,290,240,290);/*矩阵键盘竖线*/LCD_DrawLine(60,200,60,320);LCD_DrawLine(120,200,120,320);LCD_DrawLine(180,200,180,320);POINT_COLOR=BLACK;LCD_ShowString(26,207,8,16,16,"1");LCD_ShowString(86,207,8,16,16,"2");LCD_ShowString(146,207,8,16,16,"3");LCD_ShowString(206,207,8,16,16,"4");LCD_ShowString(26,237,8,16,16,"5");LCD_ShowString(86,237,8,16,16,"6");LCD_ShowString(146,237,8,16,16,"7");LCD_ShowString(206,237,8,16,16,"8");LCD_ShowString(26,267,8,16,16,"9");LCD_ShowString(86,267,8,16,16,"0");LCD_ShowString(142,267,16,16,16,"<-");LCD_ShowString(202,267,16,16,16,"OK");LCD_ShowString(26,297,8,16,16,"+");LCD_ShowString(86,297,8,16,16,"-");LCD_ShowString(146,297,8,16,16,"*");LCD_ShowString(206,297,8,16,16,"/");}/*触摸屏矩阵按键数字键值反馈*/
void Touch_Keypro_Number()
{tp_dev.scan(0);/*键值显示*/
// LCD_ShowString(10,180,32,16,16,"Key:");
// POINT_COLOR=BLUE;
// LCD_ShowNum(45,180,k1,2,16);/*键值反馈*/if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下{ if(tp_dev.x[0]>0 && tp_dev.x[0]<60 && tp_dev.y[0]>200 && tp_dev.y[0]<230){key='1'; }if(tp_dev.x[0]>60 && tp_dev.x[0]<120 && tp_dev.y[0]>200 && tp_dev.y[0]<230){key='2'; }if(tp_dev.x[0]>120 && tp_dev.x[0]<180 && tp_dev.y[0]>200 && tp_dev.y[0]<230){key='3';}if(tp_dev.x[0]>180 && tp_dev.x[0]<240 && tp_dev.y[0]>200 && tp_dev.y[0]<230){key='4';}if(tp_dev.x[0]>0 && tp_dev.x[0]<60 && tp_dev.y[0]>230 && tp_dev.y[0]<260){key='5'; }if(tp_dev.x[0]>60 && tp_dev.x[0]<120 && tp_dev.y[0]>230 && tp_dev.y[0]<260){key='6'; }if(tp_dev.x[0]>120 && tp_dev.x[0]<180 && tp_dev.y[0]>230 && tp_dev.y[0]<260){key='7'; }if(tp_dev.x[0]>180 && tp_dev.x[0]<240 && tp_dev.y[0]>230 && tp_dev.y[0]<260){key='8'; }if(tp_dev.x[0]>0 && tp_dev.x[0]<60 && tp_dev.y[0]>260 && tp_dev.y[0]<290){key='9';}if(tp_dev.x[0]>60 && tp_dev.x[0]<120 && tp_dev.y[0]>260 && tp_dev.y[0]<290){key='0';}if(tp_dev.x[0]>120 && tp_dev.x[0]<180 && tp_dev.y[0]>260 && tp_dev.y[0]<290){key='<';}if(tp_dev.x[0]>180 && tp_dev.x[0]<240 && tp_dev.y[0]>260 && tp_dev.y[0]<290){key='#'; }if(tp_dev.x[0]>0 && tp_dev.x[0]<60 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='+';}if(tp_dev.x[0]>60 && tp_dev.x[0]<120 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='-';}if(tp_dev.x[0]>120 && tp_dev.x[0]<180 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='*';}if(tp_dev.x[0]>180 && tp_dev.x[0]<240 && tp_dev.y[0]>290 && tp_dev.y[0]<320){key='/'; }}elsedelay_ms(10); //没有按键按下的时候
}/*红外遥控*/
void Infrared_Remote_Control()
{u8 key; key=Remote_Scan();//key为红外遥控器按下时的键值//LCD_ShowString(80,300,56,16,16,"KEYVAL:"); if(key){ //LCD_ShowNum(136,300,key,3,16);//显示键值 switch(key){case 162:k1=1; break; case 98: k1=2; break; case 226:k1=3; break; case 34: k1=4; break; case 2: k1=5; break; case 194:k1=6; break; case 224:k1=7; break; case 168:k1=8; break; case 144:k1=9; break; case 152:k1=11; break; case 104:k1=10; break; case 176:k1=12; break; case 56: k1=15; break; case 24: k1=13; break; case 74: k1=99; break; case 16: k1=14; break; case 90: k1=16; break; }}else delay_ms(10);
}/*矩阵按键*/
void Key4x4(void)
{KEY_Scan16(1);
// LCD_ShowString(10,300,32,16,16,"Key:");//显示键值
// LCD_ShowNum(42,300,k1,2,16);
}/*主函数*/
int main(void)
{ delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级uart_init(115200); //串口初始化为115200LED_Init(); //LED端口初始化LCD_Init(); KEY_Init();Remote_Init(); //红外接收初始化 KEY_Init16(); //矩阵按键初始化tp_dev.init(); //触摸屏初始化while(1){if(Num_Toggle==0)//英文字母输入{Touch_Interface_English(); //触摸屏矩阵按键英文界面设计Touch_Keypro_English(); //触摸屏矩阵按键英文键值反馈函数}if(Num_Toggle==1)//数字输入{Touch_Interface_Number(); //触摸屏矩阵按键数字界面设计Touch_Keypro_Number(); //触摸屏矩阵按键数字键值反馈函数}Combination_Lock();//密码锁// Infrared_Remote_Control();//红外遥控函数
// Key4x4(); //矩阵键盘函数}
}
备注:此程序基于正点原子官方例程改动,仅供参考学习!!!
希望这份代码对各位有帮助!