浦江一水 发表于 2024-5-25 20:13:42

基于STC32G12K128实验箱V9.62_实验之ADC_16键输入

基于STC32G12K128实验箱V9.62_实验之ADC_16键输入


    本实验在《基于STC32G12K128实验箱V9.62_实验之数码管显示字符串》实验基础上,参照官方Demo实验16,增加ADC_16键输入实验。
    几点说明和体会。
    1,实验箱采用一个ADC模拟输入端口,实现16键输入,有新意,也有实用意义,是必须学习的。
    2,学习了STC32G的ADC转换编程, 加上了自己的简单按键判别的算法,返回不同的键值。
    3,实验程序开始运行,
         显示 “P-STC32G”
         按任意键……
         显示 “Ad000-00”
         当按下实验箱16键其中之一键时:
         数码管左边显示ADC转换结果数值(16进制显示),以便观察和体验ADC转换的稳定性;
         数码管右边显示键值数据(16进制显示),以便观察和体验不同的键值。

主程序

//********************************************************************************
// 名称: 实验8位数码管动态扫描显示 + ADC_16KEY 按键测试
// 基于: STC32G12K128 V9.62 实验箱(P10--ADC通道0)
// 实验: .../STC-USB-Link1D仿真器调试/GPIO基本输出控制/定时器x中断/ADC12位转换...
// 编程: 浦晓明(浦江一水) 2023-12-10
//********************************************************************************
#include "STC32G_SYS.H"
#include "LED8D.H"
#include "ADCK.H"

/*************全局变量说明 **************/
char S;   //显示字符串缓存
u8Kv;
extern u16 Kad;
//========================================================================
// 函数: 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数码管初始化
ADCK_Init();            //ADC键初始化
LED8D_Str(0,"P-StC32G"); //显示名称字串   
GETCH();                   //按任意键继续...
//主循环...
while(1)
{ Kv=0;                      //键值复0
    Kv=RDKEY();            //读ADC键
    sprintf(S,"AD%03X-%02X",Kad,Kv);    //显示ADC值和键值(16进制)
    LED8D_Str(0,S);      //送显示段码缓存   
    delay_ms(50);
}
}


其余源代码见工程文件包


页: [1]
查看完整版本: 基于STC32G12K128实验箱V9.62_实验之ADC_16键输入