Các bạn xem giúp mình đoạn code và mô phỏng sau, và làm sao để led xuất liên tục chứ không nhấp nháy.Xin chỉ giúp
chưong trình:
Code:
/*******BAT DAU CHUONG TRINH************/
#INCLUDE <16F877A.H>
#INCLUDE <DEF_877A.H>
#DEFINE STOP PIN_B4
#DEFINE DKTH PIN_B5
#DEFINE DKNG PIN_B6
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20000000) //SU DUNG THACH ANH 20MHZ
#USE FAST_IO(A)
#USE FAST_IO(B)
#USE FAST_IO(D)
INT8 I,BCHUC,BDVI,VDVI,VCHUC;
INT8 SBUOC=0,A,SVONG=0;
INT8 R_KEY=0;
CONST UNSIGNED CHAR
DIG[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
CONST UNSIGNED CHAR ROTATE[]={14,12,13,9,11,3,7,6};
/*********************************************************
CHUONG TRINH DIEU KHIEN LED QUAY THUAN
SU DUNG LOAI DONG CO BUOC 48 RANG
DIEU KHIEN NUA BUOC
*/
//CHUONG TRINH NGAT RB
#INT_RB
VOID NGAT_RB()
{
IF(RBIF==1)
{
IF(INPUT(STOP)==0){A=0;}
IF(INPUT(DKTH)==0){A=1;}
IF(INPUT(DKNG)==0){A=2;}
}
RBIF=0;
}
//CHUONG TRINH DOI SO BUOC, SO VONG RA SO BCD
void HEX_BCD()
{
VCHUC=SVONG/10;
VDVI=SVONG%10;
BCHUC=SBUOC/10;
BDVI=SBUOC%10;
}
void HIENTHI1()
{
PORTC=DIG[BDVI]; //HIEN THI SO BUOC DON VI
PORTD=0X0F;
DELAY_US(100);
PORTD=0; //CHONG LEM
PORTC=DIG[BCHUC]; //HIEN THI SO BUOC CHUC
PORTD=0X17;
DELAY_US(100);
PORTD=0;
PORTC=0XBF; //HIEN THI DAU GACH PHAN CACH
PORTD=0X1B;
DELAY_US(100);
PORTD=0;
PORTC=DIG[VDVI]; //HIEN THI SO VONG DON VI
PORTD=0X1D;
DELAY_US(100);
PORTD=0;
PORTC=DIG[VCHUC]; //HIEN THI SO VONG CHUC
PORTD=0X1E;
DELAY_US(100);
PORTD=0;
}
void HIENTHI()
{
I=0;
SBUOC++;
IF(SBUOC>95){
SBUOC=0;
SVONG++;
IF(SVONG>99){SVONG=0;}
}
HEX_BCD();
WHILE(I<10)
{
HIENTHI1();
I++;
}
}
void QUAYTHUAN()
{
PORTA=ROTATE[R_KEY];
HIENTHI();
IF (R_KEY < 7){R_KEY++;}
ELSE R_KEY=0;
}
void QUAYNGICH()
{
PORTA=ROTATE[R_KEY];
HIENTHI();
IF (R_KEY > 0){R_KEY--;}
ELSE R_KEY=7;
}
void STP()
{
OUTPUT_A(0XFF);
HEX_BCD();
HIENTHI1();
}
VOID MAIN ()
{
SET_TRIS_A(0); // PORTA DIEU KHIEN DONG CO BUOC
SET_TRIS_B(0XFF); // PORTB LA PORT NHAP DU LIEU
SET_TRIS_C(0); // PORTC XUAT MA HIEN THI
SET_TRIS_D(0); // PORTD QUET LED
ENABLE_INTERRUPTS(GLOBAL); //CHO PHEP NGAT TOAN CUC
ENABLE_INTERRUPTS(INT_RB); //CHO PHEP NGAT RB
EXT_INT_EDGE(H_TO_L); //CHO PHEP NGAT CANH XUONG
A=0;
WHILE(true)
{
SWITCH(A)
{
CASE 0 : STP(); //NEU A=0 THI STOP
BREAK;
CASE 1 : QUAYTHUAN(); //NEU A=1 THI QUAY THUAN
BREAK;
CASE 2 : QUAYNGICH(); //NEU A=2 THI QUAY NGHICH
BREAK;
}
}
}
Em không gửi được file đính kèm hình ảnh,xin thông cảm