em vừa viết được đoạn chương trình đồng hồ số hiển thị lên Lcd mà ko chỉnh được thời gian nên bác nào biết cách chỉnh thời gian bằng 4 nút nhấn(1 nút chọn chế độ chỉnh giờ/phút/giây, 1 nút chỉnh tăng , 1 nút chỉnh giảm và 1 nút bắt đầu cũng như kết thúc chỉnh thời gian) có sử dụng ngắt ngoài và đoạn code chương trình em đây mong các bác sửa lại giúp (và chương trình trên em chỉ cần tính thời gian gần đúng nên chỉ sử dụng hàm delay thôi)
cám ơn nhiều
Code:
#include<AT89x51.h> // Dinh kem file thu vien #include<string.h> #define bat 1 // Dinh nghia gia tri bat den Led #define tat 0 // Dinh nghia gia tri tat den Led /*==================khai bao bien==================*/ sbit Led1 = P1^0; // Khai bao bi?n Led ki?u bit chan P1.0 sbit Led2 = P1^1; // Khai bao bi?n Led ki?u bit chan P1.0 /*================= Khai bao hàm==================*/ /*------------------------------ham tre -------------------------------------*/ unsigned char data gio1=0; unsigned char data gio2=0; unsigned char data phut1=0; unsigned char data phut2=0; unsigned char data giay1=0; unsigned char data giay2=0; unsigned char data Time[8]; sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu. sbit BF = 0xA7; // co ban, bit DB7. sbit RS = P3^0; // chon thanh ghi sbit RW = P3^1; // doc/ghi sbit EN = P3^2; //cho phep chot du lieu /*===========cac chuong trinh con cua LCD==========*/ /*--------------kiem tra su san sang cua LCD------------------------*/ void wait(void) { RS=0; //chon thanh ghi lenh RW=1; //?oc tu LCD LCDdata=0xff; //gia tri 0xff while(BF) //kiem tra co ban { EN=0; //dua xung cao xuong thap ?e chot. EN=1; //dua chan cho phep len cao } } /*------------------------thiet lap lenh cho LCD--------------------------*/ void LCDcontrol(unsigned char x) { RS=0;//chon thanh ghi lenh RW=0;//ghi len LCD. LCDdata=x ;// gia tri x EN=1;//cho phep muc cao EN=0;//xung cao xuong thap wait();//?oi LCD san sang. } /*------------------------------Khoi tao LCD-------------------------*/ void LCDinit(void) { LCDcontrol(0x38);//2 dong va ma tran 5x7 LCDcontrol(0x0e);//bat man hinh, bat con tro LCDcontrol(0x01);//xoa man hinh } /*-------------------------thiet lap du lieu cho LCD-----------------*/ void LCDwrite(unsigned char c) { RS=1;//ghi du lieu RW=0;//ghi du lieu len LCD LCDdata=c;//gia tri C EN=1;//cho phep muc cao EN=0;//xung cao xuong thap wait();//cho } void LCDwrites(unsigned char *s) { unsigned char data lens,count; lens=strlen(s); for(count=0;count<lens;count++){ LCDwrite(*(s+count)); } } void delay(unsigned long time) { while(time--); } /*--------------------------------ham chinh--------------------------------*/ void main(void) { while(1) { while(gio1<3) { while(gio2<10) { while(phut1<7) { while(phut2<10) { while(giay1<7) { while(giay2<10) { LCDinit(); // khoi tao LCD LCDwrite(gio1+48); LCDwrite(gio2+48); LCDwrite(':'); LCDwrite(phut1+48); LCDwrite(phut2+48); LCDwrite(':'); LCDwrite(giay1+48); LCDwrite(giay2+48); delay(21600); giay2++; } giay2=0; giay1++; } giay1=0; giay2=0; phut2++; } giay1=0; giay2=0; phut2=0; phut1++; } giay1=0; giay2=0; phut2=0; phut1=0; gio2++; } giay1=0; giay2=0; phut2=0; phut1=0; gio2=0; gio1++; } giay1=0; giay2=0; phut2=0; phut1=0; gio2=0; gio1=0; } }
Comment