|
现在做了一个AD转换用Proteus仿真时就OK,但做硬件时出错!请指教!
#include
#include
#include "delay.h"
#define Led_1 0b11111110
#define Led_2 0b11111101
#define Led_3 0b11111011
#define Led_4 0b11110111
const unsigned char DisTab[]=
{
0xFC,0x60,0xDA,0xF2,0x66, //0,1,2,3,4
0xB6,0xBE,0xE0,0xFE,0xF6, //5,6,7,8,9
0xEE,0x3E,0x9C,0x7A,0x9E, //A,b,C,d,E
0x8E,0xCE,0x1C,0x6E,0x7C, //F,P,L,H,U
0x0A,0x10,0x02 //r,_,-
};
void show_led(unsigned int ddd)
{
unsigned int a,b,c,d;
a=ddd/1000; //第一位
b=(ddd-(ddd/1000*1000))/100; //第二位
c=(ddd-(a*1000+b*100))/10; //第三位
d=ddd-(a*1000+b*100+c*10); //第四位
PORTB=Led_1;
PORTD=DisTab[a];
Delay_ms(1);
PORTB=Led_2;
PORTD=DisTab;
Delay_ms(1);
PORTB=Led_3;
PORTD=DisTab[c];
Delay_ms(1);
PORTB=Led_4;
PORTD=DisTab[d];
Delay_ms(1);
}
void port_init()
{
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0xFF;
}
void main (void)
{
unsigned int Ddata;
port_init();
ADMUX = 0xC0;
while(1)
{
ADCSRA=0XC0;
while(!(ADCSR&(1<<(ADIF))));
Ddata=ADCL;
Ddata+=ADCH*256;
Ddata=(unsigned int)(((float)Ddata)*2560/1023);
show_led(Ddata);
Delay_ms(10);
}
|
|