Tải bản đầy đủ (.docx) (38 trang)

Đồ án thiết kế máy tính bỏ túi sử dụng vi xử lý 89c51

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 (538.93 KB, 38 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN

ĐỒ ÁN 1
Đề tài
Thiết kế máy tính bỏ túi sử dụng vi xử lý 89C51
GVHD : Thầy Nguyễn Tuấn Ninh
SVTH : Nguyễn Cao Nguyên 20101947
Nguyễn Danh Tân 20102128
Lều Như Tình 20102321
Ngô Đình Vũ 20102577
1
Lời nói đầu
Ngày nay cùng với sự tiến bộ của khoa học kỹ thuật, đặc biệt là ngành vi điều khiển.
Đời sống xã hội ngày càng phát triển cao dựa trên những ứng dụng của khoa học vào đời
sống. Vì vậy mà những công nghệ điện tử mang tính tự động ngày càng được ứng dụng
rộng rãi. Trong số đó có sự đóng góp không nhỏ của kỹ thuật vi điều khiển. Các bộ vi
điều khiển đang được ứng dụng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh
vực kỹ thuật và đời sống xã hội. Hầu hết là các thiết bị được điều khiển tự động từ các
thiết bị văn phòng cho đến các thiết bị trong gia đình đều dung các bộ vi điều khiển nhằm
đem lại sự tiện nghi cho con người trong thời đại công nghiệp hóa, hiện đại hóa.
Ngoài ra cùng với sự phát triển của các ngành kinh tế, giáo dục, y học,… làm tăng số
lượng công việc tính toán và xử lý số liệu và phải tiếp cận những con số lớn và lẻ mà
không thể tính toán bằng tay được. Chính vì vậy chúng em lựa chọn đề tài cho đồ án 1 là
:” Thiết kế máy tính bỏ túi sử dụng vi xử lý 89C51 “ này.
Tuy đã cố gắng thực hiện đồ án trong sự nghiêm túc và trách nhiệm nhất, nhưng do khả
năng nghiên cứu cũng như kiến thức các thành viên còn nhiều hạn chế nên không thể
tránh khỏi những lỗi và thiếu sót. Rất mong nhận được những ý kiến đóng góp tích cực từ
thầy Nguyễn Tuấn Ninh !
2
MỤC LỤC


Trang
Trang bìa ………………………………………………………………………………….1
Lời nói đầu ……………………………………………………………………………… 2
Phần 1: GIỚI THIỆU …………………………………………………………………… 4
Phần 2 : CƠ SỞ LÝ THUYẾT……………………………………………………………5
I Các linh kiện sử dụng trong mạch ………………………………………………… ….5
II Đặc điểm, cấu tạo, chức năng của các linh kiện …………………………………… 5
Phần 3 : THIẾT KẾ VÀ MÔ PHỎNG …………………………………………… … 21
I Sơ đồ khối ……………………………………………………………………….….…21
II Mô phỏng ……………………………………………………………………….…….22
III Code chương trình ……………………………………………………………… ….23
Phần 4 : KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN ………………………………… ….39
Các tài liệu tham khảo …………………………………………………………….……40
Phần I
GIỚI THIỆU
I. Mục tiêu đề tài
- Nâng cao hiệu quả tính toán số liệu
- Tăng tốc tính toán và xử lý số liệu
3
- Thấy được tầm quan trong của việc ứng dụng vi điều khiển vào các lĩnh vực
khác nhau trong cuộc sống
Phần 2
CƠ SỞ LÝ THUYẾT
I. CÁC LINH KIỆN SỬ DỤNG TRONG MẠCH
- Vi điều khiển AT89C51
- Cơ cấu hiển thị LCD 16x2
- Bàn phím keypad
- Các loại tụ điện, điện trở, biến trở…
4
- Thạnh anh 12Mhz

- Nguồn 1 chiều 5V
II. ĐẶC ĐIỂM, CẤU TẠO, CHỨC NĂNG CỦA CÁC LINH KIỆN
1. Vi điều khiển AT89C51
a. Giới thiệu chung về 89C51
• Vi điều khiển (VĐK) là một hệ vi xử lý được tổ chức như một chip. IC VĐK
AT89C51 tương thích với họ MCS51 có những đặc điểm sau :
- Có 40 chân
- 8 KB EPROM bên trong
- Dải tần số hoạt động từ 0Mhz đến 24 Mhz
- Có 4 port xuất nhập (I/O) 8 bit
- Có 128 byte RAM
- 2 bộ định thời 16 bit
- Mạch giao tiếp nối tiếp
- 64 KB vùng nhớ dữ liệu ngoại.
- 64 KB vùng nhớ mã ngoài
- Bộ xử lý bit thao tác trên các bit riêng
- 4 μs cho hoạt động nhân hoặc chia
- 210 vị trí nhớ định địa chỉ, mỗi vị trí một bit
- Có các thanh ghi chức năng, cơ chế điều khiển ngắt
- Các bộ thời gian dung trong lĩnh vực chia tần số và tạp thời gian thực
-
• Sơ đồ chân 89C51
5
• Cấu trúc bên trong của 89C51
6
89C51 có tất cả 40 chân có chức năng như các đường xuất nhập. Trong đó có 24 chân
có tác dụng kép (có nghĩa 1 chân có 2 chức năng), mỗi đường có thể hoạt động như
đường xuất nhập hoặc như đường điều khiển hoặc là thành phần của các bus dữ liệu và
bus địa chỉ.
7

1. GND ( chân 20) : chân nối đất 0V.
2. Port 0 là port có 2 chức năng ở các chân 32 – 39 của 8951. Trong các thiết kế cỡ
nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường IO. Đối với các
thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa bus địa chỉvà bus
dữliệu
3. Port 1 là port IO trên các chân 1-8. Các chân được ký hiệu P1.0, P1.1, P1.2, … có
thể dùng cho giao tiếp với các thiết bị ngoài nếu cần. Port 1 không có chức năng
khác, vì vậy chúng chỉ được dùng cho giao tiếp với các thiết bị bên ngoài.
4. Port 2 là 1 port có tác dụng kép trên các chân 21 - 28 được dùng như các đường
xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhớ mở
rộng.
5. Port 3 là port có tác dụng kép trên các chân 10 - 17. Các chân của port này có
nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính đặc biệt
của 8951 như ở bảng sau:
Bit Tên Chức năng chuyển đổi
P 3.0
P 3.1
P 3.2
P 3.3
P 3.4
P 3.5
P 3.6
P 3.7
RxD
TxD
INT0
INT1
TO
T1
WR

RD
Ngõ vào dữ liệu nối tiếp
Ngõ xuất dữ liệu nối tiếp
Ngõ vào ngắt cứng thứ 0
Ngõ vào ngắt cứng thứ 1
Ngõ vào của TIMER/COUNTER thứ 0
Ngõ vào của TIMER/COUNTER thứ 1
Tín hiệu ghi dữ liệu lên bộ nhớ ngoài
Tín hiệu đọc bộ nhớ dữ liệu ngoài
6. PSEN ( Program store enable ): PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho
phép đọc bộ nhớ chương trình mở rộng thường được nói đến chân 0E\ (output
enable) của Eprom cho phép đọc các byte mã lệnh. PSEN ở mức thấp trong thời
gian Microcontroller 8951 lấy lệnh. Các mã lệnh của chương trình được đọc từ
8
Eprom qua bus dữ liệu và được chốt vào thanh ghi lệnh bên trong 8951 đểgiải mã
lệnh. Khi 8951 thi hành chương trình trong ROM nội PSEN sẽ ở mức logic 1.
7. ALE ( Address latch enable ) : Khi 8951 truy xuất bộ nhớ bên ngoài, port 0 có
chức năng là bus địa chỉ và bus dữ liệu do đó phải tách các đường dữ liệu và địa
chỉ. Tín hiệu ra ALE ởchân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các
đường địa chỉvà dữ liệu khi kết nối chúng với IC chốt. Tín hiệu ra ở chân ALE là
một xung trong khoảng thời gian port 0 đóng vai trò là địa chỉ thấp nên chốt địa
chỉ hoàn toàn tự động. Các xung tín hiệu ALE có tốc độbằng 1/6 lần tần số dao
động trên chip và có thể được dùng làm tín hiệu clock cho các phần khác của hệ
thống. Chân ALE được dùng làm ngõ vào xung lập trình cho Eprom trong 8951.
8. EA ( External access) : Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1
hoặc mức 0. Nếu ở mức 1, 8951 thi hành chương trình từ ROM nội trong khoảng
địa chỉ thấp 8 Kbyte. Nếu ở mức 0, 8951 sẽ thi hành chương trình từ bộ nhớ mở
rộng. Chân EA được lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong
8951.
9. RST ( Reset ) : Ngõ vào RST ở chân 9 là ngõ vào Reset của 8951. Khi ngõ vào tín

hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp
những giá trị thích hợp để khởi động hệ thống. Khi cấp điện mạch tự động Reset.
10. X1, X2 : Bộ dao động được tích hợp bên trong 8951, khi sử dụng 8951 người
thiết kế chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số
thạch anh thường sử dụng cho 8951 là 12Mhz.
11.Vcc : chân nguồn nối lên 5V .
b. Tổ chức bộ nhớ
Bộ nhớ bên trong chip bao gồm ROM, RAM và EPROM. RAM trên chip bao
gồm vùng RAM đa chức năng, vùng RAM với từng bit được định địa chỉ, các dây
9
thanh ghi (bank) và các thanh ghi chức năng đặc biệt.
• Có 2 đặc tính đáng lưu ý:
+ Các thanh ghi và các port I/O được định địa chỉ theo kiểu ánh xạ bộ nhớ và được
truy xuất như một vị trí nhớ trong bộ nhớ.
+ Vùng track thường chú trong RAM trên chip thay vì ở trong RAM ngoài như
đối với các bộ vi xử lý.
Vùng RAM đa mục đích :
Có 80 byte, địa chỉ từ 30H đến 7FH. Bất cứ vị trí nào trong vùng RAM ta đều có
thể truy xuất tự do bằng cách sử dụng định địa chỉ trực tiếp hoặc gián tiếp.
Vùng RAM đại chỉ:
Chip 8951 chứa 210 vị trí định địa chỉ đó có 128byte chứa trong các byte ở địa
chỉ 20H đến 2FH (16bytex8=128bits), phần còn lại chứa trong các thanh ghi chức
năng đặc biệt.
- Công dụng:
+ Truy xuất các bit riêng rẽ thông qua các phần mềm
+ Các port có thể định địa chỉ từng bit, làm đơn giản việc giao tiếp băng phần
mền với các thiết bị xuất nhập đơn bit.
Các thanh ghi chức năng đặc biệt (SFR):
Không phải tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chit có
21 địa chỉ được định nghĩa.

Các thanh ghi chức năng đặc biệt bao gồm:
+ Từ trạng thái chương trình PSW: có địa chỉ là D0H
+ Thanh ghi B: Có địa chỉ F0H được dùng chung với thanh chứa A trong các
phép toán nhân và chia.
10
+ Con trỏ Stack (SP): là thanh ghi 8bit ở địa chỉ 81H, nó chứa địa chỉ của dữ liệu
hiện đang ở đỉnh của stack
+ Con trỏ dữ liệu DPTR: Dùng để truy xuất bộ nhớ chương trình ngoài hoặc bộ
nhớ dữ liệu ngoài. DPTR là thanh ghi 16bit có địa chỉ 82H (bytethấp) và 83H
(bytecao).
+ Các thanh ghi port :
Port 0 : đại chỉ 80H
Port 1 : địa chỉ 90H
Port 2: địa chỉ A0H
Port 3: địa chi B0H
+ Các thanh ghi định thời:
89C51có 2 bộ định thời/đếm dùng để định khoảng thời
gian hoặc đếm các sự kiện.
- Bộ định thời 0: địa chỉ 8AH (TL0) và 8CH (TH0)
- Bộ định thời 1: địa chỉ 8bH (TL1) và 8DH (TH1)
Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD
ở địa chỉ 89H và thanh ghi điều khiển bộ định thời TCON ở địa chỉ 88H (chỉ
cóTCON được định địa chỉ từng bit).
+ Các thanh ghi của port nối tiếp: 89C51 có 1 port nối tiếp để truyền thông
với các thiết bị như các thiết bị đầu cuối hoặc model
+ Các thanh nghi ngắt: có 1 cấu trúc ngắt với 2 mức ưu tiên và 5 nguyên nhân
ngắt. Các ngắt bị vô hiệu hóa sau khi reset hệ thống và được phép bằng cách vào
thanh ghi IE ở địa chỉ A8H. Mức ưu tiên ngắt được thiết lập bởi thanh ghi IP ở địa
chỉ B8H.
+Thanh ghi điều khiển nguồn: PCON có địa chỉ 87H

c. Tập lệnh của 89C51
11
* Các kiểu định địa chỉ: Trong tập lệnh có 8 chế độ đánh địa chỉ
- Thanh ghi đại chỉ
- Địa chỉ trực tiếp
- Địa chỉ gián tiếp
- Địa chỉ tức thời
- Địa chỉ tuyệt đối
- Địa chỉ tương đối
- Địa chỉ dài
- Địa chỉ tham chiếu
* Các nhóm lệnh của 89C51
+ Nhóm lệnh số học
+ Nhóm lệnh logic
+ Nhóm lệnh di chuyển dữ liệu
+ Nhóm lệnh xử lý bit
+ Nhóm lệnh rẽ nhánh
2. Cơ cấu hiện thị LCD 16x2
a. Hình dáng và kích thước:
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên
hình 1 là loại LCD thông dụng.
12

Hình 1 : Hình dáng của loại LCD thông dụng
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên
trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được đánh số
thứ tự và đặt tên như hình 2 :


Hình 2 : Sơ đồ chân của LCD



13
14
Chân

hiệu
Mô tả

1 Vss
Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với
GND của mạch điều khiển
2 VDD
Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này
với VCC=5V của mạch điều khiển
3 VEE Điều chỉnh độ tương phản của LCD.
4 RS
Chân chọn thanh ghi (Register select). Nối chân RS với logic
“0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của
LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của
LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR
bên trong LCD.
5 R/W
Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic
“1” để LCD ở chế độ đọc.
6 E
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus

DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho
phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp
nhận) thanh ghi bên trong nó khi phát hiện một xung (high-
to-low transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi
phát hiện cạnh lên (low-to-high transition) ở chân E và được
LCD giữ ở bus đến khi nào chân E xuống mức thấp.
7 - 14
DB0 -
Tám đường của bus dữ liệu dùng để trao đổi thông tin với
MPU. Có 2 chế độ sử dụng 8 đường bus này :
+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit
Bảng 1 : Chức năng các chân của LCD
Chú ý : Chân 15 và chân 16: ghi là A và K. Nó là anot và katot của một
con led dùng để sáng LCD trong bóng tối, chúng ta có thể k nối , nếu sử dụng nối
chân 15 với trở 220 or 330 ôm lên VCC , chân 16 nối đất.
b. Các thành phần chức năng
- Cờ Busy (BF - Busy flag): Nếu BF = 1, LCD đang trong quá trình thực thi một
lệnh. Khi đó, các lệnh gởi tiếp theo sẽ bị bỏ qua. BF được đọc tại chân D7 khi RS
= 0 và R/W = 1. Do đó, trước khi thực hiện một lệnh, cần kiểm tra BF trước, nếu
BF = 0 thì mới gởi lệnh.
DD
- Vùng RAM hiển thị DDRAM : (Display Data RAM)
Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM
là một ô kí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8 bit, LCD
sẽ hiển thị tại vị trí tương ứng trên màn hình một kí tự có mã 8 bit mà bạn đã cung
cấp. Hình sau đây sẽ trình bày rõ hơn mối liên hệ này :

15


Hình 4 : Mối liên hệ giữa địa chỉ của DDRAM và vị trí hiển thị của LCD
Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa được 80 kí tự mã 8
bit.Những vùng RAM còn lại không dùng cho hiển thị có thể dùng như vùng RAM
đa mục đích.
Lưu ý là để truy cập vào DDRAM, ta phải cung cấp địa chỉ cho AC theo mã HEX
- Bộ đếm địa chỉ AC : (Address Counter)
Sau khi ghi vào (đọc từ) RAM, bộ đếm AC tự động tăng lên (giảm đi) 1 đơn
vị và nội dung của AC được xuất ra cho MPU thông qua DB0-DB6 khi có thiết
lập RS=0 và R/W=1 (xem bảng tóm tắt RS - R/W).
Lưu ý: Thời gian cập nhật AC không được tính vào thời gian thực thi lệnh mà
được cập nhật sau khi cờ BF lên mức cao (not busy), cho nên khi lập trình hiển thị,
bạn phải delay một khoảng tADD khoảng 4uS-5uS (ngay sau khi BF=1) trước khi
nạp dữ liệu mới.
16

Hình 4 : Giản đồ xung cập nhật AC
- CGROM (Character Genaration ROM):
Chứa các mô hình ký tự sẽ hiện thị trên LCD, bao gồm 192 ký tự 5x7 theo
bảng mã ASCII (nghĩa là khi DDRAM chứa giá trị 41H tương ứng với mã ASCII
của ký tự 'A' thì trên LCD sẽ hiện 'A'), trong dó chỉ có các mã từ 00H-0Fh sẽ
không lấy theo mã ASCII mà lấy theo các ký tự đã định nghĩa trong CGRAM.
- Vùng RAM chứa kí tự đồ họa CGRAM : (Character Generator RAM)
Như trên bảng mã kí tự, nhà sản xuất dành vùng có địa chỉ byte cao là 0000 để
người dùng có thể tạo các mẫu kí tự đồ họa riêng. Tuy nhiên dung lượng vùng này
rất hạn chế: Ta chỉ có thể tạo 8 kí tự loại 5x8 điểm ảnh, hoặc 4 kí tự loại 5x10 điểm
ảnh.
- Các chế độ truyền dữ liệu:
LCD 16x2 có 2 chế độ truyền dữ liệu : chế độ 8 bit ( dùng cả D0-D7 ) và chế độ 4
bit ( không dùng D3 - D0, chỉ dùng D7-D4 ). Trong trường hợp dùng chế độ 4 bit,

dữ liệu 8 bit sẽ được truyền 2 lần: truyền 4 bit cao rồi tiếp tục truyền 4 bit thấp. Sau
khi thực hiện truyền xong 8bit, BF mới chuyển lên 1.
- Bảng mã lệnh trong LCD 16×2 :
17
3. Bàn phìm keypad small calculator
18
Hình 4: Cơ cấu bàn phím keypad small calculator
4.Các linh kiện khác
- Mạch tạo dao động thạch anh 12MHz:
Cấp nguồn 5V cho vi điều khiển (Vcc: 5V chân 40; GND: 0V chân 20). Trong đó
C1,C2= 30pF±10pF (thường được sử dụng với C1,C2 là tụ 33pF) dùng ổn định
dao động cho thạch anh.
Phần 3:
19
THIẾT KẾ VÀ MÔ PHỎNG
I. SƠ ĐỒ KHỐI
II. MẠCH MÔ PHỎNG
20
- Đấy là mạch mô phỏng nguyên lý cấu tạo máy tính bỏ túi sử dụng chip AT89C51,
bàn phím và LCD16x2 trên phần mềm Proteus 7.8
21
III. CODE CHƯƠNG TRÌNH
1. Các thư viện sử dụng trong chương trình
a. Thư viện LCD 16x2 chế độ 8 bit
/*==================Thu vien LCD16x2==============================
- Cac chan:
+ Vss : Mass
+ Vcc : Nguon 5V
+ Vee : Cap nguon dieu khien tuong phan
+ RS : Chon thanh ghi(register select).

1- thanh ghi data
0- Thanh ghi lenh
+ RW : read/write(1/0)
+ EN : Cho phep(enable)
- Ma lenh LCD:
+ 01h Xoa man hinh hien thi
+ 02h Tro ve dau dong
+ 04h Giam con tro(dich con tro sang trai)
+ 06h Tang con tro(dich con tro sang phai)
+ 05h Dich hien thi sang phai
+ 07h Dich hien thi sang trai
+ 08h Tat con tro, tat hien thi
+ 0ah Tat hien thi, bat con tro
+ 0ch Bat hien thi, tat con tro
+ 0eh Bat hien thi, nhap nhay con tro
+ 0fh Tat con tro, nhap nhay con tro
+ 10h Dich vi tri con tro sang trai
+ 14h Dich vi tri con tro sang phai
+ 18h Dich toan bo hien thi sang trai
+ 1ch Dich toan bo hien thi sang phai
+ 80h Ep con tro ve dau dong thu nhat
+ 0c0 Ep con tro ve dau dong thu 2
+ 38h Hai dong va ma tran 5x7
==============================================================*/
22
//==================== Main library =================================
#ifndef __LCD_16x2__
//===============Khai bao bien=====================================
sfr LCD_data = 0xA0;
sbit RS = P3^0 ;

sbit RW = P3^1 ;
sbit EN = P3^2 ;
//=================== DELAY ==================
void delay_LCD(unsigned int time)
{
while(time );
}
//================ Write command =================================
void write_command(unsigned char str)
{
RW = 0 ; //Chon write
RS = 0 ; //Chon thanh ghi lenh
LCD_data = str; //Gui lenh
EN = 0 ; //Tao xung canh len(enable)
EN = 1 ;
EN = 0 ;
delay_LCD(5000); //wait busy LCD
}
//================= Write data 1char ===============================
void write_data(unsigned char str)
{
RW = 0 ; //Chon write
23
RS = 1 ; //Chon thanh ghi data
LCD_data = str; //Gui lenh
EN = 0 ; //Tao xung canh len(enable)
EN = 1 ;
EN = 0 ;
delay_LCD(5000); //wait busy LCD
}

//================= Khoi tao LCD ==================================
void LCD_khoitao(void)
{
write_command(0x38); //2 dong va font 5x7
write_command(0x0e); // bat man hinh va con tro
write_command(0x01); // xoa man hinh
}
#endif
b. Quét bàn phím
/*==============================================================
GIAO TIEP PHIM BAM CACULATOR(4x4)
-Phuong phap : Quet phim
-Nam : Scan_keypad.h
==============================================================*/
#ifndef __SCAN_KEYPAD_SMALL_H__
#define __SCAN_KEYPAD_SMALL_H__
//============ Bien toan cuc ======================================
sfr keypad = 0x90 ; //Port 1
24
sbit H1 = 0x90 ; //Hang1
sbit H2 = 0x91 ; //Hang2
sbit H3 = 0x92 ; //Hang3
sbit H4 = 0x93 ; //Hang4
sbit C1 = 0x94 ; //Cot 1
sbit C2 = 0x95 ; //Cot 2
sbit C3 = 0x96 ; //Cot 3
sbit C4 = 0x97 ; //Cot 4
unsigned int phim_bam = 0 ;
//============= Main =============================================
void delay_keypad ( unsigned int time )

{
while( time );
}
int scan_keypad ( void )
{
phim_bam = 0 ;
keypad = 0xf0 ; //Quet cot
while(keypad == 0xf0) ; //wait phim bam
25

×