Tải bản đầy đủ (.doc) (17 trang)

THIẾT kế ĐỒNG hồ điện tử HIỂN THỊ BẰNG 8 LED 7 đoạn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (213.76 KB, 17 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
ĐỒ ÁN MÔN HỌC
THIẾT KẾ ĐỒNG HỒ ĐIỆN TỬ HIỂN
THỊ BẰNG 8 LED 7 ĐOẠN
Nhóm 6 : NGUYỄN ĐỨC NAM
ĐINH THÀNH LUÂN
TRẦN TIẾN NAM

Hà Nội 2010
A. Cơ Sở Lý Thuyết
I. Giới thiệu tổng quan về họ vi điều khiển 8051
Họ vi điều khiển 8051 là một trong những họ vi điều khiển thông dụng nhất .
Đây là họ vi điều khiển được sản xuất theo công nghệ CMOS . Có tốc độ
cao và công suất thấp, bộ nhớ Flash có thể lập trình được .
1. Sơ đồ khối của AT89S52
2. Những đặc trưng của AT89S52
 4 Kbyte bộ nhớ Flash có thể lập trình lặp vơi 1000 chu kỳ
đọc xoá
 Hoạt động tĩnh đầy đủ : Từ 0 HZ đến 24 MHZ
 Khoá bộ nhớ chương trình ba cấp
 128x8 bit RAM nội
 32 đường xuất nhập lập trình được
 Hai timer / counter khoong bit
 Một port nối tiếp sang công có thể lập trình được
 Mạch đồng hồ và bộ dao động trên chíp
3. Sơ đồ chân và chức năng của AT89S52
Như vậy theo sơ đồ trên AT89S52 có 40 chân .mỗi chân có chức năng
như các đường I/O (xuất nhập ) , trong đó 24 chân có công dụng kép,mỗi
đường có thể hoạt động như một đường I/O hoặc như đường điều khiển hoặc
như thành phần của bus điều khiển và bus dữ liệu.
3.1 Port 0 ( P0.0- P0.7)


Port 0 gồm 8 chân, ngoài các chức năng xuất nhập, Port 0 còn là bus đa
hợp dữ liệu và địa chỉ(AD0-AD7), chức năng này sẽ được sử dụng khi 8051
giao tiếp với các thiết bị ngoài có kiến trúc bus như các vi mạch nhớ, mạch
nhớ PIO…
3.2 Port 1 ( P1.0- P1.7)
Port 1 có chức năng xuất nhập theo bit và byte. Ngoài ra, ba chân P1.5,
P1.6, P1.7 được dùng để nạp ROM theo chuẩn ISP, hai chân P1.0, và P1.1
được dùng cho bộ Timer 2.
3.3 Port 2 (P2.0-P2.7)
Là một port có công dụng kép, là đường xuất nhập hoặc là byte cao của
bus dịa chỉ đối vớo các thiết bị đồng bộ nhớ mở rộng.
3.4 Port 3 (P3.0- P3.7)
Mỗi chân trên Port 3 ngoai chuc năng xuất nhập còn có chuc năng riêng,
cụ thể như sau :
Bit Tên Chức năng
P3.0 RXD Dữ liệu nhận cho port nối tiếp
P3.1 TXD Dữ liệu truyền cho port nối tiếp
P3.2 INT0 Ngắt bên ngoài 0
P3.3 INT1 Ngắt bên ngoài 1
P3.4 T0 Ngõ vào của Timer/counter 0
P3.5 T1 Ngõ vào của Timer/ counter 1
P3.6 /WR Xung ghi bộ nhớ dữ liệu ngoài
P3.7 /RD Xung đọc bộ nhớ dữ liệu ngoài.
3.5 Chân /PSEN ( Program store Enable)
/PSEN là chân điều khiển đọc chương trình ở bộ nhớ ngoài, nó được
nối với chân /OE để cho phép đọc các byte mã lệnh trên ROM ngoài .
/PSEN sẽ ở mức thấp trong thời gian đọc mã lệnh . Mã lẹnh được đọc từ bộ
nhớ ngoài qua bus dữ liệu (Port 0) thanh ghi lệnh để được giải mã . Khi thực
hiện chương trình trong ROM nội thì /PSEN ở mức cao.
3.6 Chân ALE (Address Latch Enable)

ALE là tín hiệu điều chỉnh chốt địa chỉ có tần số bằng 1/6 tần số dao
động của vi điều khiển. tín hiệu ALE được dùng để cho phép vi mạch chốt
bên ngoài như 74373, 74573 chốt byte địa chỉ thấp ra khỏi bus đa hợp địa
chỉ / dữ liệu (Port 0).
3.7 Chân /EA (External Access)
Tín hiệu /EA cho phép chọn bộ nhớ chương trình là bộ nhớ trong hay
ngoài vi điều khiển . Nếu EA ở mức cao (nối với Vcc), thì vi điều khiển thi
hành chương trình trong ROM nội . Nếu /EA ở mức thấp (nối với GND), thì
vi điều khiển thi hành chương trình từ bộ nhớ ngoài .
3.8 RST (Reset)
Ngõ vào RST trên chân 9 la f ngõ Reset của 8051. Khi tín hiệu này
được đưa lên mức cao , các thanh ghi trong bộ vi điều khiển được tải những
giá trị thích hợp để khởi động hệ thống .
3.9 XTAL1, XTAL2
AT89S52 có một bộ dao động trên chíp, nó thường được nối với với bộ
dao động bằng thạch anh có tần số lớn nhất là 33MHZ, thông thường là
12MHZ.

Hình trên là cách nối bộ dao động thạch anh
3.10 Vcc, GND
AT89s52 dùng nguồn điện áp một chiều có dải điện áp từ 4v đến 5,5v
được cấp qua chân 20 và 40.
B.Code
/*Co 5 phim bam, phim select1 de choin kieu hien thi(theo ngay/nam) dung
ngat ngoai, phim select2 de chon chinh sua cho nao dung 1 ngat ngoai,
2phim de up va down dung bt*/
#include<AT89X52.H>
//khai bao cac bien, ham

#define N 2

#define LED7_DATA P0
//khai bao cac bien
#define DIGIT1 P2_3
#define DIGIT2 P2_2
#define DIGIT3 P2_1
#define DIGIT4 P2_0
#define DIGIT5 P1_4
#define DIGIT6 P1_3
#define DIGIT7 P1_2
#define DIGIT8 P1_1
#define LED P1_0
#define up P3_5
#define down P3_7
const unsigned char
LED_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
const unsigned char thangbt[]={31,28,31,30,31,30,31,31,30,31,30,31};//nam
binh thuong
const unsigned char thangdb[]={31,29,31,30,31,30,31,31,30,31,30,31};
//nam nhuan
int select1,select2,ngay,thang,nam,gio,phut,giay,tic;
unsigned char digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8;
void hienthi();
void thietlap1();
void thietlap2();
void thietlap3();
void delay(unsigned int);
void quetLED(unsigned char,unsigned char,unsigned char,unsigned
char,unsigned char,unsigned char,unsigned char,unsigned char);
//dinh nghia cac ham
void main()

{
EA=1,EX0=1; EX1=1; ET1=1;
PT0=1;
IT0=1;IT1=1;
//Khoi tao Timer 1
TMOD=0x10;
TH1=-10000/256;//timer tran sau 1tic tac
TL1=-10000%256;
//
ngay=1;
thang=1;
nam=2008;
gio=phut=giay=tic=0;
select1=0;
select2=0;
LED=0;
TR1=1;
while(1)

{
while(select2==0)
{
hienthi();
}
while(select2==1)
{
thietlap1();
hienthi();
}
while(select2==2)

{
thietlap2();
hienthi();
}
while(select2==3)
{
thietlap3();
hienthi();
}
}
}
void thietlap1()
{
if(select1==0)
{
if(up==0)
{
giay++;
if(giay>59) giay=0;
}
if(down==0)
{
giay ;
if(giay<0) giay=59;
}
hienthi();
hienthi();
}
if(select1==1)
{

if(up==0)
{
nam++;
}
hienthi();
if(down==0)
{
nam ;
}
hienthi();
hienthi();
}
}
void thietlap2()
{
if(select1==0)
{
if(up==0)
{
phut++;
if(phut>59) phut=0;
}
if(down==0)
{
phut ;
if(phut<0) phut=59;
}
hienthi();
hienthi();
}

if(select1==1)
{
if(up==0)
{
thang++;
if(thang>12)thang=1;
}
if(down==0)
{
thang ;
if(thang<0) thang=12;
}
hienthi();
hienthi();
}
}
void thietlap3()
{
if(select1==0)
{
if(up==0)
{
gio++;
if(gio>23) gio=0;
}
if(down==0)
{
gio ;
if(gio<0) gio=23;
}

hienthi();
hienthi();
}
if(select1==1)
{
if(up==0)
{
ngay++;
if(nam==2008|nam==2012|nam==2016|
nam==2020|nam==2024|nam==2028|nam==2032|nam==2036|nam==2040|
nam==2048)
{
if(ngay>thangdb[thang-1])
ngay=0;
}
else
{
if(ngay>thangbt[thang-1])
ngay=0;
}
}
if(down==0)
{
ngay ;
if(nam==2008|nam==2012|nam==2016|
nam==2020|nam==2024|nam==2028|nam==2032|nam==2036|nam==2040|
nam==2048)
{
if(ngay<0) ngay=thangdb[thang-1];
}

else
{
if(ngay<0) ngay=thangbt[thang-1];
}
}
hienthi();
hienthi();
}
}
//Ham tre
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<100;j++);
}
//Ham hien thi
void hienthi()
{
if(select1==0) //Hien thi gio,phut,giay
{
digit8=gio/10;
digit7=gio%10;
digit6=phut/10;
digit5=phut%10;
digit4=giay/10;
digit3=giay%10;
digit2=tic/10;
digit1=tic%10;
}

if(select1==1) //Hien thu ngay,thang, nam
{
digit8=ngay/10;
digit7=ngay%10;
digit6=thang/10;
digit5=thang%10;
digit4=nam/1000;
digit3=(nam%1000)/100;
digit2=(nam%100)/10;
digit1=nam%10;
}
quetLED(digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8);
}
//Ham quet LED 7 thanh
void quetLED(unsigned char so1,unsigned char so2,unsigned char
so3,unsigned char so4,unsigned char so5,unsigned char so6,unsigned char
so7,unsigned char so8)
{
// hien thi digit 1
LED7_DATA = LED_code[so1];
DIGIT1 = 0;
delay(N);
DIGIT1 = 1;
// hien thi digit 2
LED7_DATA = LED_code[so2];
DIGIT2 = 0;
delay(N);
DIGIT2 = 1;
// hien thi digit 3
LED7_DATA = LED_code[so3];

DIGIT3 = 0;
delay(N);
DIGIT3 = 1;
// hien thi digit 4
LED7_DATA = LED_code[so4];
DIGIT4 = 0;
delay(N);
DIGIT4 = 1;
// hien thi digit 5
LED7_DATA = LED_code[so5];
DIGIT5 = 0;
delay(N);
DIGIT5 = 1;
// hien thi digit 6
LED7_DATA = LED_code[so6];
DIGIT6 = 0;
delay(N);
DIGIT6 = 1;
// hien thi digit 7
LED7_DATA = LED_code[so7];
DIGIT7 = 0;
delay(N);
DIGIT7 = 1;
// hien thi digit 8
LED7_DATA = LED_code[so8];
DIGIT8 = 0;

delay(N);
DIGIT8 = 1;
}

void ngatT1() interrupt 3
{
TR1=0;
TH1=-10000/256;
TL1=-10000%256;
tic++;
if(tic>99)
{
tic=0;
giay++;
}
if(giay>59)
{
giay=0;
phut++;
}
if(phut>59)
{
phut=0;
gio++;
}
if(gio>23)
{
gio=0;
ngay++;
}
if(nam==2008|nam==2012|nam==2016|nam==2020|nam==2024|
nam==2028|nam==2032|nam==2036|nam==2040|nam==2048)
{
if(ngay>thangdb[thang-1])

{
ngay=0;
thang++;
}
}
else
{
if(ngay>thangbt[thang-1])
{
ngay=0;
thang++;
}
}

if(thang>12)
{
thang=1;
nam++;
}
if(tic==0) LED=0;
if(tic==20) LED=1;
TR1=1;
}
void ngatngoai0() interrupt 0 //chon loai hien thi
{
select1++;
if(select1>1) select1=0;
hienthi();
}
void ngatngoai1() interrupt 2 //du lieu nao muon thay doi

{
TR1=0;
delay(500);
select2++;
if(select2>3)
{
select2=0;
TR1=1;
}
hienthi();
hienthi();
}
C.Đánh giá.

Qua bài tập lớn nhóm em vừa thực hiện. Đồ án thiết kế trên họ Vi Điều
Khiển 8051 đồng hồ đếm thời gian thực trên 8led 7 thanh có ưu điểm
- Hệ thống hiển thị thời gian thự ở 2 chế độ
- Sai số chưa đến 5s
- Có nguồn nuôi dự phòng
- Các phím tùy chỉnh được thiết kế đơn giản dễ sử dụng
Tuy nhiên trong quá trình thiết kế còn gặp nhiều sai sót và không tránh
khỏi các phím có độ chính xác chưa cao.Qua bài tập lớn này chúng em
mong được sự tham gia góp ý để chúng em hoàn thiện hơn khi ra trường
Em xin chân thành cảm ơn!

×