Mình đang làm đồ án.
Đồ án mình là lập trình vxl 2 kênh, kênh 1 làm đặt giờ đến ngược báo thức; kênh 2 là đồng hồ bấm giờ, set 5 giá trị hiện thì ra LCD 16x2.
Mình đã mô phỏng và code hoàn tất, nhưng khi lắp testboard thì gặp lỗi này (https://www.youtube.com/watch?v=AXaB...ature=youtu.be), led cứ nháy liên tục, mình nghỉ là do hàm quét led của mình có vẫn đề.
Mong mọi người giúp mình cách tính thời gian quét led đi ạ.
Có file mô phỏng và code.hex đính kèm.
Đồ án mình là lập trình vxl 2 kênh, kênh 1 làm đặt giờ đến ngược báo thức; kênh 2 là đồng hồ bấm giờ, set 5 giá trị hiện thì ra LCD 16x2.
Mình đã mô phỏng và code hoàn tất, nhưng khi lắp testboard thì gặp lỗi này (https://www.youtube.com/watch?v=AXaB...ature=youtu.be), led cứ nháy liên tục, mình nghỉ là do hàm quét led của mình có vẫn đề.
Mong mọi người giúp mình cách tính thời gian quét led đi ạ.
Có file mô phỏng và code.hex đính kèm.
Code:
#include <AT89X52.H>
#define UP_STOP P0_4
#define DOW_SET P0_5
#define MOD_START P0_3
#define RS P0_0
#define RW P0_1
#define E P0_2
#define DATA_LCD P2
#define LOA P0_6
signed int GIO,PHUT,GIAY,KHAC;
unsigned char BDN,X,Y,BMOD,DAUCHAMS,DAUCHAMM,DAUCHAMH;
unsigned char MADVS,MACHS,MADVM,MACHM,MADVH,MACHH,MADVK,MACHK;
unsigned char MADVS1,MACHS1,MADVM1,MACHM1,MADVH1,MACHH1,MADVK1,MACHK1;
unsigned int DEM,DEM1,TAM,TAM1=0;
const unsigned char MA7D[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
// TIMER NGAT
void ngat_T0()interrupt 1 using 1
{ BDN++; TL0=DEM; TH0= DEM>>8;}
// HAM DELAY
void delay(unsigned int x)
{
unsigned int y;
for(y=0;y<x;y++){}
}
/* XU LY LED 7 DOAN */
// HIEN THI 7 SEG
void ht_7seg()
{
{
if(P0_7==0)
{
P3=MADVK; P1_7=0; delay(100); P1_7=1;
P3=MACHK; P1_6=0; delay(100); P1_6=1;
}
P3=MADVS; P1_5=0; delay(100); P1_5=1;
P3=MACHS; P1_4=0; delay(100); P1_4=1;
P3=MADVM; P1_3=0; delay(100); P1_3=1;
P3=MACHM; P1_2=0; delay(100); P1_2=1;
P3=MADVH; P1_1=0; delay(100); P1_1=1;
P3=MACHH; P1_0=0; delay(100); P1_0=1;
}
}
// GIAI MA 7SEG
void gm_7seg()
{
if(P0_7==0)
{
X=KHAC%10;
Y=KHAC/10;
MADVK=MA7D[X];
MACHK=MA7D[Y];
}
X=GIAY%10;
Y=GIAY/10;
MADVS=MA7D[X];
MACHS=MA7D[Y];
X=PHUT%10;
Y=PHUT/10;
MADVM=MA7D[X];
MACHM=MA7D[Y];
X=GIO%10;
Y=GIO/10;
MADVH=MA7D[X];
MACHH=MA7D[Y];
MADVS=MADVS & DAUCHAMS;
MADVM=MADVM & DAUCHAMM;
MADVH=MADVH & DAUCHAMH;
}
/* XU LY LCD */
// HAM GHI LCD
void ghiLCD(bit chonRS,unsigned char DL_LCD)
{
DATA_LCD =DL_LCD;
RS=chonRS;
RW=0;
E=1;
E=0;
delay(1);
}
//HAM GHI CHUOI KI TU
void ghichuoi(char *chuoi)
{
while(*chuoi) ghiLCD(1,*chuoi++);
}
//HAM GIAI MA LCD
void gm_lcd()
{
MADVK=(KHAC%10)+0X30;
MACHK=(KHAC/10)+0X30;
MADVS=(GIAY%10)+0X30;
MACHS=(GIAY/10)+0X30;
MADVM=(PHUT%10)+0X30;
MACHM=(PHUT/10)+0X30;
MADVH=(GIO%10)+0X30;
MACHH=(GIO/10)+0X30;
MADVK1=MADVK;
MACHK1=MACHK;
MADVS1=MADVS;
MACHS1=MACHS;
MADVM1=MADVM;
MACHM1=MACHM;
MADVH1=MADVH;
MACHH1=MACHH;
}
// HAM SETUP LCD
void setup_lcd()
{
ghiLCD(0,0X38);
ghiLCD(0,0X38);
ghiLCD(0,0X38);
ghiLCD(0,0X0C);
ghiLCD(0,0X06);
ghiLCD(0,0X01);
}
/* XU LY KENH 1 HEN GIO DEM NGUOC BAO DONG */
// KIEM TRA MOD
void kt_mod()
{
if(MOD_START==0)
{
delay(500);
if (MOD_START==0)
{
BMOD++;
if(BMOD==4) {DAUCHAMS=0XFF; DAUCHAMM=0XFF; DAUCHAMH=0XFF; TR0=1;}
if(BMOD==0) {DAUCHAMS=0XFF; DAUCHAMM=0XFF; DAUCHAMH=0XFF;}
if(BMOD==1) {DAUCHAMS=0X7F; DAUCHAMM=0XFF; DAUCHAMH=0XFF;}
if(BMOD==2) {DAUCHAMS=0XFF; DAUCHAMM=0X7F; DAUCHAMH=0XFF;}
if(BMOD==3) {DAUCHAMS=0XFF; DAUCHAMM=0XFF; DAUCHAMH=0X7F;}
gm_7seg();
do
{ht_7seg();}
while(MOD_START==0);
}
}
}
// KIEM TRA UP
void kt_up()
{
if(UP_STOP==0)
{
delay(500);
if(UP_STOP==0)
{
switch(BMOD)
{
case 1: GIAY++; if(GIAY==60) GIAY=0; break;
case 2: PHUT++; if(PHUT==60) PHUT=0; break;
case 3: GIO++; if(GIO==24) GIO=0; break;
default: break;
}
do
{
gm_7seg();
ht_7seg();
}
while(UP_STOP==0);
}
}
}
//KIEM TRA DOWN
void kt_dow()
{
if(DOW_SET==0)
{
delay(500);
if(DOW_SET==0)
{
switch(BMOD)
{
case 1: GIAY--; if(GIAY==-1) GIAY=59; break;
case 2: PHUT--; if(PHUT==-1) PHUT=59; break;
case 3: GIO--; if(GIO==-1) GIO=23; break;
default: break;
}
gm_7seg();
do
{ht_7seg();}
while(DOW_SET==0);
}
}
}
//XU LY DEM NGHUOC
void xldn()
{
GIAY--;
if(GIAY==-1)
{
PHUT--;
GIAY=59;
if(PHUT==-1)
{
GIO--;
PHUT=59;
if(GIO==-1)
{
GIO=0;PHUT=0;GIAY=0;
}
}
}
}
/* XU LY KENH 2 BAM GIO */
// HAM BAM GIO
void bg()
{
KHAC++;
if(KHAC==100)
{
KHAC=0;
GIAY++;
if(GIAY==60)
{
GIAY=0;
PHUT++;
if(PHUT==60)
{
PHUT=0;
GIO++;
if(GIO==24)
{
GIO=0;
}
}
}
}
}
// KIEM TRA START
void kt_start()
{
if(MOD_START==0)
{
delay(500);
if(MOD_START==0)
{
TR0=1;
while(MOD_START==0);
}
}
}
// KIEM TRA STOP
void kt_stop()
{
if(UP_STOP==0)
{
delay(500);
if(UP_STOP==0)
{
TR0=0;
while(UP_STOP==0);
}
}
}
// KIEM TRA SET(SAVE)
void kt_set()
{
if(DOW_SET==0)
{
delay(500);
if(DOW_SET==0)
{
if((TR0==1) && (DEM1<=5))
{
TAM1=1;
ghiLCD(0,0X80);
if(DEM1>0 )
{
ghiLCD(1,(DEM1)+0X30);
ghichuoi(".");
ghiLCD(1,MACHH1);
ghiLCD(1,MADVH1);
ghichuoi("-");
ghiLCD(1,MACHM1);
ghiLCD(1,MADVM1);
ghichuoi("-");
ghiLCD(1,MACHS1);
ghiLCD(1,MADVS1);
ghichuoi("-");
ghiLCD(1,MACHK1);
ghiLCD(1,MADVK1);
ghiLCD(0,0XC0);
}
gm_lcd();
ghiLCD(1,(DEM1+1)+0X30);
ghichuoi(".");
ghiLCD(1,MACHH);
ghiLCD(1,MADVH);
ghichuoi("-");
ghiLCD(1,MACHM);
ghiLCD(1,MADVM);
ghichuoi("-");
ghiLCD(1,MACHS);
ghiLCD(1,MADVS);
ghichuoi("-");
ghiLCD(1,MACHK);
ghiLCD(1,MADVK);
DEM1++;
if(DEM1==6)
{
ghiLCD(0,0xC0);
ghichuoi("GIOI HAN LUU ? ");
}
}
while(DOW_SET==0)
{
bg();
gm_7seg();
ht_7seg();
}
}
}
}
/* LOA BAO DONG */
void keu()
{
int i;
for(i=0;i<500;i++)
{
LOA=1; delay(30);
LOA=0; delay(70);
}
delay(50000);
}
/* AUTO HELP */
void help()
{
if(P0_7==1) // HELP KENH 1
{
if(BMOD==0)
{
ghiLCD(0,0X80);
ghichuoi("HEN GIO");
ghiLCD(0,0XC0);
ghichuoi("AN MOD DAT GIAY");
}
if(BMOD==1)
{
ghiLCD(0,0X80);
ghichuoi("DAT GIAY. . .");
ghiLCD(0,0XC0);
ghichuoi("AN MOD DAT PHUT");
}
if(BMOD==2)
{
ghiLCD(0,0X80);
ghichuoi("DAT PHUT. . .");
ghiLCD(0,0XC0);
ghichuoi("AN MOD DAT GIO ");
}
if(BMOD==3)
{
ghiLCD(0,0X80);
ghichuoi("DAT GIO. . .");
ghiLCD(0,0XC0);
ghichuoi("AN MOD START ");
}
if(BMOD==4)
{
ghiLCD(0,0X80) ;
ghichuoi("DANG CHAY . . .");
ghiLCD(0,0XC0);
ghichuoi(" (*_*)/(-.-)/ ");
}
}
else if(P0_7==0) // HELP KENH 2
{
if(TAM1==0)
{
if(TR0==0)
{
ghiLCD(0,0X80);
ghichuoi("BAM GIO");
ghiLCD(0,0XC0);
ghichuoi("START DE BAT DAU");
}
if(TR0==1)
{
ghiLCD(0,0X80);
ghichuoi("DANG CHAY... ");
ghiLCD(0,0XC0);
ghichuoi("SAVE DE LUU.....");
}
}
}
}
/* CHUONG TRINH CHINH */
void main()
{
if(P0_7==1)
{
TMOD=0X01; TR0=0; EA=1; ET0=1;
DEM=15536; TL0=DEM; TH0=DEM>>8;
BDN=0; BMOD=0; TAM=0;
DAUCHAMS=0XFF; DAUCHAMM=0XFF; DAUCHAMH=0XFF; GIAY=0;PHUT=0;GIO=0;
setup_lcd();
while(1)
{
kt_mod();
help();
kt_up();
kt_dow();
gm_7seg();
ht_7seg();
while(BMOD>3)
{
DAUCHAMS=DAUCHAMM=DAUCHAMH=0X7F;
gm_7seg();
if(BDN<20)
{
ht_7seg();
}
else
{
BDN=BDN-20;
xldn();
while((GIO+PHUT+GIAY)==0)
keu();
}
}
}
}
else if(P0_7==0)
{
DEM=65536-500;
TMOD=0X01; TL0=DEM; TH0=DEM>>8;
EA=1; ET0=1;
BDN=0; GIO=PHUT=GIAY=KHAC=0;
DAUCHAMS=0XFF; DAUCHAMM=0XFF; DAUCHAMH=0XFF;
setup_lcd();
while(1)
{
kt_start();
help();
kt_stop();
kt_set();
DAUCHAMS=DAUCHAMM=DAUCHAMH=0X7F;
gm_7seg();
ht_7seg();
if(BDN<20)
{
kt_start();
kt_stop();
kt_set();
gm_7seg();
ht_7seg();
}
else
{
BDN=BDN-20;
bg();
}
}
}
}

Comment