/********************
* 头 文 件 配 置 区 *
********************/
# include "PF_Config.h"
# include "HD_Support.h"
# include "EX_Support.h"
/********************
* 系 统 宏 定 义 *
********************/
/*------------------*
* 常 数 宏 定 义 *
*------------------*/
/*------------------*
* 动 作 宏 定 义 *
*------------------*/
#define START_ADC ADCSRA |= (1<<ADSC); //启动一次AD转换
/********************
* 模块结构体定义区 *
********************/
/********************
* 函 数 声 明 区 *
********************/
void System_INIT(void);
void Insert_Timer0_OVF_ISR_Code(void);
/********************
* 模块函数声明区 *
********************/
static void Driver_INIT(void);
/********************
* 模块变量声明区 *
********************/
/********************
* 全局变量声明区 *
********************/
BOOL IfGotADCValue = True; //用于指示是否有ADC转换正在进行中的标志
/***********************************************************
* 函数说明:软件驱动初始化函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
static void Driver_INIT(void)
{
//*在这里插入你的各类软件驱动初始化代码*//
}
/***********************************************************
* 函数说明:系统初始化函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:Device_INIT() Driver_INIT() *
***********************************************************/
void System_INIT(void)
{
CLI();
Device_INIT();
Driver_INIT();
//*在这里插入你的系统环境变量初始化代码*//
SEI();
}
/***********************************************************
* 函数说明:定时器0中断处理程序代码插入函数 *
* 输入: 无 *
* 输出: 无 *
* 调用函数:无 *
***********************************************************/
void Insert_Timer0_OVF_ISR_Code (void)
{
TCNT0 = 0xB2; //重新加载定时器0
if (IfGotADCValue) //检查是否采样完成
{
IfGotADCValue = False; //设置标志信号
/***********************************************************
* 函数说明:ADC采样完成中断处理程序 *
* 输入: 无 *
* 输出: 无 *
***********************************************************/
void Insert_Adc_ISR_Code(void)
{
unsigned int ADCValue = ADC; //获取ADC10位精度的采样结果
unsigned char LoopCounter = 0,PORTValue = 0;
unsigned int Aver_Volt;
LoopCounter = ADCValue / 170; //转换为端口光柱显示
Aver_Volt = Aver_Voltage(ADCValue);
while(!(UCSR0A&(1<<UDRE0)));
UDR0 = 50*Aver_Volt/1024;
while(LoopCounter)
{
PORTValue |= 1<<(LoopCounter-1);
LoopCounter--;
}
PORTB = PORTValue ^ 0xFF; //由于端口上的LED在低电平时点亮,为了适应习惯
//在这里对端口数据做了反相的处理
IfGotADCValue = True; //设置采样完成标志
}
文章评论(0条评论)
登录后参与讨论