Код: Выделить всё
#include <mega16.h>
#include <math.h>
#include <delay.h>
// Standard Input/Output functions
#include <stdio.h>
#define LOAD PORTC.1
#define DIN PORTC.2
#define DCLC PORTC.3
#define ADC_VREF_TYPE 0x00
void display(int a,int b,int c,int d)
{
int i,j,k;
int num[10][9]={{0,0,1,1,1,1,0,1,1} //0
,{0,0,1,1,0,0,0,0,0} //1
,{0,0,0,1,1,0,1,1,1} //2
,{0,0,1,1,1,0,1,0,1} //3
,{0,0,1,1,0,1,1,0,0} //4
,{0,0,1,0,1,1,1,0,1} //5
,{0,0,1,0,1,1,1,1,1} //6
,{0,0,1,1,1,0,0,0,0} //7
,{0,0,1,1,1,1,1,1,1} //8
,{0,0,1,1,1,1,1,0,1}};
LOAD=0;
delay_ms(1);
for(i=0;i<72;i++)
{
DIN=0; //ca?eaaai ana naaiaiou
delay_ms(1);
DCLC=0;
delay_ms(1);
DCLC=1;
delay_ms(1);
}
LOAD=1;
DCLC=0;
LOAD=0;
for(j=0;j<4;j++)
{
if (j==0) k=a;
if (j==1) k=b;
if (j==2) k=c;
if (j==3) k=d;
for(i=0;i<9;i++)
{
LOAD=0;
DCLC=0;
DIN=num[k][i];
DCLC=1;
LOAD=1;
}
}
}
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
unsigned int adc_data;
double r;
// Read the AD conversion result
adc_data=ADCW;
// Place your code here
ADCSRA|=0xC0;
delay_ms(100);
r=adc_data*(3480.0/1024.0);
printf("adc_data=%d",r);
/*
printf("a=%i\r",adc_data/1000);
printf("b=%i\r",(adc_data/100)%10);
printf("c=%i\r",(adc_data/10)%10);
printf("d=%i\r",adc_data%10); */
adc_data=adc_data*3480/1024;
//adc_data=adc_data/1000;
display(adc_data/1000,(adc_data/100)%10,(adc_data/10)%10,adc_data%10);
}