STM32(触摸数字键盘)

现象

stm32触摸屏(数字键盘)

简介

  最近有个项目,为了更加高级,我决定舍弃了矩阵按键,采用了触摸屏,为了实现任意数字的输入,首先要有一个键盘,在此,我用STM32TFTLCD触屏做了一个触摸键盘(电阻屏,竖屏)

实现流程

1、设置显示界面

void Load_keyboard(u16 x,u16 y,u8 **key_content)
{    
    u16 i;
    BRUSH_COLOR=RED; //字体颜色为红色
    keycontent=key_content;
    LCD_Fill_onecolor(x,y,x+240,y+180,WHITE);
    LCD_DrawRectangle(x,y,x+240,y+180);
    LCD_DrawRectangle(x,y+30,x+240,y+60);
    LCD_DrawRectangle(x,y+90,x+240,y+120);
    LCD_DrawRectangle(x,y+150,x+240,y+180);
    LCD_DrawRectangle(x+80,y+30,x+160,y+180);
    

    BRUSH_COLOR=BLUE;
    LCD_DisplayString(x+100,y+7,16,"Close");
    y+=30;
    for(i=0;i<15;i++)
    {
        LCD_DisplayString(x+(i%3)*80+6,y+7+30*(i/3),16,(u8*)keycontent[i]);    
    } 
}

 2、读取触摸数据

//返回值:1-16
u8 Get_keynum(u16 x,u16 y)
{
    u16 i,j;
    static u8 key_x=0;
    u8 key=0;
    XPT2046_Scan(0);
    if(Xdown<lcd_width&&Ydown<lcd_height)  //触摸屏被按下
    {

        for(i=0;i<5;i++)
        {
            for(j=0;j<3;j++)
            {
                 if(Xdown<(x+j*80+80)&&Xdown>(x+j*80)&&Ydown<(y+i*30+30)&&Ydown>(y+i*30))  //决定每一块区域所代表的值
                {    
                    key=i*3+j+1;    //i代表行 每一行的变化需要变化三个值 j代表列 每一列变化仅需要变化一个值
                    break;                
                }
            }
            if(Xdown<240&&Xdown>0&&Ydown<170&&Ydown>140)//按的是close
            {
                key=16;
            }
            if(key) //key!=0
            {       
                if(key_x==key)key=0; 
                else 
                {
                    Key_staset(x,y,key_x-1,0);  //清掉上一次的高亮,不然可能一下子高亮多块
                    key_x=key;
                    Key_staset(x,y,key_x-1,1);  //决定哪一块区域发生按键捕获
                }
                break;
            }
      }  
    }
    else if(key_x)  //每次从0开始 不记录上次的状态
    {
        Key_staset(x,y,key_x-1,0);
        key_x=0;
    } 
    delay_ms(80);
    return key; 
}

3、补充 

u8** keycontent;
const  u8* key_menu[16]={"Storage","take","Quit","1","2","3","4","5","6","7","8","9","0","DEL","OK","Close"};  //按键界面菜单
void Load_keyboard(u16 x,u16 y,u8 **key_content);  //加载按键界面
void Key_staset(u16 x,u16 y,u8 keyx,u8 sta);  //设置按键捕获状态
u8 Get_keynum(u16 x,u16 y);  //得到按键的输入
 

void Key_staset(u16 x,u16 y,u8 keyx,u8 sta)
{          
    u16 i=keyx/3,j=keyx%3;
    if(keyx>17)return;
    if(sta==1)
    {
        if(keyx<15)
        {
            LCD_Fill_onecolor(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,GREEN);  //当该区域被按下 区域被绿色填充
        }
        else//close变成绿色
        {
            LCD_Fill_onecolor(0+1,140+1,240-2,170-2,GREEN);
        }
    }
    else//松手后区域恢复白色
    {  
        if(keyx<15)
        {
            LCD_Fill_onecolor(x+j*80+1,y+i*30+1,x+j*80+78,y+i*30+28,WHITE);  //当该区域被按下 区域被绿色填充
        }
        else//close变成绿色
        {
            LCD_Fill_onecolor(0+1,140+1,240-2,170-2,WHITE);
        }
    }
    //区域被填色后重新显示
    if(keyx<15)
    {
        LCD_DisplayString(x+j*80+6,y+7+30*i,16,(u8*)keycontent[keyx]);
    }
    else
    {
        LCD_DisplayString(100,140+7,16,"Close");
    }

总结

        这就是一套触摸屏数字键盘的模板了,我自己去网上找,一大堆没用的资料,不是收费就是啥,看的我很不舒服,我直接复刻,放在这里给需要的人使用。 

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于引用\[1\]和引用\[2\]的描述,STM32触摸屏密码锁是一种使用STM32微控制器和触摸屏技术实现的电子密码锁。它支持英文大写、英文小写和数字的密码输入,并且输入方式仿照手机键盘。该密码锁的硬件包括STM32F103ZET6微控制器和3.5寸触摸屏。该项目还处于初版阶段,尚有许多功能待完善。根据引用\[3\]的描述,该密码锁的硬件还包括一个继电器和一个电磁锁模块。为了适配开发板的IO口电压,可能需要手动焊接一个3.3V转为5V的电路板。通过给触摸屏初始化,用户可以在界面上看到密码锁的操作方式。 #### 引用[.reference_title] - *1* *2* [“药药切克闹”系列-基于STM32触摸屏的超级无敌智能电子密码锁(仿手机键盘26键设计,密码支持英文大写+...](https://blog.csdn.net/qq_63929192/article/details/126508838)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于stm32f103简易密码锁(二)](https://blog.csdn.net/weixin_46285130/article/details/122471590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值