电路原理图如下:
单片机源码:
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
void delayms(uint mS) //微秒
{
uint i,j;
for( i=0;i<mS;i++)
for(j=0;j<200;j++);
}
unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
uint ADC_Value;
void port_init(void)
{
DDRD = 0xff;
PORTD= 0x00;
DDRE = 0xff;
PORTE= 0x00;
DDRF = 0x00;
PORTF= 0x00;
}
void adc_init(void)
{
ADMUX = 0x00;
ADCSRA= 0x00;
ACSR =1<<ACD;
ADMUX =(1<<REFS0);
ADCSRA=(1<<ADEN)|(0<<ADFR)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
}
uint ADC_read(void)
{
uint ADC_L,ADC_H,temp;
ADCSRA |= (1<<ADSC);
ADC_L = ADCL;
ADC_H = ADCH;
temp = (ADCH<<8)|ADC_L;
return temp;
}
uint convert(uint data)
{
long temp1;
uint temp2;
temp1 = ((500 * (long)data)>>10);
temp2 = (uint)temp1;
return temp2;
}
void main(void)
{
uint voltage;
uchar n;
port_init();
adc_init();
DDRA=0XFF;
PORTA=0XFF;
DDRC=0XFF;
PORTC=0X00;
DDRF|=0X0E;
PORTF|=0X0E;
PORTF&=0xF7;
PORTA=0X00;
DDRB |=0X10;
PORTB|=0X10;
while(1)
{
ADC_Value = ADC_read(); //读取AD寄存器中的数值
voltage = convert(ADC_Value); //计算实际的输入电
for(n=0;n<50;n++)
display(voltage); //显示
}
全部源码在附件中,以上只是部份源码
用带ADC单片机做的一款电压检测表源码.rar
(966 Bytes, 下载次数: 53)
用带ADC单片机做的一款电压检测表原理图.rar
(182.17 KB, 下载次数: 49)
|