浦江一水 发表于 2024-5-26 21:23:48

基于STC32G12K128实验箱V9.62_实验之行列矩阵8按键输入

基于STC32G12K128实验箱V9.62_实验之行列矩阵8按键输入


    本实验在《基于STC32G12K128实验箱V9.62_实验之数码管显示字符串》实验基础上,参照官方Demo实验15,增加2*4行列矩阵8键输入实验。
    几点说明和体会。
    1,实验箱布有2*4行列矩阵8键,本实验采用翻转算法实现8键输入
    2,实现短按和长按可读取不同键值,扩大实用功能。
    3,实验程序开始运行,
         显示 “P-STC32G”
         按任意键……
         显示 “H=00 A00”
         当按下实验箱8键其中之一键时:
         数码管显示“H=”后两位数是翻转扫描所得的原始键值(16进制表达);
         右边显示“A”后两位重新定义的键值(16进制表达): 短按8个键之一时,显示“10”..."17", 长按8个键之一时, 显示“20”..."27", 这样可实现8键16值。

主程序
主函数看着非常简单, 具体算法,有兴趣的坛友可看看工程文件包...

//********************************************************************************
// 名称: 实验2*4 行列矩阵8按键测试
// 基于: STC32G12K128 V9.62 实验箱 (X:P00-P03 Y:P06-P07)
// 实验: STC-USB-Link1D仿真器调试/GPIO基本输出控制/定时器x中断/ADC12位转换...
// 编程: 浦晓明(浦江一水) 2023-12-10
//********************************************************************************
#include "STC32G_SYS.H"
#include "LED8D.H"         //有关数码管显示函数头文件
#include "KEY8.H"             //有关

/*************全局变量说明 **************/
char S;   //显示字符串缓存
u8K;
extern u8 Kb;
//========================================================================
// 函数: voiddelay_ms(unsigned int ms)
// 描述: 毫秒级延时函数。
// 参数: ms,要延时的ms数,自动适应主时钟.
//=====================================================================
voiddelay_ms(unsigned int ms)
{ unsigned int i;
do{ i = MAIN_Fosc / 6000;
      while(--i);
    } while(--ms);
}
/**** 主函数入口 ************************/
void main(void)
{
SYS_Init();               //系统初始化
LED8D_Init();         //8数码管初始化
KEY8_Init();             //KEY8键初始化
LED8D_Str(0,"P-StC32G"); //显示名称字串   
GETCH();               //按任意键继续...
LED8D_Str(0,"H=00 A00");
//主循环...
while(1)
{ K=0;                  //键值复0
    K=RDKEY();            //读ADC键
    if(K!=0)   
    { sprintf(S,"H=%02X A%02d",Kb,K); //显示键值(16进制)
      LED8D_Str(0,S);      //送显示段码缓存   
    }
    delay_ms(50);
}
}
   
工程文件包:







页: [1]
查看完整版本: 基于STC32G12K128实验箱V9.62_实验之行列矩阵8按键输入