📄 keyscan.c
字号:
#include "config.h"
unsigned char ksp=0;
const unsigned long keyscan1=(1<<10); // P0.10键盘扫描输出1
const unsigned long keyscan2=(1<<11); // P0.11键盘扫描输出2
const unsigned long keyscan3=(1<<12); // P0.12键盘扫描输出3
const unsigned long keyscan4=(1<<13); // P0.13键盘扫描输出4
const unsigned long keyscan[4]={keyscan1,keyscan2,keyscan3,keyscan4};
const unsigned long keyin1=(1<<16); // P0.16键盘扫描输入1
const unsigned long keyin2=(1<<14); // P0.14键盘扫描输入2
const unsigned long keyin3=(1<<15); // P0.15键盘扫描输入3
const unsigned long keyin4=(1<<9); // P0.9键盘扫描输入4
unsigned long err;
extern OS_EVENT *dispsem;
unsigned long key_scan(void)
{
unsigned long k=0;
// 设置扫描输出脚为高电平 //
IO0SET |= keyscan1|keyscan2|keyscan3|keyscan4;
IO0CLR |= keyscan[ksp]; // 轮流使扫描线变低电平 //
__nop(); // 等待IO口稳定 //
__nop();
__nop();
// 读取keyin IO口 //
k = IO0PIN&(keyin1|keyin2|keyin3|keyin4);
// 判断是否有按键按下 //
k|=0x80000000;
if(k!=keyin1+keyin2+keyin3+keyin4+0x80000000)
{
err = OSSemPost(dispsem);
if((k&keyin1)==0)k=0;
else if((k&keyin2)==0)k=4;
else if((k&keyin3)==0)k=8;
else if((k&keyin4)==0)k=12;
else k=17;
}
k+=ksp;
ksp++;
if(ksp==4)ksp=0;
return k;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -