📄 main.c
字号:
// main.c
#include "71x_lib.h"
u32 value,var;
u16 Conv_Res;
/*******************************************************************************
* 说明:ADC12_Calib函数,用于ADC12转换结果校准
* 参数:Conv_Res为转换结果,12位二进制补码
* 返回值:转换结果校准值,12位二进制无符号数
*******************************************************************************/
u16 ADC12_Calib(u16 Conv_Res) {
if ((Conv_Res & 0x800) == 0x800)
return (0x800 - (((~ Conv_Res)&0xFFF) +1));
else {
if ((Conv_Res & 0x800) == 0)
return (Conv_Res + 0x800);
else return 0;
}
}
/*******************************************************************************
* 说明:通用延时函数
* 参数:无
* 返回值:无
*******************************************************************************/
void Generic_Wait(u32 var) {
u32 i;
for( i=0;i<=var;i++);
}
/*******************************************************************************
* 主函数
*******************************************************************************/
int main (void) {
#ifdef DEBUG
debug();
#endif
GPIO_Config (GPIO1, 0x0001, GPIO_HI_AIN_TRI); // 配置模拟输入通道
GPIO_Config (GPIO1, 0x0100, GPIO_OUT_PP); // 配置P1.8引脚为输出
ADC12_Init(); // 初始化ADC寄存器
ADC12_PrescalerConfig(100); // 配置预定标器,采样率=100Hz
ADC12_ModeConfig (ADC12_SINGLE); // 选择转换方式=单通道
ADC12_ChannelSelect(ADC12_CHANNEL0); // 选择转换通道
ADC12_ConversionStart(); // 启动转换
while(1) {
while (ADC12_FlagStatus (ADC12_DA0)==RESET); // 查询标志,等待转换完毕
Conv_Res = ADC12_ConversionValue(ADC12_CHANNEL0); // 读取换结果
value=ADC12_Calib(Conv_Res); // 校准转换结果
if (!GPIO_BitRead(GPIO1,9)) {
GPIO_BitWrite(GPIO1,8,1); // 用电位器改变LED亮度
Generic_Wait(0xFFF-value ); // 实际上是通过电位器改变ADC输入电压
GPIO_BitWrite(GPIO1,8,0); // 再根据不同电压的A/D转换值来改变LED的闪动间隔
Generic_Wait(value);
}
else { // 压下BUT按键,LED开始闪动
do {
Generic_Wait(0xFFFF);
GPIO_BitWrite(GPIO1,8,~GPIO_BitRead(GPIO1, 8));
}
while(GPIO_BitRead(GPIO1, 9)==0);
GPIO_BitWrite(GPIO1,8,0); // 再次压下BUT按键,LED停止闪动
Generic_Wait(0x1FFFF);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -