Tải bản đầy đủ

Bài Tập Lớn Điện Tử Số Mạch Báo Thức Đếm Lùi

BÀ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


Thạch Anh

XUNG
CLOCK

Vi xử lí
AT89C52
P3.7

P2.0-P2.7

Ma trận led 7
Đoạn
Hiển thị Giây

Loa

P1.4-P1.7
P1.0-P1.3
Set
incr
reset
star

4 Transistor

IV.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


đặ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


(8bit)
- 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


Sơ đồ khối

Sơ đồ trong mô phỏng


3.Khối hiển thị (LED 7 Thanh 7SEG-MPX4-CA)


Cá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


7.Toàn Mạch

V. Sử dụng Code chạy
#include
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;


sbit 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{
TL1=0xFD;
TH1=0x4B;
TR1=1;
while(TF1==0);
TR1=0;
TF1=0;
}
}
int setfn()
{
while(set==0)
{


switch(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);
}


case 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)


min1=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;


}
begin=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:


P2= 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)


{
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--;
}


sec1=9;
sec2=5;
min1=9;
min2--;
}
min2=5;
}
}



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×