⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adctest

📁 mega16L的AD转换程序,希望大家喜欢
💻
字号:
//用mega16L测量电压值

//程序如下:

#include<io.h>
#include<mega16.h>
#include<delay.h> 
#define ADC_VREF_TYPE 0x00 
#define AD_SE_ADC0 0x00      //ADC0

unsigned char Table[10] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};       //数码管字型0~9
unsigned char Data[4] = {0,0,0,0};      //存放A/D转换结果

void Display(unsigned char p[])   //动态显示,间隔5ms显示
{
unsigned char i,sel=0x01;
for(i=0;i<4;i++)
   {
    PORTD=~sel;
    PORTB=Table[p[i]];
    delay_ms(5);
    sel=sel<<1;
   }
}
  
  
unsigned int read_adc(unsigned char adc_input)    //读取A/D转换结果
{
ADMUX=adc_input|ADC_VREF_TYPE;
ADCSRA|=0x40;                                    //启动A/D转换
while ((ADCSRA & 0x10)==0);                      //等待A/D转换完成
ADCSRA|=0x10;
return ADCW;
}
void Process(unsigned int i,unsigned char *p)     //数据处理函数
{
p[0]=i/1000;
i=i%1000;
p[1]=i/100;
i=i%100;
p[2]=i/10;
i=i%10;
p[3]=i;
}

void main(void)
{
unsigned long int i;
unsigned long int j=5000;       
unsigned long int k=1024;
DDRA=0x00;                     //设置A口为不带上拉输入;
PORTA=0x00;
DDRB=0xff;                     //设置B口为输出口;
DDRD=0xff;                     //设置D口为输出口;
PORTB=0xff;                    //B口初始化输出0 ;D口初始化输出1;点亮全部数码管;
PORTD=0x00;
ADMUX=ADC_VREF_TYPE;           //选择第一通道ADC0;
ADCSRA=0xA6;                   //125k转换速率,自由转换模式;启动A/D转换;
delay_ms(1000);                //延时待系统稳定;
while(1)
{
   i=read_adc(AD_SE_ADC0);       //获取A/D转换数据
   i=(i*j)/k;
   Process(i,Data);              //数据处理              
   Display(Data);                //显示结果
   delay_ms(5);

}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -