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