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