79 lines
5.3 KiB
C
79 lines
5.3 KiB
C
/**********************************ADC V3.5a 说明 ************************************************************************
|
||
ADC模块用于“STC-B学习板”上与ADC相关电路:温度Rt、光照Rop、导航按键Nav、扩展接口EXT上的ADC转换。提供ADC模块初始化函数、2个应用函数,2个事件:
|
||
(1) AdcInit(char ADCsel):ADC模块初始化函数;
|
||
函数参数: ADCsel选择扩展接口EXT是否用作ADC功能,取值:
|
||
ADCincEXT : 含对扩展接口EXT设置ADC功能(EXT上P1.0、P1.1不可作数字IO功能使用)
|
||
ADCexpEXT : 不含对扩展接口EXT设置ADC功能(EXT上P1.0、P1.1可作数字IO功能使用)
|
||
(2) struct_ADC GetADC():获取ADC值。
|
||
函数参数:无
|
||
函数返回值:返回数据结构 struct_ADC。
|
||
数据结构定义:
|
||
typedef struct //ADC转换结果
|
||
{ unsigned int EXT_P10; // 扩展接口EXT上P1.0脚ADC(10bit)
|
||
unsigned int EXT_P11; // 扩展接口EXT上P1.1脚ADC(10bit)
|
||
unsigned int Rt; // 热敏电阻上ADC(10bit)
|
||
unsigned int Rop; // 光敏电阻上ADC(10bit)
|
||
unsigned int Nav; // 导航按键上ADC(10bit)
|
||
} struct_ADC;
|
||
|
||
说明1:每个数字表示 VCC/1024(单位:V),其中VCC为电路板供电电压(USB接口一般为5V左右)
|
||
说明2:对于导航按键,下面GetAdcNavAct函数输出消抖后导航按键事件和状态,更方便使用;
|
||
|
||
(3) char GetAdcNavAct(char Nav_button):获取导航按键(包含K3)状态
|
||
函数参数:Nav_button:指定要获取状态的导航按键。取值:
|
||
enumAdcNavKey3(K3键),
|
||
enumAdcNavKeyRight(右按),
|
||
enumAdcNavKeyDown(下按),
|
||
enumAdcNavKeyCenter(中心按)
|
||
enumAdcNavKeyLeft(左按),
|
||
enumAdcNavKeyUp(上按).
|
||
(当参数取值不在有效范围,函数将返回enumKeyFail)
|
||
函数返回值:返回当前按键事件,返回值:(同Key模块GetAdcKeyAct()返回值)
|
||
enumKeyNull(无按键动作),
|
||
enumKeyPress(按下),
|
||
enumKeyRelease(抬起),
|
||
enumKeyFail(失败)
|
||
返回值是经过多次检测按键实时状态和统计检测结果后(软件消抖)的有效事件。
|
||
每个按键查询一次后,事件值变成 enumKeyNull (仅查询一次有效)
|
||
(4) 导航按键事件“:enumEventNav
|
||
当导航按键5个方向或按键K3有任意”按下“或”抬起“动作时,将产生一个”导航按键事件“enumEventNav。响应导航按键事件的用户回调函数由用户编写,并由sys提供的SetEventCallBack()函数设置响应函数.
|
||
(5) 扩展接口EXT上P1.0、P1.1两个端口有新的AD值事件“:enumEventXADC
|
||
当ADC模块对P1.0、P1.1进行ADC转换,获得了它们新的ADC结果时,将产生enumEventXADC事件,通知用户进行处理。响应enumEventXADC事件的用户回调函数由用户编写,并有sys提供的SetEventCallBack()函数设置响应函数.
|
||
ADC模块对P1.0、P1.1进行ADC转换速度为3mS,也即每3mS或每秒钟333次转换.
|
||
(6) 补充说明:
|
||
a:对EXT上P1.0、P1.0的转换速度为3mS,也即每秒钟提供333次转换结果,提供了有新转换结果事件:enumEventXADC,方便用户处理
|
||
b:对于Rt、Rop,转换速度为9mS,也即每秒钟提供111次转换结果。没有提供相应“事件”,用户随时用函数GetAdcResult()查询和使用
|
||
c:对导航按键进行了软件消抖处理,最快可支持导航按键每秒12次操作速度,提供了导航按键发生了操作事件:enumEventNav
|
||
d:由于导航按键与K3键共用了单片机同一个端口(P1.7),启用ADC模块后,P1.7口IO功能失效,只能用GetAdcNavAct(char Nav_button)函数获取K3按键的事件或状态。
|
||
e: STC-B板上Rt型号为:10K/3950 NTC热敏电阻,光敏电阻Rop型号为:GL5516. 它们的ADC值与温度、光照强度关系请参阅它们的数据手册与STC-B电路图进行换算。
|
||
|
||
|
||
编写:徐成(电话18008400450) 2021年3月25日设计,2021年8月30日修改
|
||
*/
|
||
|
||
#ifndef _adc_H_
|
||
#define _adc_H_
|
||
|
||
#define ADCincEXT 0x9B
|
||
#define ADCexpEXT 0x98
|
||
|
||
typedef struct //ADC转换结果
|
||
{ unsigned int EXT_P10; // 扩展接口EXT上P1.0脚ADC
|
||
unsigned int EXT_P11; // 扩展接口EXT上P1.1脚ADC
|
||
unsigned int Rt; // 热敏电阻上ADC
|
||
unsigned int Rop; // 光敏电阻上ADC
|
||
unsigned int Nav; // 导航按键上ADC
|
||
} struct_ADC;
|
||
|
||
extern void AdcInit(char ADCsel);
|
||
|
||
extern struct_ADC GetADC();
|
||
extern unsigned char GetAdcNavAct(char Nav_button); //获取导航按键5个方向(右、下、中心、左、上)操作,以及按键K3操作的事件
|
||
//返回值:enuKeyNull(无按键动作),enuKeyPress(按下),enuKeyRelease(抬起),enuKeyFail(失败)
|
||
enum KN_name {enumAdcNavKey3=0, //导航按键:按键K3
|
||
enumAdcNavKeyRight, //导航按键:右
|
||
enumAdcNavKeyDown, //导航按键:下
|
||
enumAdcNavKeyCenter, //导航按键:中心
|
||
enumAdcNavKeyLeft, //导航按键:左
|
||
enumAdcNavKeyUp}; //导航按键:上
|
||
#endif |