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);  
          }
}

Demo



Nhận xét

Mới hơn Cũ hơn