Hỏi về cách cho led ngắt sau 1 time nhất định với (PICC)

em muốn cho led tắt sau 1 thời gian bật thì làm sao ạ
em đặt giờ cho led sáng xong nó sáng mãi mà ko tắt ấy ạ

#include <main.h>
int16 Dem=0;
int8 Giay=0;

//-----------------------------------------------------------------------------
char Option=0;
//-----------------------------------------------------------------------------
//!void _HienThi(unsigned char Chuoi[]);
//-----------------------------------------------------------------------------

#INT_EXT 
void _NgatNgoai(void)
{
   Option=Option+1;
   if(Option>3)   
   {
      Option=0;
   }
   delay_ms(200);
}
//--------------------------------------------------------------------------

//-----------------------------------------------------------------------------
void main()
{
   //khai bao bien cuc bo o day
   unsigned char* pTimeArray;
//!   unsigned char* pDateArray;
   signed char Gio=22,Phut=5,Giay=10;
   
   
   lcd_init();
   lcd_putc('\f');  
   
   enable_interrupts(INT_EXT);
   enable_interrupts(INT_EXT_H2L);
   enable_interrupts(GLOBAL);
   
   output_bit(LED_DON,0);

   while(1)
   {
      lcd_clear();   
      while(Option==0)
      {
         pTimeArray =  Get_DS1307_RTC_Time();
         lcd_line_1();
         printf(lcd_putc,"%02d:%02d:%02d",pTimeArray[2],pTimeArray[1],pTimeArray[0]);
//!         switch(pTimeArray[3])
//!         {
//!            case AM_Time:   printf(lcd_putc,"AM");   break;
//!            case PM_Time:   printf(lcd_putc,"PM");   break;   
//!            default: lcd_putc('H');   break;               
//!         }      
         
         lcd_line_2();
         printf(lcd_putc,"H.GIO:%02d:%02d:%02d",Gio,Phut,Giay);
         
         if(pTimeArray[2]==Gio && pTimeArray[1]==Phut && pTimeArray[0]==Giay)
         {
            output_bit(LED_DON,1);         
              }
//!         else
//!         {
//!            output_bit(LED_DON,1);         
//!         }
         
   //!      pDateArray = Get_DS1307_RTC_Date();
   //!      lcd_gotoxy(1,2);
   //!      printf(lcd_putc,"%02d-%02d-%02d ",pDateArray[1],pDateArray[2],pDateArray[3]);
         
   //!      switch(pDateArray[0])
   //!      {
   //!         case Monday:   printf(lcd_putc,"MON");   break;
   //!         case Tuesday:   printf(lcd_putc,"TUE");   break;
   //!         case Wednesday:   printf(lcd_putc,"WED");   break;
   //!         case Thursday:   printf(lcd_putc,"THU");   break;
   //!         case Friday:   printf(lcd_putc,"FRI");   break;
   //!         case Saturday:   printf(lcd_putc,"SAT");   break;
   //!         case Sunday:   printf(lcd_putc,"SUN");   break;      
   //!         default: printf(lcd_putc,"???");   break;
   //!      }     
         delay_ms(200);//chong giat man hinh
      }

1,Trong code không có chỗ nào để set output về 0 thì làm sao tắt ?
2, Không dùng delay trong ngắt. Dễ dính stackoverflow.

1 Like

cho delay vào chỗ nào z anh

Trong ngắt sẽ không dùng delay.
Mục đích dùng delay của bạn là gì thì mới biết nên đặt nó vào đâu.

1 Like

vd như vầy á a

{
      output_bit(LED_DON,0)
      _Delay(10)
}

em dùng báo thức hẹn giờ bật ấy anh
em muốn đến h bật thì nó tự động bật trong 10s rồi tắt ạ

hic em thắc mắc mấy ngày nay mà ko ra

Led không tắt vì không có đoạn nào để tắt cả. Còn muốn tắt ở chỗ nào thì cho dòng output 0 vào chỗ đó.

Bạn sẽ có 1 biến đếm thời gian. Khi bật led lên thì bắt đầu đếm. Để khi nào đủ 10s thì tắt. Dùng trong while true cũng được. Dùng trong ngắt time sẽ chính xác hơn.

1 Like

z h muốn cho nó tắt sau khoảng thời gian thì làm thế nào vậy ạ

em dùng if dc ko ạ
kiểu if led sáng trong 10s rồi tắt đó ạ

Có thể như này:

if(LED==1){
    Dem+=1;
    If(Dem>=giatrituongung10s){
        LED=0;
        Dem=0;
    }
}

Đoạn này nằm trong while của main.

1 Like

em thử mà nó báo lỗi ấy ạ

Viết sai lệnh rồi kìa.

1 Like

Nó báo sai đây này :

1 Like

Phím T với phím P có gần nhau đâu mà nhấn nhầm được nhỉ?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?