Làm đồng hồ diện tử led 7 vạch là một chuyên đề quá quen thuộc với các bạn là dân điện tử nhưng mạch điều khiển của nó có rất nhiều dạng nhưng chia ra hai dạng chính đó là đồng hồ mạch ic số (ĐHS) và đồng hồ Vi điều khiển (VĐK). Nhưng nếu làm bằng ic số thì mạch phức tạp và phải có xung 1Hz mà cái này thì khó kiếm khó làm. Nên mình quyết định chọn vi điều khiển.
Chiếc đồng hồ này thực ra chính là máy hẹn giờ do mình lập trình và thi công bản mạch PCB.+ Mạch nguyên lý
+ Chương trình viết bằng C:
- Dòng vi xử lý : 89C51
- Ngôn ngữ : C
- Môi trường biên dịch : Keil C
#include<regx51.h>
sfr dulieu=0x80;
sbit nutmode=P3^0;
sbit nuton=P3^4;
sbit chuong=P3^1;
int on=0,a,r=0,giay=59,chucgiay=0,dvgiay=0,phut=59,chucphut=0,dvphut=0,gio=24,chucgio=0,dvgio=0,
dvgiay_bcd=0,chucgiay_bcd=0,dvphut_bcd=0,chucphut_bcd=0,dvgio_bcd=0,chucgio_bcd=0;
void delay(long time)
{
while(time--);
}
void giaima_ht()
{
switch(a)
{
case 0: a=0x40; break;
case 1: a=0x79; break;
case 2: a=0x24; break;
case 3: a=0x30; break;
case 4: a=0x19; break;
case 5: a=0x12; break;
case 6: a=0x02; break;
case 7: a=0x78; break;
case 8: a=0x00; break;
case 9: a=0x10; break;
}
}
void giaima_dec()
{
dvgiay=giay%10;
chucgiay=giay/10;
dvphut=phut%10;
chucphut=phut/10;
dvgio=gio%10;
chucgio=gio/10;
}
void giaima_bcd()
{
a=dvgiay;
giaima_ht();
dvgiay_bcd=a;
a=chucgiay;
giaima_ht();
chucgiay_bcd=a;
a=dvphut;
giaima_ht();
dvphut_bcd=a;
a=chucphut;
giaima_ht();
chucphut_bcd=a;
a=dvgio;
giaima_ht();
dvgio_bcd=a;
a=chucgio;
giaima_ht();
chucgio_bcd=a;
}
void hienthi()
{
P1=0xff;
dulieu=0xff;
dulieu=dvgiay_bcd;
P1=0xfe;
delay(1);
P1=0xff;
dulieu=0xff;
dulieu=chucgiay_bcd;
P1=0xfd;
delay(1);
P1=0xff;
dulieu=0xff;
dulieu=dvphut_bcd;
P1=0xfb;
delay(1);
P1=0xff;
dulieu=0xff;
dulieu=chucphut_bcd;
P1=0xf7;
delay(1);
P1=0xff;
dulieu=0xff;
dulieu=dvgio_bcd;
P1=0xef;
delay(1);
P1=0xff;
dulieu=0xff;
dulieu=chucgio_bcd;
P1=0xdf;
delay(1);
}
void main()
{
EA=1;
ET0=1;
EX0=EX1=1;
IT0=IT1=1;
chuong=0;
TMOD=0x01;
TL0=0xf0;
TH0=0xd8;
TR0=1;
while(1)
{
giaima_dec();
giaima_bcd();
hienthi();
if(nuton==0)
{
delay(300);
while(nuton==0)
{;}
on=1;
}
}
}
void ngat_T0() interrupt 1
{
TF0=0;
if(on==1)r++;
while(r==16)
{
r=0;
if(giay>-1)
{
giay=giay-1;
}
if(gio==0&&giay==-1&&phut==0)
{
chuong=1;
on=0;
giay=0;
}
if(phut>-1&&giay==-1&&gio>=0)
{
phut=phut-1;
giay=59;
}
if(phut==-1)
{
gio=gio-1;
phut=59;
}
TL0=0xf0;
TH0=0xd8;
TR0=1;
}
}
void ngat_ET0() interrupt 0
{
if(nutmode==1)
{
if(phut<59)
{
phut++;
}
}
else
{
if(gio<24)
{
gio++;
}
}
}
void ngat_ET1() interrupt 2
{
if(nutmode==1)
{
if(phut>0)
{
phut--;
}
}
else
if(gio>0)
{
gio--;
}
}
+ Nguyên lý hoạt động
-Gồm 5 nút điều khiển:
+ Reset
+ run
+ INC
+ DEC
+ ADJ hour
1. Nút reset: reset đồng hồ đưa về giá trị 245959
2. Nút run: Nhấn nút này đồng hồ đếm lùi
3. INC: Tăng giá trị đếm
4. DEC: Giảm giá trị đếm
5. ADJ hour: Nhấn nút này khi bấm INC, DEC thì sẽ điều chỉnh giờ
Khi giá trị lùi về 000000 thì relay đóng chuông báo.
Echipkool - Điện Tử | Tin Học - Chia sẻ kiến thức - Kết nối đam mê điện tử
Đăng nhận xét