Ngày 11/01/2015 09:22:54 / Lượt xem: 3617 / Người đăng:
Nguyễn Thế Trọng Nhân
/ Tác giả: Nguyễn Thế Trọng Nhân
/ Nguồn: mafialenin@gmail.com
Đồng hồ hẹn giờ 24h-59p-59s về 00000 dùng 8501
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
(Các bạn tạo file main.c trong Keil C sau copy vào sau đó biên dịch ra fle hex)
#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--;
}
}
+ Hình ảnh về sản phẩm
* 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.
+ Video hoạt động của sản phẩm
* Video sản phẩm