adc.h
- #ifndef __ADC_H_
- #define __ADC_H_
- #include “define.h”
- //ADC通道号定义
- #define ADC_Channel0 (unsigned char)0x00
- #define ADC_Channel1 (unsigned char)0x01
- #define ADC_Channel2 (unsigned char)0x02
- #define ADC_Channel3 (unsigned char)0x03
- #define ADC_Channel4 (unsigned char)0x04
- #define ADC_Channel5 (unsigned char)0x05
- #define ADC_Channel6 (unsigned char)0x06
- #define ADC_Channel7 (unsigned char)0x07
- #define ENB 1
- extern void adc_init(uint8 mode);
- extern void adc_switch(uint8 channel);
- extern void adc_mode_scan(uint8 value);
- extern void read_adc(uint8 channel);
- #endif
adc.c
- #include “adc.h”
- #include “uart.h”
- //*****************************
- //函数名称:adc_init
- //函数功能:对ADC初始化,开启或关闭ADC电路
- //入口参数:ADC电路使能参数
- //出口参数:无
- //*****************************
- void adc_init(uint8 mode)
- {
- uint16 i;
- if(mode == ENB) //启动ADC电路
- {
- //F/4转换时间分频 Fadc = Fmaster/ADC_CR1[4..6]
- //[000 F/2] [001 F/3] [010 F/4]
- ADC_CR1 = (ADC_CR1&0x8f)|0x00; //f/2
- //数据左对齐
- ADC_CR2 &= ~0x08;
- //启动ADC
- ADC_CR1 |= 0x01;
- //等待ADC电路稳定
- for(i=0; i<500; i++)
- ;
- ADC_CSR &= ~0x80; //转换结束标志清0
- return;
- }
- else
- {
- ADC_CR1 &= ~0x01; //关闭ADC电路
- return;
- }
- }
- //********************************
- //函数名称:adc_switch
- //函数功能:在单通道模式下转换某一通道的ADC值
- // 在(扫描模式下)连续转换1-Channel的ADC值
- //入口参数:要转换的ADC通道号
- //出口参数:无
- //********************************
- void adc_switch(uint8 channel)
- {
- //选择转换通道
- ADC_CSR = (ADC_CSR&0xf0)|channel;
- //启动ADC
- ADC_CR1 |= 0x01;
- //等待转换
- while(!(ADC_CSR&0x80))
- ;
- ADC_CSR &= ~0x80;
- return;
- }
- //********************************
- //函数名称:adc_mode_scan
- //函数功能:ADC扫描模式设置函数
- //入口函数:扫描模式开启函数
- //出口参数:无
- //********************************
- void adc_mode_scan(uint8 value)
- {
- if(value==ENB)
- {
- ADC_CR2 |= 0x02;
- }
- else
- {
- ADC_CR2 &= ~0x02;
- }
- }
- void read_adc(uint8 channel)
- {
- unsigned char tmpH, tmpL;
- uint8 temp;
- adc_switch(channel);
- tmpH = ADC_DRH;
- tmpL = ADC_DRL;
- temp = tmpH;
- temp *= 50;
- temp /= 256;
- //uart1_send_byte(tmpH);
- //uart1_send_byte(tmpL);
- uart1_send_byte(temp);
- }
在主函数里直接调用 read_adc(channel)