電路原理圖如下:
單片機源碼:
#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寄存器中的數(shù)值
voltage = convert(ADC_Value); //計算實際的輸入電
for(n=0;n<50;n++)
display(voltage); //顯示
}
全部源碼在附件中,以上只是部份源碼
用帶ADC單片機做的一款電壓檢測表源碼.rar
(966 Bytes, 下載次數(shù): 53)
2018-12-7 20:12 上傳
點擊文件名下載附件
用帶ADC單片機做的一款電壓檢測表原理圖.rar
(182.17 KB, 下載次數(shù): 49)
2018-12-7 20:09 上傳
點擊文件名下載附件
|