AVR Sử Dụng Timer Đếm Thời Gian Hiển Thị LED 7 Thanh

AVR Sử Dụng Timer Đếm Thời Gian Hiển Thị LED 7 Thanh

Sơ đồ

Code

#include <mega16.h>
#include <delay.h>
volatile unsigned long dem;
unsigned char flash Maled[10] = {0xc0,0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8 , 0x80, 0x90};
unsigned char i;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    TCNT0 = 130; // luu gia tri dem
    dem++;
}

void hienthi(unsigned int num)
{
     unsigned int ch , dv;
     //tach num luu vao bien ch va dv
     dv= num%10;  //ex: 15%10=5
     ch = num/10; //ex: 15/10=1

     //hien thi led so 1
     PORTD.3 = 0;
     PORTD.2 = 1;
     PORTC = Maled[ch];
     delay_ms(1); 

     //hien thi led so 2 
     PORTD.2 = 0;
     PORTD.3 = 1;
     PORTC = Maled[dv];
     delay_ms(1); 
}
void main(void)
{
    DDRC = 0xff; // output
    PORTC = 0x00; // Low level

    DDRD = (1<<DDD2)|(1<<DDD3); // output
    PORTD = (0<<PORTD2)|(0<<PORTD3); // Low level

    TCCR0 = (1<<CS01)|(1<<CS00); //prescaler = 64
    TCNT0 = 130; // x= 0.001 * 8000000 / 64 = 125
                 // TCNT0  = 255 - 125 = 130 
    TIMSK |= (1<<TOIE0); // mode Normal, cho phép ngat

    #asm ("sei")
    i=55;
    while (1)
      {
            hienthi(i); 
            if(dem>=1000)
            {
                dem=0;
                i++;
                if(i>59)i=0;
                hienthi(i);               
            }        
      }
}

Demo

Nhận xét

Mới hơn Cũ hơn