Mạch báo thức đếm lùiĐặt báo thức rồi đếm lùi về 0 Xử lý khi có báo thức: Ring, Silence, Snooze,…
Trang 1BÀI TẬP LỚN MÔN ĐIỆN TỬ SỐ
Bài 6: Mạch Đồng Hồ Báo Thức Đếm Lùi
GV: Nguyễn Trung Hiếu Danh sách Sinh Viên thực hiện:
1 Dương Văn Hải_B14DCVT077
2 Trương Văn Huy_ B14DCVT263
3 Đỗ Tuấn Đạt_B14DCVT134
4 Nguyễn Huy Khánh_B14DCVT080
I.ĐẶT VẤN ĐỀ
Ngày nay, các thiết bị điện tử cho phép thực hiện rất nhiều công việc trong cuộc sống và trong khoa học Trong thời đại bùng nổ về công nghệ
và kỹ thuật hiện nay, để việc tính toán thời gian cho các công việc, người
ta đã sử dụng các mạch điện tử để chạy thời gian một cách chính xác hơn
II PHUƠNG ÁN THIẾT KẾ
1.Mô tả hoạt động của hệ thống
Đặt thời gian chạy, và ấn star để bắt đầu đếm lùi, khi đếm về 0 thì sẽ có chuông thông báo
2.Phương án thiết kế
Sử dụng các mạch số tạo xung với thạch anh và ic AT89C52 tạo mod đếm, led 7 đoạn hiển thị thời gian, chuông dùng để báo thức
III SƠ ĐỒ KHỐI
Trang 2IV.Thực hiện mạch điện
1 Khối tạo xung( Thạch anh)
Thạch anh được gọi là băng tinh, không tan thành nước, trông
trong suốt như pha lê, có một đặc tính đáng chú ý: Nó bao giờ cũng mát
lạnh khi ta cầm lên tay Bởi vậy từ xưa, để kiểm tra xem là đồ thật hay
đồ giả, thợ kim hoàn thường áp nó vào má xem có lạnh không
Thạch anh điện tử: là một linh kiện làm bằng tinh thể đá thạch anh được
mài phẳng và chính xác Linh kiện thạch anh làm việc dựa trên hiệu ứng
áp điện Hiệu ứng này có tính thuận nghịch Khi áp một điện áp vào 2
mặt của thạch anh, nó sẽ bị biến dạng Ngược lại, khi tạo sức ép vào 2
bề mặt đó, nó sẽ phát ra điện áp
Những tinh thể thạch anh đầu tiên được sử dụng bởi chúng có tính chất
“áp điện”, có nghĩa là chúng chuyển các dao động cơ khí thành điện áp
và ngược lại, chuyển các dao động cơ khí thành các xung điện áp Tính
chất áp điện này được Jacques Curie phát hiện năm 1880 và từ đó chúng được sử dụng vào trong các mạch điện tử do tích chất hữu ích này.Một
Ma trận led 7 Đoạn Hiển thị Giây
Vi xử lí AT89C52
Loa
4 Transistor
P3.7 P1.0-P1.3 P1.4-P1.7
Set incr reset star
Thạch Anh
XUNG
CLOCK
P2.0-P2.7
Trang 3đặc tính quan trọng của tinh thể thạch anh là nếu tác động bằng các
dạng cơ học đến chúng (âm thanh, sóng nước ) vào tinh thể thạch anh thì chúng sẽ tạo ra một điện áp dao động có tần số tương đương với mức
độ tác động vào chúng, do đó chúng được ứng dụng trong rất nhiều lĩnh vực Chẳng hạn kiểm soát những sự rung động trong các động cơ xe hơi để kiểm soát sự hoạt động của chúng
2.Khối vi điều khiển ( AT89C52)
Vi điều khiển AT89C52 là một bộ vi xử lý 8bit được chế tạo theo công nghệ CMOS với 8KB bộ nhớ chương trình (bộ nhớ dạng Flash) có thể đọc ghi
1000 lần.Nếu bạn muốn bộ nhớ chương trình lớn hơn, có thể sử dụng AT89C54, AT89C58 với bộ nhớ chương trình 16K, và 32K
89C52có 40 chân, trong đó 4 cổng vào ra (P0,P1, P2, P3), mỗi cổng gồm 8 chân (tương ứng với 8bit của 1 byte), và đều có chức năng nhận và xuất dữ liệu Riêng cổng P3 là một cổng đặc biệt, còn thêm những chức năng khác như nhận ngắt, nhận và truyền dữ liệu nối tiếp
Sơ đồ chân của 8051:
- Từ chân 32->39: Cổng vào ra 0, tương ứng với các chân P0_7 > P0_0
Trang 4- Từ chân 1->8: Cổng vào ra 1
- Từ chân 21 -> 28: Cổng vào ra 2
- Từ chân 10->17: Cổng vào ra 3
- Chân 40 và chân 20: Cấp nguồn cho VĐK Chân 40 bạn nối với +5V và chân 20 nối với mass
- Chân 18 và chân 19 (XTAL 2 và XTAL 1): Nối với bộ dao động thạch anh (crystal) nhằm tạo xung nhịp cho Vi điều khiển Hai chân này mỗi chân bạn nối với một đầu thạch anh Ngoài ra, tại mỗi chân, bạn nối với một tụ 33pF (là loại tụ gốm, nhỏ) xuống mass để bù nhiệt và ổn định hoạt động cho VĐK
- Chân 9 (RST): Dùng để Reset VĐK Khi chân này được đưa lên mức áp cao trong khoảng thời gian từ 2 chu kỳ máy (chu kỳ máy là gì sẽ nói sau) trở lên thì VĐK sẽ được reset đưa về tình trạng lúc ban đầu Chân này bạn nối với một điện trở 8,2K, nối với một nút ấn đưa lên nguồn
+5V Khi nhấn nút, chân số 9 sẽ được đưa lên mức áp cao và reset cho VĐK
- Chân PSEN: Bạn nối lên +5V để chỉ thị sử dụng chương trình từ ROM
Trang 5Sơ đồ khối
Sơ đồ trong mô phỏng
Trang 63.Khối hiển thị (LED 7 Thanh 7SEG-MPX4-CA)
Trang 7Các đầu ABCDEFG sẽ được nối với P2.0-P2.6
Các đầu 1234 sẽ được nối từ P1.0-P1.3 (qua transistor)
4.Khối chuông
Chân P3.7 sẽ được nối vào chuông
5.Khối điều khiển (set, reset, incr, star)
6.Khối pause
Trang 87.Toàn Mạch
V Sử dụng Code chạy
#include<reg51.h>
sbit dig_ctrl_4=P1^0; sbit dig_ctrl_3=P1^1; sbit dig_ctrl_2=P1^2; sbit dig_ctrl_1=P1^3; sbit reset=P1^7;
sbit start=P1^6;
Trang 9sbit incr=P1^5;
sbit set=P1^4;
sbit pause=P3^3;
sbit buzzer_pin=P3^7;
sbit relay=P3^6;
int sel_seg_to_incr=0;
int ret_seg_to_incre=0;
int recent_incr_seg;
int begin;
unsigned char dig_disp=0;
int min2=0;
int min1=0;
int sec2=0;
int sec1=0;
int p;
int avi=0;
char
dig_val[10]={0x40,0xF9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x10
void delay(int a)
{
int i;
for(i=0;i<a;i++)
{
TL1=0xFD;
TH1=0x4B;
TR1=1;
while(TF1==0);
TR1=0;
TF1=0;
}
}
int setfn()
{
while(set==0)
{
Trang 10switch(recent_incr_seg) {
case 1:
if(set==0
{
dig_ctrl_4=1;
dig_ctrl_3=0;
dig_ctrl_2=0;
dig_ctrl_1=0;
recent_incr_seg=1; ret_seg_to_incre=1; P2=dig_val[min2]; delay(15);
}
case 2:
if(set==0
{
dig_ctrl_4=0;
dig_ctrl_3=1;
dig_ctrl_2=0;
dig_ctrl_1=0;
recent_incr_seg=2; ret_seg_to_incre=2; P2=dig_val[min1]; delay(15);
}
case 3:
if(set==0)
{
dig_ctrl_4=0;
dig_ctrl_3=0;
dig_ctrl_2=1;
dig_ctrl_1=0;
recent_incr_seg=3; ret_seg_to_incre=3; P2=dig_val[sec2]; delay(15);
}
Trang 11case 4:
if(set==0)
{
recent_incr_seg=1; dig_ctrl_4=0;
dig_ctrl_3=0;
dig_ctrl_2=0;
dig_ctrl_1=1;
ret_seg_to_incre=4; P2=dig_val[sec1]; delay(15);
recent_incr_seg=1; }
}
}
return(ret_seg_to_incre); }
void increase(int a) {
while(incr==0)
{
switch(a)
{
case 1:
P2=dig_val[min2]; delay(15);
min2++;
if(min2==6)
min2=0;
P2=dig_val[min2]; delay(5);
break;
case 2:
P2=dig_val[min1]; delay(15);
min1++;
if(min1==10)
Trang 12min1=0;
P2=dig_val[min1];
delay(5);
break;
case 3:
P2=dig_val[sec2];
delay(15);
sec2++;
if(sec2==6)
sec2=0;
P2=dig_val[sec2];
delay(5);
break;
case 4://Set the sec1 digit P2=dig_val[sec1];
delay(15);
sec1++;
if(sec1==10)
sec1=0;
P2=dig_val[sec1];
delay(5);
break;
}
}
}
void resetfn() //
{
IE=0x84;
sel_seg_to_incr=1;
recent_incr_seg=1;
if(begin==0)
{
dig_ctrl_4=1;
dig_ctrl_3=0;
dig_ctrl_2=0;
dig_ctrl_1=0;
Trang 13begin=0;
P2=dig_val[min2];
delay(5);
while(1)
{
if(start==0)
{
TMOD=0x11
TL0=0xf6;
TH0=0xFf;
IE=0x86;
TR0=1;
break;
}
if(set==0)
sel_seg_to_incr=setfn();
if(incr==0)
increase(sel_seg_to_incr);
}
}
void display() interrupt 1
{
TL0=0x36
TH0=0xf6;
P2=0xFF;
dig_ctrl_1 = dig_ctrl_3 = dig_ctrl_2 = dig_ctrl_4 = 0; dig_disp++;
dig_disp=dig_disp%4;
switch(dig_disp)
{
case 0:
P2=dig_val[sec1];
dig_ctrl_1 = 1;
break;
case 1:
Trang 14P2= dig_val[sec2];
dig_ctrl_2 = 1;
break;
case 2:
P2= dig_val[min1];
dig_ctrl_3 = 1;
break;
case 3:
P2= dig_val[min2];
dig_ctrl_4 = 1;
break;
}
}
void pauselock() interrupt 2{ avi=1;
}
void main()
{
pause=1;
set=1;
reset=1;
start=1;
incr=1;
recent_incr_seg=1;
begin=1;
TMOD=0x11;
TL0=0x36;
TH0=0xF6;
IE=0x86;
TR0=1
while(1)
{
while(min2>=0)
{
while(min1>=0)
Trang 15{
while(sec2>=0)
{
while(sec1>=0)
{
p=1;
while(min2==0&&min1==0&&sec2==0&&sec1==0&&reset!
=0&&begin==0)
{
if(p==1)
{
buzzer_pin=0;
delay();
buzzer_pin=1;
p++;
relay=0;
}
}
if(reset==0 || begin==1)
{
dig_ctrl_4=1;
dig_ctrl_3=1;
dig_ctrl_2=1;
dig_ctrl_1=1;
resetfn();
}
while(avi==1&&start==1);
avi=0;
delay(20);
sec1 ;
}
sec1=9;
sec2 ;
}
sec1=9;
sec2=5;
min1 ;
}
Trang 16sec1=9; sec2=5; min1=9; min2 ; }
min2=5; }
}