Atmega16 Đếm Từ 0-9999 Hiển Thị Led 7 Thanh - CodeVision
Giới thiệu
Trong bài viết này mình sẽ viết chương trình đếm từ 0 đến 9999 bằng phương pháp quét LED sử dụng vdk Atmega16 với Phần mềm CodevisionAVR. Thay vì sử dụng nút nhấn thì mình sẽ dùng timer để cho đếm tự động từ 0 đến 9999.
Sơ đồ
Code
/******************************************************* Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *******************************************************/ #include <mega16.h> #include <delay.h> #define UP PIND.4 #define DN PIND.5 unsigned char flash Maled[10] = {0xc0,0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8 , 0x80, 0x90};unsigned int i;unsigned long dem;interrupt [TIM0_OVF] void timer0_ovf_isr(void){ TCNT0 = 130; // luu gia tri dem dem++;}void hienthi(unsigned int num){ unsigned int ng,tr,ch, dv; //tach num luu vao bien ng, tr, ch, dv ng = num/1000; tr = (num/100)%10; ch = (num/10)%10; dv = num%10; //hien thi led so 1 PORTD = 0x00; PORTD.2 = 1; PORTC = Maled[ng]; delay_ms(1); //hien thi led so 2 PORTD = 0x00; PORTD.3 = 1; PORTC = Maled[tr]; delay_ms(1); //hien thi led so 3 PORTD = 0x00; PORTD.4 = 1; PORTC = Maled[ch]; delay_ms(1); //hien thi led so 4 PORTD = 0x00; PORTD.5 = 1; PORTC = Maled[dv]; delay_ms(1);}void main(void){ DDRC = 0xff; // 1:out,0:in PORTC = 0xff; // 1:high,0:low DDRD = 0xff; PORTD = 0x00; 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") while (1) { if(dem>100)//100ms { i++; dem=0; if(i>9999)i=0; } hienthi(i); }}
Đăng nhận xét