Ðề tài: động cơ bước
View Single Post
Old 24-10-2009, 12:41 PM   #1
lehongviet
Nhập môn đệ tử
 
Tham gia ngày: Sep 2009
Bài gửi: 2
:
động cơ bước

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

thay đổi nội dung bởi: phamminhtuan, 04-12-2009 lúc 08:25 AM. Lý do: Định dạng code
lehongviet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn