按键

PIC16F883实现按键行列扫描,准确识别按键,数码管显示按键编号

倾然丶 夕夏残阳落幕 提交于 2020-12-23 19:25:01
控制芯片:PIC16F883 引脚图: 按键连接图: 四位数码管连接:四个共阴极分别连接PORTA<3:0>,8段数码管分别连接PORTC<7:0>,PORTB<4,2:0>分别连接按键的四个I/O引脚。 我在PORTC上连接了数码管,按键进行编号。按键时数码管会显示对应的编号。 简单说明: 我是改变PORTB引脚的设置(TRISB,PORTB),写了后立刻读取PORTB引脚的值,检查连接按键的引脚——值为0的引脚有按键按下。比如上图,PORTB<4,2,1,0>引脚全设置为输入时,读取PORTB寄存器的值。若我按下了S7,PORTB4就是0值(同理S8\S9\S10)。我们微机原理老师强调一定先检测S7\S8\S9\S10。我没试过先检测其他按键的情况,是按照老师的提示做的。下次更改设置:PORTB4设为输出低电位(0),其他三个引脚都设置为输入。读取PORTB<2,1,0>引脚的值,S5\S1\S2中某一按键被按下就可以在PORTB<2,1,0>对应的引脚检测到。就这样扫描所有按键,有按键按下就会调用按键处理程序。 实现代码如下: #include<p16f883.inc> udata_shr counter res 1 ;延时计数 counter0 res 1 ;延时计数 counter1 res 1 ;扫描按键变量 counter2 res 1 ;延时程序微调参数 key

STM32 按键扫描的方式实现,用队列传递参数

◇◆丶佛笑我妖孽 提交于 2020-03-25 13:29:21
3 月,跳不动了?>>> 开发环境是keil4.70a 实验板为神舟三号 STM32F103ZET6 软件上使用到了固件库了ucosii 纯粹为了学习,分享一下学习心得 首先上队列初始化的代码 OS_EVENT* KEY_Q; //按键记录的OS队列 void *key_list[80]; //队列定义时要求定义指针数组 /* 推荐在main中或者main.c类似的文件和位置创建这两个变量 */ KEY_Q = OSQCreate(key_list,80); /* 推荐在OSInit之后立马创建这个队列 */ //对了别忘了配置 //这些OS的功能使能 #define OS_Q_EN 1 /* Enable (1) or Disable (0) code generation for QUEUES */ #define OS_Q_ACCEPT_EN 1 /* Include code for OSQAccept() */ #define OS_Q_DEL_EN 1 /* Include code for OSQDel() */ #define OS_Q_FLUSH_EN 1 /* Include code for OSQFlush() */ #define OS_Q_PEND_ABORT_EN 1 /* Include code for OSQPendAbort() */