//A B C D E F G .
byte led7[] = {7, 6, 5, 4, 3, 2, 1, 0};
int maled[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // so2
int Led_Chuc = 12;
int Led_DV = 13;
int so;
int nut = 21;
void set_IT()
{
noInterrupts(); // disable interrupts while we setup
// reset Timer 1 configurations, default to interrupt on overflow
TCCR1A = 0;
TCCR1B = 0;
// set bits 0-2 to select the scalar value
// 001 = 1
// 010 = 8
// 011 = 64
// 100 = 256
// 101 = 1024
TCCR1B = (TCCR1B & B11111000) | B001; // Pre-scalar = 1024
// enable timer 1 overflow interrupt by setting bit 0 of TIMSK1
TIMSK1 |= 1;
interrupts(); // enable all interrupts
}
ISR(TIMER1_OVF_vect)
{
Quet_Led();
}
void setup()
{
set_IT();
pinMode(nut, INPUT_PULLUP); // Khai bao nut nhan la ngo vao
pinMode(Led_Chuc, OUTPUT); pinMode(Led_DV, OUTPUT);
digitalWrite(Led_Chuc, HIGH); digitalWrite(Led_DV, HIGH);
for (int i = 0; i < 8; i++)
{
pinMode(led7[i], OUTPUT);
digitalWrite(led7[i], HIGH);
}
so = 49;
}
void loop()
{
Quet_Nut();
}
void Quet_Led()
{
digitalWrite(Led_Chuc, HIGH); digitalWrite(Led_DV, LOW);
Hien(so/10); // chuc = so/10 chia lay phan nguyen
delay(10); OFF_data();
digitalWrite(Led_Chuc, LOW); digitalWrite(Led_DV, HIGH);
Hien(so%10); // chuc = so%10 chia lay phan du
delay(10); OFF_data();
}
void Quet_Nut()
{
if (digitalRead(nut)==0)
{
so++;
if (so > 99) {so = 0;}
while(digitalRead(nut)==0);
delay(100);
}
}
void Hien(int v)
{
for (int i = 0; i < 8; i++)
{
digitalWrite(led7[i], maled[v] & 0x01<<i);
}
}
void OFF_data()
{
for (int i = 0; i < 8; i++)
{
digitalWrite(led7[i], 0xFF & 0x01<<i);
}
}