Nhấn INC tăng 1 đơn vị trên led.DEC giảm 1 đơn vị
Code:
#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock = 10000000)
#define LED_PORT PORTD
#define led_1 0b00001110
#define led_2 0b00001101
#define led_3 0b00001011
/*---------------------------------------------------------------------------------------------
Khai bao cac bien toan cuc
---------------------------------------------------------------------------------------------*/
const unsigned int digit[] = {0b00000000,0b00010000,0b00100000,0b00110000,0b01000000,
0b01010000,0b01100000,0b01110000,0b10000000,0b10010000};
int number,led_donvi_number,led_chuc_number,led_tram_number;
/*---------------------------------------------------------------------------------------------
Khai bao nguyen mau cac ham su dung
---------------------------------------------------------------------------------------------*/
void number_to_led_number(void);
void display(int led_i,int led_number);
void led_sweep(void);
/*---------------------------------------------------------------------------------------------
Chuong trinh chinh
---------------------------------------------------------------------------------------------*/
void main(void)
{
set_tris_B(0x03); // RB0 & RB1 la input
set_tris_D(0x00);
PORTD = 0x00;
while(true)
{
if(!bit_test(PORTB,0))
{
led_sweep(); // ~12ms
while(!bit_test(PORTB,0))
{
led_sweep();
}
led_sweep(); // ~12ms
number++;
number_to_led_number();
}
if(!bit_test(PORTB,1))
{
led_sweep(); // ~12ms
while(!bit_test(PORTB,1))
{
led_sweep();
}
led_sweep(); // ~12ms
number--;
number_to_led_number();
}
led_sweep();
}
}
/*---------------------------------------------------------------------------------------------
Ham chuyen tu number sang cac so tuong ung tren led
---------------------------------------------------------------------------------------------*/
void number_to_led_number(void)
{
led_donvi_number = number % 10;
led_chuc_number = (number / 10) % 10;
led_tram_number = number / 100;
}
/*---------------------------------------------------------------------------------------------
Ham hien thi so "number" len ledi
---------------------------------------------------------------------------------------------*/
void display(int led_i,int led_number)
{
LED_PORT = led_i|digit[led_number];
}
/*---------------------------------------------------------------------------------------------
Ham quet led
---------------------------------------------------------------------------------------------*/
void led_sweep(void)
{
int loop;
for(loop = 0;loop <= 3;loop ++)
{
display(led_1,led_tram_number);
delay_ms(1);
display(led_2,led_chuc_number);
delay_ms(1);
display(led_3,led_donvi_number);
delay_ms(1);
}
}