1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #include <mega16.h> #include <delay.h>
flash char led_7[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; flash char position[4] = {0b00000000, 0b01000000, 0b00100000, 0b00010000};
unsigned char dis_buff[4] = {0, 0, 0, 0}; bit time_2ms_ok;
void adc_to_disbuffer(unsigned int adc) { char i; for (i = 0; i <= 3; i++) { dis_buff[i] = adc % 10; adc /= 10; } }
void display(void) { char i; for(i = 0;i < 4;i ++){ PORTC = led_7[dis_buff[i]]; if(i == 0){ PORTA.6 = 1; PORTD = 0; }else{ PORTD = position[i]; PORTA.6 = 0; } delay_ms(2); PORTC = 0xFF; PORTD = 0; } }
interrupt[TIM0_COMP] void timer0_comp_isr(void) { time_2ms_ok = 1; }
interrupt[ADC_INT] void adc_isr(void) { unsigned int adc_data, adc_v; adc_data = ADCW; adc_v = (unsigned long)adc_data * 5000 / 1024; adc_to_disbuffer(adc_v); }
void main(void) { PORTC = 0xFF; DDRC = 0xFF; PORTD = 0; PORTA.6 = 0; DDRD = 0b01110000; DDRA.6 = 1; TCCR0 = 0x0B; TCNT0 = 0x00; OCR0 = 0x7C; TIMSK = 0x02;
ADMUX = 0x40; SFIOR &= 0x1F; SFIOR |= 0x60; ADCSRA = 0xAD;
#asm("sei")
while (1) { if (time_2ms_ok) { display(); time_2ms_ok = 0; } } }
|