Led đơn-led 7 đoạn- button-interrupt

Sử dụng button và ngắt interrupt để điều khiển led đơn và led 7 đoạn (7 segments) .

Trong project này, chúng ta sử dụng chức năng interrupt trên portb để chọn giữa hai mode: 7 segment và led đơn. Khi mode Led đơn được chọn thì 8 led đơn sẽ chạy theo hiệu ứng dịch qua trái <-> phải cho đến khi một mode khác được chọn. Khi mode 7 Segment được chọn, các led đơn tắt, 3 digit 7 segment bắt đầu tăng từ 0. Các mode này được chọn thông qua 2 button.

Bạn có thể  xem thêm 2 bài viết sau để có thể thực hiện project này dễ dàng.

Code Project:
/*Chuong trinh thuc hanh hien thi led 7seg, chay den led va ngat ngoai
Ngay: 15/12/2010
Nguoi viet: Huynh Minh Trung
Website: giaoan.link
*/

unsigned short i,j,num,dv,chuc,dk,dataeeprom; // Khai bao bien

//Chuong trinh chuyen doi so thap phan sang led 7 doan
unsigned short mask(unsigned short num){
switch (num){
case 0: return 0xc0;
case 1: return 0xf9;
case 2: return 0xa4;
case 3: return 0xb0;
case 4: return 0x99;
case 5: return 0x92;
case 6: return 0x82;
case 7: return 0xf8;
case 8: return 0x80;
case 9: return 0x90;
}
}

///////Chuong trinh led 2 digit 7seg///////////////////////
void led7seg(){
for(i=0;i<=99;i++){
for(j=0;j<=20;j++){
PORTD=mask(i%10);
PORTE.F0=1;
delay_ms(10);
PORTE.F0=0;
PORTD=mask(i/10);
PORTE.F1=1;
delay_ms(10);
PORTE.F1=0;
}
if(PORTB.F1==0)
break; // nhay ra khoi chuong trinh dem led khi portb.f1 ==0
}
}

///////////////CHUONG TRINH CHAY 8 LED DON//////////////////
void chayled(){
for(;;){
PORTC=0X01;
delay_ms(500);
for(i=0;i<=7;i++){
PORTC = PORTC<<1 ;
if(PORTB.f0==0){ //dung cho nut bam 2 mode kiem tra portb.f0
PORTC=0x00;
break;
}
delay_ms(500);
}
PORTC=0X80;
delay_ms(500);
for(i=0;i<=7;i++){
PORTC= PORTC>>1;
if(PORTB.f0==0){
PORTC=0x00;
break;
}
delay_ms(500);
}
if(PORTB.f0==0){
PORTC=0x00;
break;
}
}
}

void main(){

///////////Khai bao bien///////////////////////
//OPTION_REG=0x00;
// TMR0=0;
INTCON=0x84;

TRISA=0X00;

TRISB=0xFF;

TRISD=0x00;
PORTD=0X00;

TRISC=0X00;
TRISE=0X00;
PORTE=0X00;

while(1){
if(PORTB.F1==0){ // neu portb.f1==0 ->cac led o porc nhay 5 lan
chayled();
}
if(PORTB.F0==0){ //neu portb.f0==0 -> dem 2 led7seg
led7seg();

}
} // ket thuc dong lap while
}

Tải project mikroc và proteus:



Nguồn: giaoan.link