OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4567|回复: 4

使用4x4矩阵键盘设定温度等数据

[复制链接]

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-3-14
在线时间
10 小时
发表于 2020-3-29 15:51:26 | 显示全部楼层 |阅读模式
1金钱
   新手想用矩阵键盘来给32输入一个数据,比如按下一个键(假定是温度设置键),然后输入温度,比如50度,我参考着写了一个矩阵按键的读取程序,现在知道按下的是哪一个键(定义了一个unsigned char k_num,k_num【0-15】就是S0-S15),但是不知道怎么把键值储存起来,比如按下温度键后,怎么把接下来输入的“5”“0”,接起来变成“50”。主程序想要这个数值来进行下一步的操作

键盘原理图

键盘原理图

KEY.rar

10.71 KB, 下载次数: 33

包含.c.h文件

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

52

主题

160

帖子

0

精华

高级会员

Rank: 4

积分
725
金钱
725
注册时间
2019-6-27
在线时间
153 小时
发表于 2020-3-30 19:54:07 | 显示全部楼层
定义俩个变量啊,比如第一个是a,第二个是b。用a*10+b不就是50了吗
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-3-14
在线时间
10 小时
 楼主| 发表于 2020-3-31 21:00:19 | 显示全部楼层
冷风2699 发表于 2020-3-30 19:54
定义俩个变量啊,比如第一个是a,第二个是b。用a*10+b不就是50了吗

是的,我现在就是这样做的,现在问题是按键按下,需要在0.5秒(时间可设置)内按下下一个键,不然可能检测不到下一个按键,程序直接跳过了,不知道怎么解决这个问题,你看下我的程序,我不知道怎么改了
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-3-14
在线时间
10 小时
 楼主| 发表于 2020-3-31 21:07:13 | 显示全部楼层
冷风2699 发表于 2020-3-30 19:54
定义俩个变量啊,比如第一个是a,第二个是b。用a*10+b不就是50了吗

                //key data==65.66,67是我随便设置的,当做标志即可
while(key_data != 67){//按键不等于取消
        if(key_data == 65)mode=0;//按键是温度键,mode==0温度模式
                if(mode==0){
                        delay_ms(1000);//延时1s
     if(flag==1 && key_data!=65){//flag==1表示key data有按下
                                        key1[0]=key_data;
                                        flag=0;//去除按下的标志
                                        delay_ms(500);}//在500ms内按下按键就可以进行下一步
    else if(flag==1){//如果没有按下这一步会判定失败
                key1[1]=key_data;
                                        flag=0;}
                }
                if(key_data == 66)mode=1;//水量模式
                        if(mode==1){
                                delay_ms(1000);//同上
     if(flag==1 && key_data!=66){
                                        key2[0]=key_data;
                                        flag=0;
                                        delay_ms(500);}
    else if(flag==1){
                key2[1]=key_data;
                                        flag=0;
                      delay_ms(500);}
    else if(flag==1){
                key2[2]=key_data;
                                        flag=0;}
               }
     }
           set_temp=key1[0]*10+key1[1];//温度
                 set_vol=key2[0]*100+ key2[1]*10+key2[2];//水量
                 
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-3-14
在线时间
10 小时
 楼主| 发表于 2020-3-31 21:11:28 | 显示全部楼层
如果我没有在delay结束之前按下按键,感觉else if语句可能会判定失败而直接跳过,有什么解决办法吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 14:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表