Nhờ các bạn xem giúp code sai ở đâu ạ. Đây là mạch hẹn giờ nhưng không cần chính xác nên tôi làm delay. Nút MODE (run) chưa nhấn thì UP và DN dùng tăng giá trị trên led 7 đoạn, Khi nhấn giữ MODE (run) thì đếm lùi về 0, khi bằng 0 thi LED đơn tắt. Mong các bạn giúp đỡ (đếm lùi delay khoảng 1 phút ạ).
Code:
#include <REGX52.H> #define PortLed P0 sbit Led1=P2^0; sbit Led2=P2^1; sbit Led3=P2^2; sbit Led4=P2^3; sbit Led5=P2^4; sbit Led6=P2^5; sbit up=P1^2; sbit down=P1^3; sbit run=P1^4; sbit relay=P3^7; unsigned char code Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; unsigned int phut; unsigned int tram; unsigned int chuc; unsigned int dvi; void Delay_ms(unsigned int t) { unsigned int x,y; for (x=0;x<t;x++) { for(y=0;y<123;y++); } } void Delay(unsigned int count, unsigned int timer) { unsigned int i; TMOD=0x10; for (i=0;i<count;i++) { TH1=-timer/256; TL1=-timer%256; TR1=1; while(!TF1); TR1=TF1=0; } } void HienThi(){ tram = phut/100; chuc = phut/10; dvi = phut%10; //hien thi don vi PortLed = Code7Seg[dvi]; Led6 = 0; Delay_ms(1); Led6 = 1; //hien thi chuc PortLed = Code7Seg[chuc]; Led5 = 0; Delay_ms(1); Led5 = 1; //Hien thi hang tram PortLed = Code7Seg[tram]; Led4 = 0; Delay_ms(1); Led4 = 1; } void SetUp(){ //Cai dat thoi gian bang phim tang giam if(up==0) { Delay_ms(10); if(up==0); { phut++; } }//het up if(down==0&&phut>0) { Delay_ms(10); if(down==0&&phut>0); { phut--; } } } void main() { phut = 0; relay = 1; while(1) { HienThi(); if (run==1) SetUp(); if(run==0&&phut>0){ relay=0; Delay(5985,10000); HienThi(); if (phut>0) phut--; if (phut==0) relay=1; } } }
Comment