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

THIẾT KẾ BỘ ĐO TẦN SỐHIỂN THỊ MÀN HÌNH TINH THỂ LỎNG (LCD)

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 (712.84 KB, 23 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

ĐỒ ÁN MÔN HỌC
ĐỀ TÀI: THIẾT KẾ BỘ ĐO TẦN SỐ
HIỂN THỊ MÀN HÌNH TINH THỂ LỎNG (LCD)

Giáo viên hướng dẫn:
Sinh viên thực hiện: LÊ VĂN DŨNG
NGUYỄN ĐÌNH SƠN
MAI HUY LỢI
Lớp:

CĐ-CĐT-K9


Đồ án mơn Vi điều khiển

Mục lục
Trang
Mục lục........................................................................................................2
Lời nói đầu..................................................................................................3
Chương I:Cơ sở lý thuyết.........................................................................4
I: Vi điều khiển 8052 (AT89S52)..........................................................4
1, Giới thiệu tổng quan về AT89S52..................................................4
2, Cấu tạo, chức năng các khối của AT89S52 được sử dụng...........6
II: Màn hình tinh thể lỏng (LCD)......................................................13
1, Cấu tạo..........................................................................................13
2, Nguyên lý hoạt động.....................................................................13
Chương II:Nội dung thiết kế.....................................................................15
I:Sơ đồ mạch........................................................................................15


2, Sơ đồ khối......................................................................................15
3, Sơ đồ nguyên lý............................................................................16
4, Sơ đồ mạch in...............................................................................17
II:Cấu tạo và nguyên lý hoạt động.....................................................17
1, Cấu tạo..........................................................................................18
2, Nguyên lý hoạt động.....................................................................18
3, Lập trình cho vi điều khiển..........................................................18
Chương II :Đánh giá sản phẩm................................................................22

Nguồn tài liệu tham khảo:
1, Giáo trình vi điều khiển (Trường Đại học Công Nghiệp Hà Nội)
2, www.dientuvietnam.net
3, www.alldatasheet.com
4, etech.com.vn

Trường Đại học Công Nghiệp Hà Nội

2


Đồ án mơn Vi điều khiển

LỜI NĨI ĐẦU
Chúng ta đã ở vào thời điểm gần cuối năm 2009. Hằng ngày chúng ta liên lạc
với nhau bằng điện thoại di động, giải khát bằng nước mát trong tủ lạnh, sử dụng
ATM, sử dụng máy tính lướt wed…Chúng ta đều biết rằng mọi mặt của cuộc sống đang
có sự tham gia của các gọi là “công nghệ số”. Vậy đâu là cốt lõi của sản phẩm ứng
dụng công nghệ điện tử số? Cái gì khiến cho tên lửa đạn đạo có thể đến đích chính xác,
khiến cho những con búp bê có thể nhại lại tiếng người...? Câu trả lời chỉ có thể là vi
điều khiển. Kẻ đã khởi đầu của kỷ nguyên số chính là Intel.

Chúng ta vẫn hay nhắc vi xử lý, vi điều khiển. Vậy vi xử lý và vi điều khiển
khác nhau ở đâu? Về cơ bản hai khái niệm này không khác nhau nhiều, vi xử lý là
thuật ngữ chung dùng để đề cập đến kỹ thuật ứng dụng các cơng nghệ vi điện tử, cơng
nghệ tích hợp và khả năng xử lý theo chương trình vào các lĩnh vực khác nhau. Vào
những giai đoạn đầu trong q trình phát triển của cơng nghệ vi xử lý, các chip (hay
các vi xử lý) được chế tạo chỉ tích hợp những phần cứng thiết yếu như CPU cùng các
mạch giao tiếp giữa CPU và các phần cứng khác bên ngoài. Trong giai đoạn này, các
phần cứng khác (kể cả bộ nhớ) thường khơng được tích hợp trên chip mà phải ghép nối
bên ngoài. Các phần cứng này được gọi là các ngoại vi. Về sau, nhờ sự phát triển vựơt
bậc của cơng nghệ tích hợp, các ngoại vi cũng được tích hợp vào bên trong IC và
người ta gọi các vi xử lý đã được tích hợp thêm các ngoại vi là các vi điều khiển. Việc
tích hợp thêm các ngoại vi vào trong cùng một IC với CPU tạo nhiều lợi ích như làm
giảm thiểu các ghép nối bên ngoài, giảm thiểu số lượng linh kiện điện tử phụ, giảm chi
phí cho thiết kế hệ thống, đơn giản hóa việc thiết kế, nâng cao hiệu suất và tính linh
hoạt.
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm
những ứng dụng của vi điều khiển trong thực tiễn để rồi từ đó nghiên cứu, tìm tịi, phát
triển nhiều ứng dụng khác trong đời sống hằng ngày.
Việc thiết kế đồ án được tham khảo từ các nguồn tài liệu khác nhau, do đó có thể
chúng em có thể đưa ra một số nội dung chưa rõ ràng, thiếu chính xác. Vì vậy mong
nhận được ý kiến góp ý, phê bình của các thầy, các cô để kiến thức về vi điều khiển của
chúng em được hoàn thiện hơn. Chúng em xin cảm ơn các thầy, các cô.!

Trường Đại học Công Nghiệp Hà Nội

3


Đồ án môn Vi điều khiển


Chương I: Cơ sở lý thuyết
I. Vi điều khiển 8052 : AT89S52
1, Giới thiệu tổng quan về AT89S52
- Cấu trúc bên trong:

-

Một số hình ảnh về AT89S52

Trường Đại học Công Nghiệp Hà Nội

4


CPU( CPU centra lprocessing unit):

8- bit data bus; 16- bit address
bus;
khơng gian địa chỉ 64Kbyte

Thanh ghi tích lũy A;

Thanh ghi tích lũy phụ B;

Đơn vị logic học (ALU);

Thanh ghi từ trạng thái
chương trình;

Bốn băng thanh ghi;


Con trỏ ngăn xếp;

Bộ nhớ (Memory):

Bộ nhớ chương trình( ROM)
gồm
8Kbyte Flash, ghi xóa hàng nghìn lần.
 Bộ nhớ dữ liệu( dạng SRAM) gồm 256 byte (chứa ngăn xếp – Stack)
 Vùng thanh ghi có chức năng đặc biệt SFR (Special Funtion Register).

Bộ UART, có chức năng truyền nhận nối tiếp.

3 bộ Timer/Counter 16 bit thực hiện chức năng định thời và đếm sự kiện.

Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong.

Bộ lập trình (ghi chương trình lên Flash ROM) cho phép người sử dụng có
thể nạp các chương trình cho chíp mà khơng cần các bộ nạp chun dụng.

4 cổng xuất nhập song song 2 chiều 8- bit với 32 chân.



Đồ án môn Vi điều khiển
- Chức năng các chân của AT89S52
Cấu trúc của các chân trên các Port:


Port 0( P0.0=>P0.7)

Port 0 gồm 8 chân, ngoài 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 AT89S52 giao tiếp với các
thiết bị ngồi có kiến trúc Bus như các vi mạch nhớ, mạch PIO…

Port 1( P1.0=>P1.7)
Chức năng duy nhất của Port 1 là chức năng xuất nhập cũng như các Port khác.
Port1 có thể xuất nhập theo bit và theo byte.

Port 2( P2.0=>P2.7)
Port 2 ngoài chức năng là cổng vào/ra như Port 0 và Port 1, Port 2 còn là byte cao
của bus địa chỉ khi sử dụng bộ nhớ ngoài.

Port 3( P3.0=>P3.7)
Mỗi chân trên Port 3 ngồi chức năng xuất nhập cịn có một chức năng riêng, cụ
thể như sau:
Bit
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Tên
RXD
TXD
INT0
INT1

T0
T1
/WR
/RD

Trường Đại học Công Nghiệp Hà Nội

Chức năng
Dữ liệu nhận cho Port nối tiếp
Dữ liệu truyền cho Port nối tiếp
Ngắt ngoài 0
Ngắt ngoài 1
Ngõ vào của Timer/counter0
Ngõ vào của Timer/counter1
Xung ghi bộ nhớ dữ liệu ngoài.
Xung đọc bộ nhớ dữ liệu ngoài.
6


Đồ án môn Vi điều khiển


Chân /PSEN (pin 29): là chân điều khiển đọc chương trình ở bộ nhớ ngồi.

Chân ALE (pin 30): ALE là tín hiệu điều khiển 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ư 7473.

Chân /EA (pin 31): Tín hiệu /EA cho phép chọn bộ nhớ chương trình là bộ
nhớ trong hay ngồi. EA=1 thì thực hiện chương trình trong ROM nội. EA=0 thực

hiện ở ROM ngồi.
 RST( Reset: pin 9): Ngõ vào reset trên chân số 9. khi RST=1 thì bộ vi điều
khiển sẽ được khởi động lại thiết lập ban đầu.
 XTAL1, XTAL2 (pin 18, 19): Hai chân này được nối song song với thạch
anh tần số max=33 Mhz. Để tạo dao động cho bộ vi điều khiển.
 Vcc,GND: cung cấp nguồn nuôi cho bộ
vi điều khiển cấp qua chân 20 và 40.
* Phần cứng tối thiểu để một chip AT89S52
có thể hoạt động được gồm 4 yếu tố:






Nguồn cung cấp (pin 20, pin 40).
Mạch RESET (pin 9).
Mạch dao động (pin 18 và pin 19).
Trạng thái của chân EA (pin 31).

Trường Đại học Công Nghiệp Hà Nội

7


2, Cấu tạo và chức năng các khối của AT89S52 được sử dụng trong mạch.

Đơn vị xử lý trung tâm CPU:
Chức năng của CPU là tiến hành các thao tác tính tốn xử lý, đưa ra các tín hiệu địa
chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa

ra thơng qua các lệnh (instrustions).

Bộ nhớ:

Bộ nhớ chương trình và bộ nhớ dữ liệu có khơng gian địa chỉ riêng biêt.
Bộ nhớ chương trình có địa chỉ từ 0x0000 đến 0xFFFF (64Kbyte). Người sử dụng
có thể thiết kế để chip hoạt động với bộ nhớ chương trình tích hợp sẵn trên chip bằng
cách nối tín hiệu EA (31) lên Vcc, hoặc hoạt động với bộ nhớ chương trình bên ngồi
bằng cách nối tín hiệu EA (31) xuống GND. Thơng thường , tín hiệu EA được nối cố
định lên Vcc hoặc GND nên chỉ chạy với một trong hai loại bộ nhớ chương trình.
Bộ nhớ chương trình dùng để chứa mã chương trình hướng dẫn CPU thực hiện một
nhiệm vụ nào đó. AT89S52 có bộ nhớ chương trình 8Kbyte dạng Flash, khơng bị mất
dữ liệu khi ngừng cung cấp nguồn nuôi.Bộ nhớ chương trình bên ngồi có dung lượng
tối đa là 64Kbyte.
Bộ nhớ dữ liệu dùng để chứa dữ liệu (bao gồm các tham số, các biến tạm thời…).
AT89S52 có 256byte bộ nhớ dữ liệu dạng SRAM, mất dữ liệu khi cắt nguồn ni.
Ngồi ra có thể ghép nối với bộ nhớ SRAM bên ngoài với dung lượng tối đa la
64Kbyte. RAM ngoài và RAM trong có thể cùng được sử dụng trong cùng một thiết kế.
Vùng thanh ghi có chức năng đặc biệt: SFR (Special Function Registers)



Cổng vào ra song song (Parallel I/O Port)
AT89S52 có 4 cổng vào ra song song, tên lần lượt là P0, P1, P2, P3. Mỗi cổng có 8
tín hiệu (nên cịn gọi là cổng 8- bit), mỗi tín hiệu gọi là một bit và có tên la Px.y. Trong
đó x là số thứ tự của cổng (0→3), y là số thứ tự của bit ( 0→7).
Hầu hết các cổng đều tích hợp, kiêm nhiệm thêm một số tính năng nào đó (ví dụ:
ngắt ngồi, cổng truyền thơng nối tiếp, đầu vào đếm sự kiện..). Trong phần lớn trường
hợp, khi sử dụng các tính năng kiêm nhiệm, người dùng khơng nên sử dụng cổng đó ở
chức năng vào/ra thong thường nữa. Ngoại vi on- chip sẽ nắm quyền điều khiển mức

logic tại cổng đó.
Tất cả các cổng đều là cổng hai chiều (bi-directional), tức là có thể dùng làm cổng
vào hoặc cổng ra.
Cổng vào dùng để đọc dữ liệu từ bên ngoài, cổng ra dùng để điều khiển ngoại vi
bên ngoài.
Chiều vào/ ra là độc lập giữa các cổng, thậm chí độc lập giữa các bit trong cùng một
cổng.
Sau khi reset, tất cả các cổng đều là cổng vào.
Các thanh ghi SFR liên quan: mỗi cổng liên quan đến một thanh ghi chức năng đặc
biệt 8-bit (SFR) có tên trùng với tên của cổng, lần lượt là P0, P1, P2, P3.
Trước khi sử dụng cổng, phải cấu hình hướng vào/ra cho cổng.
Để cấu hình cổng vào (input port), người dùng phải ghi giá trị logic “1” lên bit
trong thanh ghi SFR tương ứng. Sau đó có thể đọc mức logic tại cổng bằng cách đọc
thanh ghi cổng (SFR) tương ứng.


Để cấu hình làm cổng ra (output port), người dùng không phải thực hiện them bất
kỳ thao tác nào. Đơn giản, chỉ cần ghi mức logic mong muốn vào thanh ghi cổng tương
ứng.
Đặc tính điện: Mức logic 0: U<= 0.45V; I= 1.6mA
Mức logic 1: U>= 2.4V; I= 60µA

Ngắt (Interrupts)
Ngắt là những yêu cầu do ngoại vi (là các phần cứng tích hợp trên IC hoặc các tác
động từ bên ngồi) gửi tới CPU nhằm đòi hỏi những đáp ứng nhất định. Mục đích của
việc thiết kế cơ chế ngắt trong vi xử lý nhằm tiết kiệm thời gian cho CPU. Trong hầu
hết các trường hợp, vi xử lý cần phải thực hiện nhiều nhiệm vụ trong thời gian rất ngắn
và liên tục. Để đáp ứng kịp thợi với các sự kiện cần xử lý, CPU có thể tiến hành thăm
dị (polling) liên tục các sự kiện để xem khi nào chúng xảy ra thì xử lý, đáp ứng lại.Tuy
nhiên nếu làm như vậy thì lãng phí rất nhiều thời gian của CPU trong khi cịn có rất

nhiều nhiệm vụ khác đang chờ được thực hiện, ngồi ra CPU khơng thể thăm dò liên
tục nhiều sự kiện trong cùng một lúc được. Người ta tạo ra ngắt để CPU không phải
thăm dị liên tục một hay nhiều sự kiện đó. Bằng cách ghép các sự kiện cần đáp ứng với
các cơ chế ngắt khác nhau, khi một sự kiện nào đó xảy ra, phần cứng phụ trách ngắt
tích hợp trên CPU sẽ tự động báo cho CPU biết rằng sự kiện đã xảy ra. CPU dừng công
việc đang làm lại ( nhưng phải thực hiện xong lệnh đang thực hiện, dù mới chỉ ở giai
đoạn tìm nạp mã lệnh), và chuyển sang xử lý xong sự kiện gây ngắt, CPU sẽ tiếp tục
quay lại lam tiếp công việc đang dang dở (nhờ hoạt động của ngăn xếp). Nói đến ngắt
khơng thể khơng nói đến mức ưu tiên của các loại ngắt khác nhau. Có 2 loại mức ưu
tiên ngắt cơ bản là ưu tiên giữa các ngắt xảy ra đồng thời và ưu tiên giữa các ngắt xảy
ra khác thời điểm, chen vào nhau. Trong cả hai trường hợp, ngắt có ưu tiên cao hơn sẽ
luôn được phục vụ ngay lập tức.

AT89S52 có 6 nguyên nhân gây ngắt:


Tên ngắt

Ngắt ngoài 0
Ngắt
timer/counter 0
Ngắt ngoài 1
Ngắt
timer/counter 1
Ngắt cổng nối
tiếp
Ngắt
timer/counter2

Nguyên nhân gây ra

ngắt

Địa chỉ
vector
ngắt

Mức độ
ưu tiên
cứng

Cờ báo ngắt

Tín hiệu INT0 thay đổi
mức logic 1→0, hoặc giữ
ở mức logic 0
Timer/Counter0 đếm tràn
trên
Tín hiệu INT1 thay đổi
mức logic 1→0, hoặc giữ
ở mức logic 0

0x0003

1

IE0(TCON)

0x000B

2


TF0(TCON)

0x0013

3

IE1(TCON)

Timer/Counter1 đếm tràn
trên

0x001B

4

TF1(TCON)

0x0023

5

TI,RI
(SCON)

0x002B

6

TF2,EXF2

(T2CON)

Cổng nối tiếp nhận được
hoặc truyền xong một
khung dữ liệu đầy đủ
Timer/Counter2 đếm tràn
trên hoặc tín hiệu T2EX
thay đổi mức logic 1→0

Các cờ báo ngắt do INT0, INT1, Timer 0, Timer 1 bị xóa khi CPU xử lý chương
trình ngắt. Cịn cờ ngắt của cổng nối tiếp và ngắt do Timer 2 khơng tự động xóa, người
dùng phải xóa bằng phần mềm.
Thanh ghi cho phép ngắt IE (Interrupt Enable):

EA: bít cho phép hoặc cấm tất cả các ngắt. Để cho phép một ngắt thì bít tương ứng
với ngắt đó và bít EA phải được đặt bằng 1. Nếu EA=0 tất cả các ngắt đều bị cấm.
ET2: bít cho phép ngắt do Timer 2.
ES: bít cho phép ngắt truyền thong nối tiếp.
ET1: bít cho phép ngắt do Timer 1.
EX1: bít cho phép ngắt ngồi INT1.
ET0: bít cho phép ngắt do Timer 0.
EX0: bít cho phép ngắt ngồi INT0.
Mức ưu tiên của ngắt là chỉ số giúp CPU phân xử xem sẽ xử lý ngắt nào trước khi
hai hay nhiều ngắt đồng thời xảy ra, hoặc sẽ dừng việc xử lý một ngắt lại hay không khi
bị một ngắt khác chen vào. Khi xảy ra ngắt đồng thời,CPU sẽ phân xử theo trình tự ưu
tiên cứng liệt kê ở bảng trên. Khi một ngắt xảy ra chen vào quá trình xử lý dang dở của
một ngắt khác, CPU sẽ phân xử theo mức độ ưu tiên quy định bởi người dùng thông
qua thanh ghi đặt mức ưu tiên ngắt IP.
Thanh ghi ưu tiên ngắt IP (Interrupt Priority):



MSB

-

PT2

PS

PT1

PX1

PT0

PX0
LSB

PT2: bít ưu tiên ngắt do timer 2.
PS: bít ưu tiên ngắt truyền thơng nối tiếp.
PT1: bít ưu tiên ngắt do timer 1.
PX1: bít ưu tiên ngắt ngồi INT1.
PT0: bít ưu tiên ngắt do timer 0.
PX0: bit ưu tiên ngắt ngoài INT0.

Bộ định thời/ Bộ đếm (Timers/ Counters)
Timer/Counter là các ngoại vi có chức năng đếm xung nhịp (clock).
Khi đếm xung nhịp bên trong chip gọi là bộ đinh thời hay timer.
Khi đếm xung nhịp bên ngoài chip đưa và gọi là bộ đếm sự kiện hay counter.
Mỗi xung nhịp xuất hiện them, giá trị của timer/counter sẽ tự động tăng thêm 1.

Khi timer/counter đếm vượt quá giá trị giới hạn mà nó có thể biểu diễn, giá trị đếm
sẽ tự động xóa về 0 và đếm lại từ đầu. Sự kiện này được gọi là tràn trên (overflow).
Giá trị lớn nhất tùy thuộc vào chế độ hoạt động.
Khi dừng đếm, giá trị đếm của timer/counter vẫn giữ nguyên, trừ khi mất nguồn
ni, reset hay người dùng chủ định xóa bằng lệnh.
Khi được cho phép đếm, timer/counter sẽ đếm từ giá trị hiện đang giữ.
AT89S52 có 3 timer/counter 16bit lần lượt là timer/counter 0, timer/counter 1,
timer/counter 2.
Các timer đều có ngắt:
Timer 0 có ngắt do tràn.
Timer 1 có ngắt do tràn.
Timer 2 có ngắt do tràn hoặc do sự kiện capture.
Các thanh ghi liên quan:
- Thanh ghi dữ liệu (hay thanh ghi giá trị đếm):TH0,TL0 (Timer0) TH1,TL1
(Timer1) TH2,TL2 (Timer2) đều là các thanh ghi 8 bit.
- Thanh ghi điều khiển TMOD(Sử dụng cho timer/counter 0 và timer/counter 1):

GATE: bit quy định yếu tố cho phép timer/counter đếm hay dừng. Nếu GATE=0,
timer/counter sẽ đếm hay dừng phụ thuộc vào trạng thái bit TRx (thanh ghi TCON).
Nếu GATE=1, timer/counter sẽ đếm nếu bit TRx=1 (thanh ghi TCON) và tín hiệu ngắt
ngồi INTx ở mức cao. Trong trường hợp này, nếu TRx-0 hoặc tín hiệu ngắt ngồi
INTx ở mức thấp, timer/counter sẽ dừng đếm.
C/T: bit lựa chọn xung nhịp đưa vào đếm. Nếu C/T = 0, xung nhịp đưa vào đếm
chính là xung nhịp của CPU (lúc này gọi là bộ định thời – timer). Nếu C/T = 1, xung
nhịp đưa vào đếm là xung nhịp lấy từ bên ngồi vào qua tín hiệu T0 và T1 (lúc này gọi
là bộ đếm sự kiện – counter).


M1:M0 0:0 = Mode 0: timer/counter 13bit ghép bởi <5bit thấp TL>:<thanh ghi TH>
0:1 = Mode 1: timer/counter 16bit ghép bởi <thanh ghi TH>:<thanh ghi TL>

1:0 = Mode 2: timer/counter 8bit, đếm bằng TL,khi tràn tự động nạp TH vào TL.
1:1 = Mode 3: TL0 là timer/counter 8bit, sử dụng các bit điều khiển của timer0.
TH0 là timer 8bit, sử dụng các bit điều khiển của timer 1. Timer 1
không hoạt động ở chế độ này.

- Thanh ghi TCON (Sử dụng cho timer/counter 0 và timer/counter 1):

TF1: Cờ ngắt của timer/countet 1, khi =1 báo hiệu rằng timer/counter 1 đã đếm
vượt quá trị lớn nhất mà nó có thể biểu diễn (255 đối với chế độ 8bit và 65535 đối với
chế độ 16bit).
TR1: bit cho phép timer/counter 1 hoạt động đếm hoặc dừng.
TF0: Cờ ngắt của timer/countet 0, khi =1 báo hiệu rằng timer/counter 0 đã đếm
vượt quá trị lớn nhất mà nó có thể biểu diễn (255 đối với chế độ 8bit và 65535 đối với
chế độ 16bit).
TR0: bit cho phép timer/counter 0 hoạt động đếm hoặc dừng.
IE1: Cờ ngắt của ngắt ngoài 1.
IT1: Bit cho phép chọn loại ngắt ngoài cho INT1.
IE0: Cờ ngắt của ngắt ngoài 0.
IT0: Bit cho phép chọn loại ngắt ngoài cho INT0.
Thanh ghi T2CON (Sử dụng cho Timer/counter 2):

TF2: Cờ báo tràn của Timer 2. TF2 không được thiết lập khi TCLK hoặc RCLK
được đặt bằng 1.
EXF2: Cờ ngắt ngoài của Timer 2. EXF2 =1 khi xảy ra sự nạp lại hoặc thu nhận.
EXF2=1 cũng gây ra ngắt do Timer 2 nếu như ngắt này được lập trình cho phép.
RCLK: Bit chọn Timer cung cấp xung nhịp cho đường nhận của cổng nối tiếp.
TCLK: Bit chọn Timer cung cấp xung nhịp cho đường truyền của cổng nối tiếp.
EXEN2: Bit điều khiển hoạt động của Timer2, khi EXEN2=1 việc nạp lại hoặc thu
nhận (capture) diễn ra khi có sự chuyển trạng thái từ 1 sang 0 ở chân T2EX nếu Timer2
không sử dụng để cung cấp tốc độ baud cho cổng nối tiếp.

TR2: Bit điều khiển hoạt động của Timer 2.
C/T2: Bit lựa chọn xung nhịp đưa vào đếm (tương tự TR0 và TR1).
CP/RL2: Bit chọn chế độ capture hay nạp lại của Timer 2. Khi CP/RL2=1 việc thu
nhận được thực hiện khi có sườn xuống ở chân T2EX và bit EXEN2 được đặt bằng 1.
Khi CP/RL2=0 việc nạp lại được thực hiện khi hoặc là Timer2 tràn hoặc khi có sương
xuống ở chân T2EX và bit EXEN2 được đặt bằng 1.Nếu RCLK hoặc TCLK=1, bit này
được bỏ qua, Timer 2 tự nạp khi tràn.


Các chế độ của Timer 2:

- Thanh ghi điều khiển T2MOD (Sử dụng cho Timer 2):

T2OE: Bit cho phép đầu ra khi sử dụng Timer 2 để tạo xung (chế độ Clock Out).
DCEN: Bit cho phép Timer 2 hoạt động như một bộ đếm tiến/lùi.
- Thanh ghi chứa giá trị nạp lại (chế độ Auto- Reload) hoặc chứa giá trị capture (chế
độ Capture) (Sử dụng cho Timer 2): RCAP2H và RCAP2L: là các thanh ghi 8bit.
* Trong đồ án, chúng em khơng sử dụng cổng nối tiếp vì vậy giao tiếp cổng nối
tiếp (UART) không được giới thiệu ở đây.

III, Bộ hiển thị màn hình tinh thể lỏng (LCD)
1., Cấu tạo:
Giới thiệu về LCD 1602:
Là thiết bị thong dụng dung để hiển thị thông tin, đặc biệt là chữ cái. LCD1602 là
LCD có 16 cột và 2 hàng, nó có thể hiển thị tối đa 32 kí tự cùng lúc (16 kí tự hang trên
và 16 kí tự hang dưới)
Hình ảnh LCD 16*2


Chức năng các chân LCD:

Chân số

Ký hiệu

I/O

Vss
Vdd
Vee
RS

Mức
logic
0/1

1
2
3
4
5

R/W

0/1

I

6
7
8

9
10
11
12
13
14
15
16

E
DB1
DB2
DB3
DB4
DB5
DB6
DB7
DB8
A
K

1,1=>0
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1

-

I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
-

I
I

Chức năng
Nguồn cung cấp(GND)
Nguồn cung cấp(+5V)
Điện áp để điều chỉnh độ tương phản
Lựa chọn thanh ghi:
0= thanh ghi lệnh
1=thanh ghi dữ liệu
0=ghi vào LCD module
1=đọc từ LCD module
Tín hiệu cho phép, tích cực mức cao
Data bus line 0(LSB)
Data bus line1
Data bus line2
Data bus line3

Data bus line4
Data bus line5
Data bus line6
Data bus line7(MSB)
Cực Anot của đèn Backlight
Cực Katot của đèn Backlight

Nguyên tắc hiển thị ký tự trên LCD: Một chương trình hiển thị ký tự trên LCD sẽ đi
theo bốn bước sau:
1) Xóa tồn bộ màn hình.
2) Đặt chế độ hiển thị.
3) Đặt vị trí con trỏ (nơi bắt đầu của ký tự hiển thị).
4) Hiển thị ký tự.
Chú ý:
+ Các bước 3, 4 có thể lặp lại nhiều lần nếu cần hiển thị nhiều ký tự.
+ Mỗi khi thực hiện ghi lệnh hoặc ghi dữ liệu hiển thị lên LCD cần phải kiểm tra cờ
bận trước. Vì vậy, cần phải chủ động phân phối thời gian khi ra lệnh cho LCD( ví dụ
sau khi xóa màn hình sau khoảng 2ms mới ra lệnh khác vì thời gian để LCD xóa màn
hình là 1,64ms).
+ Chế độ hiển thị mặc định sẽ là hiển thị dịch, vị trí con trỏ mặc định sẽ là đầu dịng
thứ nhất.
Bảng mã lệnh điều khiển LCD:


Bản đồ địa chỉ vị trí của LCD

Muốn con trỏ đi đến vị trí nào của LCD thì ta phải gửi lệnh tới LCD với mã lệnh là
địa chỉ trong bảng cộng với 0x80.



Chương II: Nội dung thiết kế
I: Sơ đồ mạch
1, Sơ đồ khối.

KHỐI NHẬN
TÍN HIỆU

So do nguyen ly

KHỐI XỬ LÝ
TRUNG TÂM
CPU
(AT89S52)

KHỐI HIỂN
THỊ: LCD


3, Sơ đồ mạch in
Mạch CPU


Mạch tạo xung

I: Cấu tạo và nguyên lý hoạt động
1, Cấu tạo

Khối nhận tín hiệu: Khối này sẽ nhận xung từ mạch tạo dao động sử dụng
LM555. chân nhận tín hiệu xung này là chân T0.


Khối hiển thị LCD: căn cứ vào chức năng các
chân của LCD, LCD sẽ được nối với AT89S52 như sau:
Chân 1 nối GND
Chân 2 nối +5V
Chân Vef nối với biến trở 10K để chỉnh độ tương phản.
Chân RS, RW, EN được nối với 3 chân của vi điều khiển
để điều khiển LCD.
2 chân của đèn backlight được nối như sau:

2, Nguyên lý hoạt động của mạch
Nguyên lý hoạt động của mạch là đếm xem trong 1s thì có bao nhiêu xung ở chân
T0, số xung đó sẽ là tần số đang cần đo. Do sử dụng Timer 0 mode 1 nên số xung lớn
nhất mà A89S52 có thể đếm được là 65535, tương ứng với 65,535KHz, và sai số ở các
giá trị đo là như nhau, nhưng để đảm bảo yêu cầu đề tài đặt ra, mạch được thiết kế có 3
led đơn để báo tần số đang đo đang ở dải đo nào: 0-100Hz, 100Hz-500Hz; 1KHz5KHz. Khi mà giá trị tần số đo được thuộc dải tần số nào thì led tương ứng sẽ sáng, cịn
nếu khơng thuộc dải tần số nào thì vẫn hiển thị giá trị tần số đo được ra LCD nhưng các
led sẽ không sáng.
Timer 0 được dùng ở chế độ counter, tức là sẽ đếm sự kiện ngoài mode 1, khi có 1
xung từ cao xuống thấp trên chân T0, thì giá trị đếm sẽ tự động tăng lên 1, giá trị đếm
sẽ được lưu vào 2 thanh ghi 8 bit, TH0 là thanh ghi 8 bit cao, và TL0 là thanh ghi 8 bit
thấp. Vì vậy khi đưa xung vào đây thì Timer 0 sẽ tự động đếm, giá trị tối đa đếm được
là 65535 xung.


Timer 1 được sử dụng ở chế độ tự động nạp lại, lấy clock của hệ thống, Timer 1 có
nhiệm vụ đếm thời gian 1s. Khi timer 1 đếm được 1s thì CPU sẽ cho timer 0 dừng đếm,
sau đó lấy dữ liệu từ TH0 và TL0, khi đó dữ liệu mà Timer 0 lưu giữ chính là số xung
trong 1s, khi đó tần số chính bằng giá trị xung đó.
Để lấy được giá trị xung đó thì phải thực hiện tính tốn; lúc đó tần số chính là:
tanso= (TH0*256) + TL0.

Sau khi đã có giá trị tần số thì sẽ thực hiện hiển thị ra LCD.
Muốn hiển thị được dữ kiệu ra LCD thì ta phải gửi mã ASCII của kí tự đó. Mỗi lần
gửi chỉ có thể gửi 1 kí tự, do vạy ta phải tách dữ kiệu vừa nhận được thành các số riêng
biệt, sau đó sẽ đươc cộng với ‘0’, tức là cộng với mã ASCII của số 0, rồi gửi lần lượt
các chữ số lên LCD, ta sẽ có giá trị tần số đang đo.
3, Lập trình cho vi điều khiển.
Code chương trình:
#include<AT89X52.h>
#define
#define
#define
#define

LCD_DATA P0
LCD_RS
LCD_RW
LCD_E

P2_0
P2_1
P2_2

#define
LED1 P1_0
#define
LED2 P1_1
#define
LED3 P1_2
//=============================================
// Khai báo biến và hằng số

unsigned int
count,tanso;
#define
N2
100
//=============================================
// Khai báo các hàm
void Delay(unsigned int);
void LCD_WriteCommand(unsigned char);
void LCD_WriteData(unsigned char);
void LCD_SendStringFlash(const unsigned char*);
void LCD_Gotoxy(unsigned char,unsigned char);
void hienthi();
//=============================================
// Định nghĩa các hàm
Void main()
{
EA=1;ET1=1;
TMOD=0x25;
TH1=TL1=-250;
// cam LCD
LCD_E = 0;



×