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