四极管:AD转换之 AVR自带AD转换
来源:互联网 发布:易格家具淘宝代购假货 编辑:程序博客网 时间:2024/05/21 17:32
四极管:AD转换驱动(ADC.c)
/******************************************************************** 函数功能:AVR自带AD转换 函数说明:参数adc_input选择通道 使用环境: 硬件: MCU: ATmega32L F_CPU = 16000000 外部:16000000 编译环境:WinAVR-20080610 显示说明: LCD1602显示 包含文件 :<util/delay.h> 日期:2009年7月19日 作者:杨琦 修改者: (日期: )*********************************************************************/#define ucharunsigned char#define uintunsigned int#define BIT(x)(1<<(x))#define NOP()asm("nop")#define WDR() asm("wdr")uchar const num_char[10]="0123456789";//端口初始化void port_init(void){PORTA = 0x00;DDRA = 0x00;}/*********************************************ADC多路复用器选择寄存器********************************************* ADMUX (ADC Multiplexer Select Register) bit7 bit6 REFS1 REFS0 参考电压选择 0 0 AREF,内部Vref关闭 0 1 AVCC,AREF引脚外加滤波电容 1 0 保留1 1 2.56V的片内基准电压源,AREF引脚外加滤波电容 bit5 ADC结果左对齐选择 1=左对齐 0=右对齐 bit4~0 选择32通道*********************************************ADC控制和状态寄存器*********************************************ADCSRA(ADC Control and Status Register A) bit7 ADEN ADC使能=1bit6 ADSC 启动ADC开始转换=1bit5 ADATE 自己触发使能bit4 ADIF ADC中断标志bit3 ADIE ADC中断时能bit2 ADC 预分频选择位 111=128时钟分频*//*********************************ADC初始化*********************************/void adc_init(void){ADCSRA=0x00;//ADC控制和状态寄存器:启动ADC开始转换ADMUX= 0x40; //ADC多路复用器选择寄存器:2.56V的片内基准电压源,AREF引脚外加滤波电容 左对齐SFIOR |= 0x00; //特殊功能I/O寄存器ADTS[2:0] = 000连续自由转换ACSR= 0x80; //禁止模拟比较器ADCSRA= 0xC7; //1100 0111,128分频}/*******************************************************ADC中断处理子函数****************************************************/void init_devices(void){cli(); //禁止所有中断MCUCR = 0x00;MCUCSR = 0x80;//禁止JTAGGICR = 0x00;port_init();adc_init();sei();//开全局中断}/***********************************跳水运动计分法处理AD转换值***************************************/uint16_t read_adc(uchar adc_input){ uint16_t adcMax,adcMin,adcSum,adcData,adcResult; adcMax = 0; adcMin = ~0; adcSum = 0; ADMUX = (0x40|adc_input); ADCSRA|= _BV(ADEN); //使能ADC _delay_ms(1); for(uint8_t i=0;i<8;i++) { ADCSRA |= _BV(ADSC); //启动AD转换 while((ADCSRA&0X10)==0); //等待AD转换结束 adcData = ADC; if(adcData>adcMax) adcMax = adcData; if(adcData<adcMin) adcMin = adcData;adcSum += adcData; ADCSRA |= _BV(ADIF); } adcResult = (adcSum-adcMax-adcMin)/(8-2); //去除第一次和最后一次值 ADCSRA = 0; return adcResult;}/*********************************************************显示处理子程序***********************************************************/void dis(uint d){ Displaychar(0,1,num_char[d/1000]); Displaychar(1,1,num_char[d%1000/100]); Displaychar(2,1,num_char[d%100/10]); Displaychar(3,1,num_char[d%10]); }
主函数
四极管:main.c
//包含所需头文件#include <avr/io.h>#include <1602driver.c>#include <util/delay.h>#include <avr/interrupt.h>#include<ADC.c>//主函数int main(void){ uint16_t v;init_devices();Init_1602();while(1) { v = read_adc(0); dis(v);_delay_ms(10); } return 0; }
其他文件在上文有说明,不在加上来了。
转载请注明出处。作者:四极管。广西师范大学 电子工程学院大学生科技创新基地 邮箱: yangxingbo-0311@163.com。
- 四极管:AD转换之 AVR自带AD转换
- 四极管:AD转换之AVR AD TLC 5510
- AVR 模数(AD)转换程序
- AD 转换
- AD转换
- AD转换
- PIC单片机之AD转换
- AVR单片机中ATmega8的AD转换探究
- CC2430 CC2530 AD转换分辨率之“争”
- k60之内部AD模块转换
- linux驱动入门之AD转换驱动
- CC2430 CC2530 AD转换分辨率之“争”
- k60之内部AD模块转换
- 51单片机AD转换之PCF8591
- 单片机笔记AD转换之PCF8591
- AD转换 ADC设计
- WINCE60 AD转换函数
- S3C2440 AD转换
- 四极管:温度监控之 AVR 18B20
- 第15周报告2 操作字符
- Forcing WPF to use a specific Windows theme
- 理解 Xwindow
- hdu 3631 Shortest Path
- 四极管:AD转换之 AVR自带AD转换
- Using JavaScript partitioning
- 打造可复用可扩展javascript验证表单脚本
- sgu 326 Perspective(最大流)
- 关于Tomcat错误java.lang.NoClassDefFoundError: javax/el/ExpressionFactory的问题
- IIS6.0 + php
- C# 等待Process结束再执行主线程
- 四极管:IIC驱动之 AVR ZLG7290
- 四极管: SPI之语音芯片ISD4004驱动