- 打卡等级:以坛为家II
- 打卡总天数:499
- 最近打卡:2025-05-07 08:08:50
荣誉版主
- 积分
- 3500
|
基于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[16]; //显示字符串缓存
u8 K;
extern u8 Kb;
//========================================================================
// 函数: void delay_ms(unsigned int ms)
// 描述: 毫秒级延时函数。
// 参数: ms,要延时的ms数,自动适应主时钟.
//=====================================================================
void delay_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);
}
}
工程文件包:
基于STC32G12K128实验箱V9.62_实验之行列矩阵8按键输入.rar
(39.12 KB, 下载次数: 36)
|
|