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

Thiết kế bộ đo tần số hiển thị bằng 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 (593.51 KB, 19 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA : ĐIỆN TỬ
ĐỒ ÁN MÔN HỌC
Đề tài: Thiết kế bộ đo tần số hiển thị bằng led 7 đoạn.

GVHD : Nguyễn Anh Dũng
Sinh viên thực hiện : Nguyễn Xuân Chiến
Nguyễn Ngọc Huy
Nguyễn Quang Vọng


LỜI NÓI ĐẦU.
Trường ĐH công nghiệpHà Nội tiền thân là trường cao đẳng công nghiệp Hà Nội
được hình thành và phát triển với một bề dầy lịch sử, là cái nôi đào tạo công nhân kĩ
thuật cao . Cùng với sự phát triển và đi lên của nhà trường, khoa Điện tử -Tự động hóa
măc dù là một khoa mới được thành lập nhưng đã đóng góp không nhỏ vào thành công
của nhà trường .
Trong thời đại ngày nay đất nước ta đang trên đường hội nhập quốc tế đặc biệt là
hội nhậpWTO. Đất nước ta đang trên đà phát triển mạnh mẽ để bắt kịp thế giới chúng ta
phải thực hiện chính sách đi tắt đón đầu .Như chúng ta đã biết thế kỷ 21 là thế kỷ của
công nghệ thông tin và tự động hóa cả hai ngành này đều liên quan mật thiết đến Điện
tử.
Ngành công nghiệp Điện tử đang phát triển rất mạnh mẽ trên thế giới ở những nước
công nghiệp phát triển ,ở nước ta điện tử là một ngành thực sự là mới mẻ nhưng được
nhà nước quan tâm đặc biệt .
Tại trường ĐH công nghiệp Hà Nội, khoa Điện tử- Tự động hóa tổ chức đào tạo ba
ngành: điện tử công nghiệp , điện tử viễn thông, điện tử máy tính.
Vi Điều Khiển là môn học trực thuộc bộ môn điện tử công nghiệp, TBĐKCN đã và
đang dần được số hóa. Được sự phân công và hướng dẫn của thầy Nguyễn Anh Dũng,
nhóm em đã nghiên cứu đề tài này. Mặc dù cố gắng rât nhiều trong việc tìm hiểu tài liệu


và được sự hướng dẫn nhiệt tình của thầy giáo nhưng do còn nhiều hạn chế nên không
tránh khỏi những thiếu sót về tài liệu, về ngôn ngữ, cách trình bày
Chúng em rất mong được thông cảm và góp ý của thầy.
Cuối cùng chúng em xin chân thành cảm ơn!
Hà Nội Ngày: 1/2/2010
nhóm sinh viên: Nguyễn xuân chiến
Nguyễn ngọc huy
Nguyễn Quang Vọng
I.Giíi thiÖu tæng quan vÒ hä 8051
Vi điều khiển 8051 – M« tả phần cứng
Vi điều khiển 8051 lµ một trong những họ vi điều khiển 8bit th«ng dụng
nhất trªn thế giới. Vi điều khiển nµy được chế tạo lần đầu tiªn bởi h·ng
Intel, sau đã được c¸c h·ng kh¸c chế tạo dưới dạng c¸c dẫn xuất kh¸c
nhau. C¸c dẫn xuất nµy đều cã chung một kiến tróc giống với vi điều khiển
8051 kinh điển. Thªm vµo đo, tïy theo từng loại mµ c¸c chip dẫn xuất được
tÝch hợp thªm c¸c ngoại vi kh¸c nhau (như ADC, SPI, EEPROM,
capture/compare channels…), tÝnh năng cũng được n©ng cao để phï hợp với
c¸c ứng dụng ngµy cµng phức tạp.
Trước hết xin giới thiệu một số tính năng của họ vi điều khiển 8051
(lưu ý là những tính năng này là của vi điều khiển 8051 kinh điển):
- CPU 8bit được thiết kế tối ưu cho các ứng dụng điều khiển.
- Co cac khả năng xử lý bit logic.
- Không gian bộ nhớ chương trình 64Kbyte.
- Không gian bộ nhớ dữ liệu 64 Kbyte.
- Tích hợp 4Kbyte bộ nhớ chương tr×nh trªn chip.
- Tích hợp 128byte bộ nhớ RAM trên chip.
- Cã 32 đường vµo/ra 2 chiều có thể định địa chỉ đến từng bit.
- Tích hợp 02 timer 16bit.
- Tích hợp UART song song.
- Cấu trúc ngắt với 06 nguồn/05 vector ở 02 mức ưu tiên khác nhau.

- Tích hợp mạch bộ dao động trên chip.
Vi điều khiển đợc giới thiệu ở đây đợc sản xuất theo công nghệ CMOS. Một
số loại vi điều khiển thông dụng thuộc họ 8051 có thể kể ra nh: AT89C2051(
20 chân), AT89C4051( 20 chân), AT89C51( 40 chân), AT89C52
( 40 chân), AT89S51( 40 chân), AT89S52( 40 chân), AT89S53( 40 chân)
Sau đây là sơ đồ khối tổng quan của 8051
I-Cấu trúc phần cứng họ 8051( AT 89S52)
Sơ đồ chân AT 89S52
Bộ vi điều khiển AT89S52 gồm các khối chức năng chính sau đây:
CPU( Central Processing Unit) bao gồm:
- Thanh ghi tích luỹ A
- Thanh ghi tích luỹ phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic học( ALU: Arithmetic Logical Unit)
- Từ trạng thái chơng trình( PSW: Progam Status Word)
- Bốn băng thanh ghi
- Con trỏ ngăn xếp
Bộ nhớ chơng trình( Bộ nhớ ROM) gồm 8Kb Flash.
Bộ nhớ dữ liệu( Bô nhớ RAM) gồm 256 bytes.
Bộ UART( Universal Ansynchronous Receiver and Tranmitter) làm chức
năng truyền nhận nối tiếp, nhờ khối này, AT89S52 có thể giao tiếp với máy
tính qua cổng COM.
3 bộ Timer /Counter 16 bít thực hiện các chức năng định thời và đếm sự kiện.
WDM( Watch Dog Timer) đợc dùng để phục hồi lại hoạt động của CPU khi nó
bị treo bởi một nguyên nhân nào đó. WDM ở AT89S52 gồm một bộ Timer 14
bít, một bộ Timer 7 bít, thanh ghi WDTPRG( WDT programable) điều khiển
Timer 7 bit và một thanh ghi chớc năng WDTRST( WDM register). Bình thờng
WDT không hoạt động( bị cấm), để cho phép WDT, các giá trị 1EH và E1H cần
phải đợc ghi liên tiếp vào thanh ghi WDTRST. Timer 14 bit của WDT sẽ đếm
tăng dần sau mỗi chu kỳ đồng hồ cho đến giá trị 16383 thì xảy ra tràn. Khi xảy
ra tràn, chân RTS sẽ đợc đặt ở mức cao trong thời gian 96.Tosc (Tossc=1/Fosc)

và AT89S52 sẽ đợc reset. Khi WDT hoạt động, ngoại trừ reset phần cứng và
reset do WDT tràn thì không có cách nào cấm đợc WDT, vì vậy khi sử dụng
WDT thì các đoạn mã chơng trình phải đợc đặt trong các khe thời gian từ khi
giữa các lần WDT đợc khởi tạo lại
Hình: Sơ đồ khối của bộ vi điều khiển 89S52
II- Sơ đồ các chân và chức năng
1. Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm 8 chân, ngoài chức
năng xuất nhập ra, 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 AT89S52 giao tiếp với thiết bị ngoài có
kiến trúc Bus
2. Port 1( P1.0-P1,7 hay từ chân 1 đến chân 8) : Có chức năng xuất nhập
theo bit và byte. Ngoài ra, 3 chân P1.5, P1.6, P1.7 đợc dùng để nạp ROM
theo chuẩn ISP, 2 chân P1.0 và P1.1 đợc dùng cho bộ Timer 2

3. Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28): 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 địa chỉ đối với các thiết kế
dùng bộ nhớ mở rộng.

4. Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân trên port 3
ngoài chức năng xuất nhập ra còn có một chức năng riêng:

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 phát cho port nối tiếp
P3.2 INT0 Ngắt 0 bên ngoài
P3.3 INT1 Ngắt 1 bên ngoài
P3.4 T 0 Ngõ vào của Timer/Counter 0
P3.5 T 1 Ngõ vào của Timer/Counter 1
P3.6 WR Xung ghi bộ nhớ dữ liệu bên ngoài
P3.7 RD Xung đọc bộ nhớ dữ liệu bên ngoài

5. RST( Reset- chân 9):
Mức tích cực của chân này là mức 1, để reset ta phải đa mức 1(5V)
đến chân này với thời gian tối thiểu 2 chu kỳ máy( tơng đơng 2uS đối với
thạch anh 12MHz.
Trạng thái của các thanh ghi khi reset, khi reset thì trạng thái của các
thanh ghi không thay đổi


6. Cỏc ngừ vo b dao ng Xtal1, Xtal2:
B to dao ng c tớch hp bờn trong 89S52. Khi s dng 89S52, ngi
ta ch cn ni thờm t thch anh v cỏc t. Tn s t thch anh thng l 12 Mhz-
24Mhz. .
.

7 . EA( External Access):
EA thờng đợc mắc lên mức cao(+5V) hoặc mức thấp( GND). Nếu ở
mức cao, bộ vi điều khiển thi hành chơng trình từ ROM nội. Nếu ở mức thấp,
chơng trinh chỉ đợc thi hành từ bộ nhớ mở rộng.
8 .ALE( Address Latch Enable):
ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa
đầu của chu kỳ bộ nhớ. Sau đó các đờng port 0 dùng để xuất hoặc nhập dữ
liệu trong nửa chu kỳ sau của bộ nhớ.
9 .PSEN( Program Store Enable):
PSEN là điều khiển để cho phép bộ nhớ chơng trình mở rộng và trờng
đợc nối đến chân /OE ( Output Enable) của một EPROM để cho phép đọc
các bytes mã lệnh.
PSEN sẽ ở mức thấp trong thừi gian đọc lệnh. Các mã nhị phân của ch-
ơng trình đợc đọc từ EPROM qua Bus và đợc chốt vào thanh ghi lệnh của bộ
vi điều khiển để giải mã lệnh. Khi thi hành chơng trình trong ROM nội,
PSEN sẽ ở mức thụ động( mức cao)

10 . Vcc, GND:
AT89S52 dùng nguồn một chiều có dải điện áp từ 4V-5.5V đợc cấp
qua chân 40(+) và chân 20(-).
II : NI DUNG:
1 bi v yờu cu:
Thit k b o tn s hin th bng 4 led 7 on.
yờu cu:tn s o c hin th trờn 4 led 7 on.
sai s cho phộp :+ - 5%
H thng cú chuyn mch e o 3 di tn s khỏc nhau m bo chớnh
xỏc (di 1 t 10 Hz ộn 100 Hz; di 2 t 100Hz dn 500 Hz,di 3 t
1Khz n 5khz;
H thng cú km theo mt b tao xung vi cỏc tn s tng ng vi 3 di
tren nôi
2 ni dung:
Vi yờu cu ca bi toỏn ta pha dung mt mch to xung dung ic 555
to ra tn s ng vi 3 di trờn , xung ny thụng qua cụng tc SW3 (t õy
ta cú th chn xung m ta cn o ) c a vo chõn s 14 ca ic 89s52.
Sau khi qua bộ sử lý tín hiệu xuất ra led 7 thanh la giá tri của tần số mà ta
cần đo.
Ngoài ra các nút bấm SW1,SW2 dùng để chuyển mạch để có thể đo 3 dải
tần số khác nhau.
III: SƠ ĐỒ NGUYÊN LÝ:
IV SƠ ĐỒ MẠCH IN:
V LINH KIỆN SỬ DỤNG TRONG MẠCH
 Khối điều khiển trung tâm : Vi điều khiển 89S52 (1 con)
 Mạch tạo xung: 1 IC 555
 Transistor A1015 ( 4 con)
 Điện trở 1K,10K.Tụ 10uF
 Led 7 đoạn (4 con)


VI :MÃ NGUỒN CHƯƠNG TRÌNH
#include <at89x52.h>
#include <stdio.h>

sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
#define P7S P0

sbit SW1 = P1^4;
sbit SW3 = P1^5;
sbit SW2 = P1^6;
unsigned int dem,dem1,i,n,j,et1;
unsigned int ng,tr,ch,dv,dp;
unsigned char ma_bcd[11] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; // Common
Anode
// unsigned char ma_bcd[10] =
{0x0A,0xFA,0x4C,0x68,0xB8,0x29,0x09,0x7A,0x08,0x28}; // Common
Anode
void couter_t0(void) interrupt 3
{
et1 ++;
if (et1 > 10000)
{
TR0 = 0;
et1 = 0;
dem1 = TH0;
dem1 <<= 8;

dem1 += TL0;
dem = dem1;
TH0 = 0;
TL0 = 0;
TR0 = 1;
TR1 = 1;
if(SW1 == 0) // 1-100
{
if(dem > 100)dem = 101;
ng = 10;
tr = dem/100;
ch = (dem%100)/10;
dv = dem%10;
}
else if(SW2 == 0) //100- 500
{
if(dem > 500)dem = 501;
ng = 10;
tr = (dem/100)%10;
ch = (dem%100)/10;
dv = dem%10;
}
else if(SW3 == 0) // 1k-5k
{
if(dem > 5000)dem = 5001;
ng = (dem/1000)%10;
tr = (dem/100)%10;
ch = (dem%100)/10;
dv = dem%10;
}

}
}
void delay(unsigned int d)
{
for(i=0;i<d;i++);
}
// Program scan four led 7seg data output P1
void scan_7seg(void)
{
LED1 = LED2 = LED3 = LED4 = 1;
P7S = 0xff;
for(i=0;i<10;i++)
{
LED1 = 0; // Enable Led 1 display
P7S = ma_bcd[ng]; // Output data led 2
delay(50); // Delay eyes see display
LED1 = 1; // Disable Led 1 display
P7S = 0xff;
LED2 = 0; // Enable Led 2 display
P7S = ma_bcd[tr]; // Output data led 2
delay(50); // Delay eyes see display
LED2 = 1; // Disable Led 1 display
P7S = 0xff;
LED3 = 0; // Enable Led 3 display
P7S = ma_bcd[ch]; // Output data led 2
delay(50); // Delay eyes see display
LED3 = 1; // Disable Led 1 display
P7S = 0xff;
LED4 = 0; // Enable Led 4 display
P7S = ma_bcd[dv]; // Output data led 2

delay(50); // Delay eyes see display
LED4 = 1; // Disable Led 1 display
P7S = 0xff;

LED1 = LED2 = LED3 = LED4 = 1;
}
}
void main()
{
TMOD = 0x25;
TH1 = TL1 = -100;

EA = 1;
ET1 = 1;
TR1 = 1;
TR0 = 1;
et1 = 0;
dem = 0;
while (1)
{
scan_7seg();
}
}

×