#include #include //包含延时函数头文件,如果你用的软件没有这个 //头文件,可以自己编写延时函数 #define uchar unsigned char #define uint unsigned int uint ad_data; //定义一个无符号整型变量 uchar qian,bai,shi,ge; //定义4个无符号字符型变量 uchar table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管显示段码 /********AD转换结果处理函数***********/ void chufa(void) { uint adc_v; //定义一个无符号整型变量adc_v adc_v=(unsigned long)ad_data*5000/1024; //数据处理 qian=adc_v/1000; adc_v=adc_v%1000; bai=adc_v/100; adc_v=adc_v%100; shi=adc_v/10; ge=adc_v%10; } /********显示函数*****************/ void xianshi(void) { PORTC=table[qian]&0x7f; //显示电压的个位值,同时点亮小数点 PORTA=0xf7; //点亮指定数码管 _delay_ms(10); //调用库里带的延时函数_delay_ms(),注意要包含头文件#include PORTA=0XFF; //关闭指定数码管 PORTC=table[bai]; //显示小数点后面第一位数据 PORTA=0xfb; _delay_ms(10); //调用库里带的延时函数_delay_ms() PORTA=0XFF; PORTC=table[shi]; //显示小数点后面第二位数据 PORTA=0xfd; _delay_ms(10); //调用库里带的延时函数_delay_ms() PORTA=0XFF; PORTC=table[ge]; //显示小数点后面第三位数据 PORTA=0xfe; _delay_ms(10); //调用库里带的延时函数_delay_ms() PORTA=0XFF; } /********读取AD转换结果*************/ uint ADC_Convert(void) { uint temp1,temp2; //定义两个无符号整型变量 temp1=ADCL; //读取AD转换结果的低8位 temp2=ADCH; //读取AD转换结果的高2位 temp2=(temp2<<8)|temp1; //将AD转换的高8位和低8位组合成一个10位数据 return(temp2); //将AD转换的10位结果返回给调用ADC_Convert()函数的变量 } //----------主程序------------------- int main(void) { DDRC=0XFF; //C口设置为输出 DDRA=0XFF; //A口设置为输出 DDRF&=0XFE; //设置端口PF0=ADC0为输入端口 ADMUX=0X40; //配置为内部AVCC参考电压,转化结果为右对齐,单通道adc0 ADCSRA=0XE0; //不允许产生中断 分频率2 while(1) { ad_data=ADC_Convert(); //读取ad转换结果 chufa(); //调用除法函数,处理AD转换结果 xianshi(); //调用显示函数 } }