đây là code và mạch của em ạ khi em bật thì màn hình lcd hiển thị nhưng nháy đen liên tục các ace xem giúp em lỗi ở đâu ạ
code ạ
#INCLUDE <16F887.H>
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
#USE DELAY(CLOCK = 20M)
#INCLUDE <TV_LCD.C>
#DEFINE MODE PIN_B0
#DEFINE UP PIN_B1
#DEFINE DOWN PIN_B2
UNSIGNED INT8 GIO, PHUT, GIAY, BDT;
UNSIGNED INT8 GT;
#INT_TIMER1
VOID INTERRUPT_TIMER1()
{ SET_TIMER1 (59286);
BDT++;
}
Void LCD_HIENTHI()
{
LCD_COMMAND (0X84); LCD_DATA ("DONG HO");
LCD_COMMAND (0XC4); LCD_DATA (GIO/10 + 0X30);
LCD_DATA (GIO%10 + 0X30); LCD_DATA (":");
LCD_DATA (PHUT/10 + 0X30); LCD_DATA (PHUT%10 + 0X30);
LCD_DATA (":"); LCD_DATA (GIAY/10 + 0X30);
LCD_DATA (GIAY%10 + 0X30);
}
VOID LCD_NHAPNHAY()
{ IF (GT==1) { LCD_COMMAND (0XC4); LCD_DATA (" ");}
IF (GT==2) { LCD_COMMAND (0XC7); LCD_DATA (" ");}
IF (GT==3) { LCD_COMMAND (0XCA); LCD_DATA (" ");}
}
VOID BT_MODE()
{ IF (!INPUT (MODE))
{ DELAY_MS (20);
IF (!INPUT (MODE))
{ GT++;
IF (GT==4) GT=0;
}
WHILE (!INPUT(MODE));
}
}
VOID BT_UP()
{ IF (!INPUT (UP))
{ DELAY_MS (20);
IF (!INPUT (UP))
{ SWITCH (GT)
{
CASE 1: IF (GIO==23) GIO=0;
ELSE GIO++;
BREAK;
CASE 2: IF (PHUT==59) PHUT=0;
ELSE PHUT++;
BREAK;
CASE 3: IF (GIAY==59) GIAY=0;
ELSE GIAY++;
BREAK;
DEFAULT: BREAK;
}
}
WHILE (!INPUT (UP));
}
}
VOID BT_DOWN()
{ IF (!INPUT (DOWN))
{ DELAY_MS (20);
If (!INPUT (DOWN))
{ SWITCH (GT)
{ CASE 1: IF (GIO==0) GIO=23;
ELSE GIO--;
BREAK;
CASE 2: IF (PHUT==0) PHUT=59;
ELSE PHUT--;
BREAK;
CASE 3: IF (GIAY==0) GIAY=59;
ELSE GIAY--;
BREAK;
}
}
WHILE (!INPUT (DOWN));
}
}
VOID MAIN()
{ SET_TRIS_D (0X00);
LCD_SETUP();
GIAY=0;
PHUT=0;
GIO=0;
BDT=0;
LCD_HIENTHI();
SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_8);
Set_TIMER1 (59286);
ENABLE_INTERRUPTS (GLOBAL);
ENABLE_INTERRUPTS (INT_TIMER1);
wHILE (TRUE)
{
IF (BDT<100)
{ LCD_HIENTHI();
LCD_NHAPNHAY();
BT_MODE();
BT_UP();
BT_DOWN();
}
ELSE
{ BDT=BDT-100;
GIAY++;
IF (GIAY==60)
{ GIAY=0;
PHUT++;
IF (PHUT==60)
{ PHUT=0;
GIO++;
If (GIO==24) GIO=0;
}
}
}
}
}
code ạ
#INCLUDE <16F887.H>
#FUSES NOWDT, PUT, HS, NOPROTECT, NOLVP
#USE DELAY(CLOCK = 20M)
#INCLUDE <TV_LCD.C>
#DEFINE MODE PIN_B0
#DEFINE UP PIN_B1
#DEFINE DOWN PIN_B2
UNSIGNED INT8 GIO, PHUT, GIAY, BDT;
UNSIGNED INT8 GT;
#INT_TIMER1
VOID INTERRUPT_TIMER1()
{ SET_TIMER1 (59286);
BDT++;
}
Void LCD_HIENTHI()
{
LCD_COMMAND (0X84); LCD_DATA ("DONG HO");
LCD_COMMAND (0XC4); LCD_DATA (GIO/10 + 0X30);
LCD_DATA (GIO%10 + 0X30); LCD_DATA (":");
LCD_DATA (PHUT/10 + 0X30); LCD_DATA (PHUT%10 + 0X30);
LCD_DATA (":"); LCD_DATA (GIAY/10 + 0X30);
LCD_DATA (GIAY%10 + 0X30);
}
VOID LCD_NHAPNHAY()
{ IF (GT==1) { LCD_COMMAND (0XC4); LCD_DATA (" ");}
IF (GT==2) { LCD_COMMAND (0XC7); LCD_DATA (" ");}
IF (GT==3) { LCD_COMMAND (0XCA); LCD_DATA (" ");}
}
VOID BT_MODE()
{ IF (!INPUT (MODE))
{ DELAY_MS (20);
IF (!INPUT (MODE))
{ GT++;
IF (GT==4) GT=0;
}
WHILE (!INPUT(MODE));
}
}
VOID BT_UP()
{ IF (!INPUT (UP))
{ DELAY_MS (20);
IF (!INPUT (UP))
{ SWITCH (GT)
{
CASE 1: IF (GIO==23) GIO=0;
ELSE GIO++;
BREAK;
CASE 2: IF (PHUT==59) PHUT=0;
ELSE PHUT++;
BREAK;
CASE 3: IF (GIAY==59) GIAY=0;
ELSE GIAY++;
BREAK;
DEFAULT: BREAK;
}
}
WHILE (!INPUT (UP));
}
}
VOID BT_DOWN()
{ IF (!INPUT (DOWN))
{ DELAY_MS (20);
If (!INPUT (DOWN))
{ SWITCH (GT)
{ CASE 1: IF (GIO==0) GIO=23;
ELSE GIO--;
BREAK;
CASE 2: IF (PHUT==0) PHUT=59;
ELSE PHUT--;
BREAK;
CASE 3: IF (GIAY==0) GIAY=59;
ELSE GIAY--;
BREAK;
}
}
WHILE (!INPUT (DOWN));
}
}
VOID MAIN()
{ SET_TRIS_D (0X00);
LCD_SETUP();
GIAY=0;
PHUT=0;
GIO=0;
BDT=0;
LCD_HIENTHI();
SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_8);
Set_TIMER1 (59286);
ENABLE_INTERRUPTS (GLOBAL);
ENABLE_INTERRUPTS (INT_TIMER1);
wHILE (TRUE)
{
IF (BDT<100)
{ LCD_HIENTHI();
LCD_NHAPNHAY();
BT_MODE();
BT_UP();
BT_DOWN();
}
ELSE
{ BDT=BDT-100;
GIAY++;
IF (GIAY==60)
{ GIAY=0;
PHUT++;
IF (PHUT==60)
{ PHUT=0;
GIO++;
If (GIO==24) GIO=0;
}
}
}
}
}