Báo cáo đồ án: Mạch tạo số ngẫu nhiên sử dụng 8051 hiển thị trên LCD

Báo cáo đồ án môn Kỹ thuật điện tử với đề tài: "Mạch tạo số ngẫu nhiên sử dụng 8051 hiển thị trên LCD" của sinh viên trường Học viện Kỹ thuật Mật mã giúp bạn tham khảo, ôn tập và hoàn thành tốt bài tập của mình đạt kết quả cao. Mời bạn đọc đón xem!

BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
BÁO CÁO ĐỒ ÁN
ĐỀ TÀI: MẠCH TẠO SỐ NGẪU NHIÊN SỬ DỤNG 8051
HIỂN THỊ TRÊN LCD
Giảng viên hướng dẫn: Đặng Văn Hải
Sinh viên thực hiện: Nguyễn Văn Ninh
Lê Minh Tuấn
Nguyễn Ngọc Huy
Hà Nội, ngày 18 tháng 12 năm 2020
1
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
MỤC LỤC
CHƯƠNG 1: TÌM HIỂU VỀ 8051.............................................................................4
1.1. GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 8051........................................................4
1.1.1. Sơ lược về lịch sử...........................................................................................4
1.1.2. Cấu trúc vi điều khiển 8051...........................................................................6
CHƯƠNG 2: TÌM HIỂU VỀ LCD 16X2.................................................................19
2.1. TỔNG QUAN VỀ LCD...................................................................................19
2.1.1. Giới thiệu về LCD........................................................................................19
2.1.2. Sơ đồ, chức năng, liên kết các chân của LCD.............................................20
CHƯƠNG 3: THỰC HIỆN MÔ HÌNH ĐỒ ÁN......................................................25
3.1. MẠCH NGUYÊN LÝ......................................................................................25
3.2. MẠCH IN, 3D...................................................................................................25
3.3. CHƯƠNG TRÌNH CHÍNH.............................................................................25
Kết luận........................................................................................................................26
2
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
LỜI NÓI ĐẦU
Trong những thập niên cuối thế kỉ XX, từ sự ra đời của công nghệ bán dẫn, kĩ
thuật điện tử đã có sự phát triển vượt bậc. Các thiết bị điện tử sau đó đã được tích hợp
với mật độ cao và rất cao trong các diện tích nhỏ, nhờ vậy các thiết bị điện tử nhỏ hơn
và nhiều chức năng hơn. Các thiết bị điện tử ngày càng nhiều chức năng trong khi giá
thành ngày càng rẻ hơn, chính vì vậy điện tử có mặt khắp mọi nơi.
Ngày nay, các bộ vi điều khiển có ứng dụng ngày cà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 các thiết bị
kỹ thuật từ phức tạp đến đơn giản như thiết bị điều khiển tự động, thiết bị văn phòng
cho đến các thiết bị trong gia đình đều có dùng các bộ vi điều khiển. Rất nhiều họ vi
điều khiển của nhiều nhà chế tạo khác nhau lần lượt được đưa ra thị trường. Để tăng
tính năng điều khiển, các bộ vi điều khiển đã không ngừng được cải tiến, nâng cấp,
chỉnh sửa và tối ưu để phù hợp với công nghệ phát triển hiện nay. Đỉnh cao của việc
sử dụng vi điều khiển là dùng trong người máy (Robot) và các thiết bị PLC để điều
khiển logic chương trình hóa dây chuyền sản xuất tự động. Và một trong những họ vi
điều khiển đang được ứng dụng rộng rãi ngày nay là họ vi điều khiển 8051.
Họ vi điều khiển 8051 được ứng dụng trong thực tế rất phổ biến như ứng dụng
để điều khiển động cơ, điều khiển LED, điều khiển đèn giao thông, làm bộ đếm sản
phẩm, …trong nhiều ứng dụng đó nhóm sinh viên chúng em đã tham gia vào thực
hiện đề tài “MẠCH TẠO SỐ NGẪU NHIÊN SỬ DỤNG 8051 HIỂN THỊ TRÊN
LCD”. Trong quá trình thực hiện làm do chúng em chưa có kinh nghiệm nhiều nên
còn thiếu sót mong thầy (cô) chỉ dạy chúng em thêm trong những lần tiếp theo để
chúng em thực hiện đề tài thành công hơn.
Chúng em xin chân thành cảm ơn!!!
NHÓM SINH VIÊN THỰC HIỆN ĐỒ ÁN
3
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
CHƯƠNG 1: TÌM HIỂU VỀ 8051
1.1. GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 8051
1.1.1. Sơ lược về lịch sử
Bộ xử lý 4 bit: Vào năm 1971, vi xử lý đầu tiên trên thế giới được Intel ra mắt với tên
gọi là 4004.
Hình 1.1. Vi điều khiển 4004
Intel 4004 là một bộ vi xử lý 4-bit, 16 chân, hoạt động ở tốc độ 740KHz - khoảng tám
chu kỳ đồng hồ cho mỗi chu kỳ lệnh (nhận lệnh, giải mã, thực hiện), con chip có khả
năng thực hiện 46250 đến 92500 lệnh mỗi giây.
Bộ xử lý 8 bit: Ra đời năm 1972 có tên là Intel 8008 nó có tốc độ từ 200kHz đến
800kHz cao hơn phiên bản cũ.
Vào năm 1981, Hãng Intel giới thiệu bộ vi điều khiển 8-bit được gọi là 8051. Vi điều
khiển đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác sản xuất và
bán bất kỳ dạng biến thế nào của 8051 mà họ thích với điều kiện họ phải để mã lại
tương thích với 8051.
4
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Hình 1.2. Vi điều khiển 8051
Bộ xử lý 64 bit: Ra đời từ năm 2004 với nhiều phiên bản trong đó có các phiên bản
như: P4 Prescott (2004), Premium D (2005), Premium Extreme Edition (2005), kiến
trúc Core I (2006 đến nay), Core 2 Duo, Core 2 Quad, Core 2 Extreme là đỉnh cao của
bộ vi xử lý năm 2007 có khả năng ép xung, QX9650.
Hình 1.3. Chip Intel Core i Series 9
th
Gen
Kể từ khi ra mắt năm 2006 dòng Core I này liên tục phát triển qua 8 thế hệ: Nehalem,
Sandy Bridge, Ivy Bridge, Haswell, Broad Well, Skylake, Kabylake, Coffelake, ...
Thế hệ mới nhất hiện nay là thế hệ thứ 10 Ice Lake.
Ngày nay với những cái tên như Core i3, Core i5, Core i7, Core i9 ngày càng
thông dụng. Càng phiên bản mới hơn thì những công nghệ, tốc độ, tích hợp cao hơn
mạnh mẽ hơn.
5
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Các tính năng của vi điều khiển 8051:
- Bộ nhớ chương trình bên trong: 4 KB (ROM)
- Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
- Bộ nhớ chương trình bên ngoài: 64 KB (ROM)
- Bộ nhớ dữ liệu bên ngoài: 64 KB (RAM)
- 4 port xuất nhập (I/O port) 8-bit
- 2 bộ định thời 16-bit
- Tần số hoạt động từ: 0Hz đến 24 MHz
- Mạch giao tiếp nối tiếp
- Bộ xử lý bit (thao tác trên các bit riêng lẻ)
- 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit
- Nhân / Chia trong 4 µs
- 32 thanh ghi đa dụng 8-bit
- Thanh ghi PC và DP 16-bit
- UART, ADC, ….
Có hai bộ vi điều khiển thành viên khác của họ 8051 là 8052 và 8031.
8052: vi điều khiển 8052 chứa tất cả đặc tính của 8051 nhưng nó bổ sung thêm
128byte RAM, 4Kb ROM và 1 bộ định thời nữa.
8031: Không có sẵn ROM. Để sử dụng, bạn phải tự thêm ROM cho 8031. Bên cạnh
đó, nó chỉ có 2 port 8-bit thay vì 4 port như 8051.
Đặc tính 8051 8052 8031
ROM trên chip 4K byte 8K byte OK
RAM 128 byte 256 byte 28 byte
Bộ định thời 2 3 2
Chân vào ra 32 32 32
Cổng nối tiếp 1 1 1
Nguồn ngắt 6 8 6
Bảng 1.1. So sánh các đặc tính của các thành viên họ 8051
1.1.2. Cấu trúc vi điều khiển 8051
1.1.2.1. Sơ đồ khối và chức năng của khối vi điều khiển 8051
6
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Hình 1.4. Sơ đồ khối của vi điều khiển 8051
- CPU (Central Processing Unit): đơn vị xử lý trung tâm → tính toán và điều khiển
quá trình hoạt động của hệ thống.
- OSC (Oscillator): Mạch dao động → tạo tín hiệu xung clock cung cấp cho các khối
trong chip hoạt động.
- Interrupt control: điều khiển ngắt → nhận tín hiệu ngắt từ bên ngoài (INT0\, INT1\),
từ bộ định thời (Timer 0, Timer 1) và từ cổng nối tiếp (Serial port), lần lượt đưa các
tín hiệu ngắt này đến CPU để xử lý.
- Other registers: Các thanh ghi khác → lưu trữ dữ liệu của các port xuất/nhập, trạng
thái làm việc của các khối trong chip trong suốt quá trình hoạt động của hệ thống.
- RAM (Random Access Memory): Bộ nhớ dữ liệu trong chip → lưu trữ các dữ liệu.
- ROM (Read Only Memory): Bộ nhớ chương trình trong chip → lưu trữ chương
trình hoạt động của chip.
- I/O ports (In/Out ports): Các port xuất/nhập → điều khiển việc xuất nhập dữ liệu
dưới dạng song song giữa trong và ngoài chip thông qua các port P0, P1, P2, P3.
- Serial port: Port nối tiếp → điều khiển việc xuất nhập dữ liệu dưới dạng nối tiếp
giữa trong và ngoài chip thông qua các chân TxD, RxD.
- Timer 0, Timer 1: Bộ định thời 0, 1 → dùng để định thời gian hoặc đếm sự kiện
(đếm xung) thông qua các chân T0, T1.
- Bus control: điều khiển bus → điều khiển hoạt động của hệ thống bus và việc di
7
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
chuyển thông tin trên hệ thống bus.
- Bus system: Hệ thống bus → liên kết các khối trong chip lại với nhau.
1.1.2.2. Sơ đồ chân và các chức năng của vi điều khiển 8051
Hình 1.5. Sơ đồ chân 8051
Port 0:
- Port 0 (P0.0 – P0.7) có số chân từ 32 – 39.
- Port 0 có hai chức năng:
• Port xuất nhập dữ liệu (P0.0 - P0.7) → không sử dụng bộ nhớ ngoài.
• Bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7) → có sử dụng bộ
nhớ ngoài.
- Ở chế độ mặc định (khi reset) thì các chân Port 0 (P0.0 - P0.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 0 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu
nhập dữ liệu từ port.
- Khi lập trình cho ROM trong chip thì Port 0 đóng vai trò là ngõ vào của dữ liệu (D0
– D7).
Port 1:
8
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
- Port 1 (P1.0 – P1.7) có số chân từ 1 – 8.
- Port 1 có một chức năng:
• Port xuất nhập dữ liệu (P1.0 – P1.7) → sử dụng hoặc không sử dụng bộ nhớ
ngoài.
- Ở chế độ mặc định (khi reset) thì các chân Port 1 (P1.0 – P1.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 1 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu
nhập dữ liệu từ port.
- Khi lập trình cho ROM trong chip thì Port 1 đóng vai trò là ngõ vào của địa chỉ byte
thấp (A0 – A7).
Port 2:
- Port 2 (P2.0 – P2.7) có số chân từ 21 – 28.
- Port 2 có hai chức năng:
• Port xuất nhập dữ liệu (P2.0 – P2.7) → không sử dụng bộ nhớ ngoài.
• Bus địa chỉ byte cao (A8 – A15) → có sử dụng bộ nhớ ngoài.
- Ở chế độ mặc định (khi reset) thì các chân Port 2 (P2.0 – P2.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 2 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu
nhập dữ liệu từ port.
- Khi lập trình cho ROM trong chip thì Port 2 đóng vai trò là ngõ vào của địa chỉ byte
cao (A8 – A11) và các tín hiệu điều khiển.
Port 3:
- Port 3 (P3.0 – P3.7) có số chân từ 10 – 17.
- Port 3 có hai chức năng:
• Port xuất nhập dữ liệu (P3.0 – P3.7) → không sử dụng bộ nhớ ngoài hoặc các
chức năng đặc biệt.
• Các tín hiệu điều khiển → có sử dụng bộ nhớ ngoài hoặc các chức năng đặc
biệt.
- Ở chế độ mặc định (khi reset) thì các chân Port 3 (P3.0 – P3.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 3 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu
nhập dữ liệu từ port
- Khi lập trình cho ROM trong chip thì Port 3 đóng vai trò là ngõ vào của các tín hiệu
điều khiển.
9
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
- Chức năng của các chân Port 3:
Bit Tên Địa chỉ bit Chức năng
P3.0 RxD B0H Chân nhận dữ liệu của port nối tiếp
P3.1 TxD B1H Chân phát dữ liệu của port nối tiếp
P3.2
0
B2H Ngõ vào ngắt ngoài 0
P3.3
1
B3H Ngõ vào ngắt ngoài 1
P3.4 T0 B4H Ngõ vào của bộ định thời/đếm 0
P3.5 T1 B5H Ngõ vào của bộ định thời/đếm 1
P3.6
WR
B6H Điều khiển ghi vào RAM ngoài
P3.7
RD
B7H Điều khiển đọc từ RAM ngoài
Bảng 1.2. Chức năng của các chân Port 3
PSEN
:
- PSEN (Program Store Enable): cho phép bộ nhớ chương trình, chân số 29.
- Chức năng:
• Là tín hiệu cho phép truy xuất (đọc) bộ nhớ chương trình (ROM) ngoài.
• Là tín hiệu xuất, tích cực mức thấp.
PSEN
= 0 → trong thời gian CPU tìm - nạp lệnh từ ROM ngoài.
PSEN
= 1 → CPU sử dụng ROM trong (không sử dụng ROM ngoài).
- Khi sử dụng bộ nhớ chương trình bên ngoài, chân
PSEN
thường được nối với
chân
OE
của ROM ngoài để cho phép CPU đọc mã lệnh từ ROM ngoài.
ALE:
- ALE (Address Latch Enable): cho phép chốt địa chỉ, chân số 30.
- Chức năng:
• Là tín hiệu cho phép chốt địa chỉ để thực hiện việc giải đa hợp cho bus địa chỉ byte
thấp và bus dữ liệu đa hợp (AD0 – AD7).
• Là tín hiệu xuất, tích cực mức cao. ALE = 0 → trong thời gian bus AD0 - AD7 đóng
vai trò là bus D0 - D7. ALE = 1 → trong thời gian bus AD0 - AD7 đóng vai trò
là bus A0 - A7.
- Khi lập trình cho ROM trong chip thì chân ALE đóng vai trò là ngõ vào của xung
lập trình (
PGM
).
- Khi lệnh lấy dữ liệu từ RAM ngoài (MOVX) được thực hiện thì một xung ALE bị
bỏ qua.
10
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
EA
:
- EA (External Access): truy xuất ngoài, chân số 31.
- Chức năng:
• Là tín hiệu cho phép truy xuất (sử dụng) bộ nhớ chương trình (ROM) ngoài.
• Là tín hiệu nhập, tích cực mức thấp.
EA
= 0 → Chip 8051 sử dụng chương trình của ROM ngoài.
EA
= 1 → Chip 8051 sử dụng chương trình của ROM trong.
- Khi lập trình cho ROM trong chip thì chân EA đóng vai trò là ngõ vào của điện áp
lập trình (Vpp = 12V – 12,5V cho họ 89xx; 21V cho họ 80xx, 87xx).
XTAL1, XTAL2:
- XTAL (Crystal): tinh thể thạch anh, chân số 18-19.
- Chức năng:
• Dùng để nối với thạch anh hoặc mạch dao động tạo xung clock bên ngoài,
cung cấp tín hiệu xung clock cho chip hoạt động.
• XTAL1 → ngõ vào mạch tạo xung clock trong chip.
• XTAL2 → ngõ ra mạch tạo xung clock trong chip.
RST:
- RST (Reset): thiết lập lại, chân số 9.
- Chức năng:
• Là tín hiệu cho phép thiết lặp (đặt) lại trạng thái ban đầu cho hệ thống.
• Là tín hiệu nhập, tích cực mức cao.
RST = 0 → Chip 8051 hoạt động bình thường.
RST = 1 → Chip 8051 được thiết lặp lại trạng thái ban đầu.
Vcc, GND:
- Vcc, GND: nguồn cấp điện, chân số 40 và 20.
- Chức năng:
• Cung cấp nguồn điện cho chip 8051 hoạt động.
Vcc = +5V ± 10% và GND = 0V.
1.1.2.3. Tổ chức bộ nhớ
Các chip vi điều được dùng làm thành phần trung tâm trong các thiết kế hướng
điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ đĩa và hệ điều hành.
Chương trình điều khiển phải thường trú trong ROM nên 8051 có không gian bộ nhớ
11
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
riêng cho chương trình và dữ liệu, cả hai bộ nhớ chương trình và dữ liệu đều đặt trong
chip, tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằng cách sử
dụng các chip nhớ bên ngoài với dung lượng tối đa là 64K.
- Bộ vi xử lý → có không gian bộ nhớ chung cho dữ liệu và chương trình.
- Bộ vi điều khiển → có không gian bộ nhớ riêng cho dữ liệu và chương trình.
→ chương trình và dữ liệu nằm riêng trên ROM và RAM trước khi đưa vào CPU để
thực thi.
- Tổ chức bộ nhớ của chip 8051:
12
→ chương trình và dữ liệu nằm chung trên RAM trước khi đưa vào CPU để thực thi.
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Hình 1.6. Không gian bộ nhớ của vi điều khiển 8051
Bộ nhớ nội trong chip bao gồm ROM và RAM. RAM trên chip bao gồm vùng
RAM đa chức năng (general purpose RAM: 30H-7FH ) , vùng RAM với từng bit
được định địa chỉ (bit address locations gọi tắt là vùng RAM định địa chỉ bit: 20H-
2FH ) , các dãy thanh ghi ( bank : 00H-1FH) và các thanh ghi chức năng đặc biệt SFR
(spectial function register : 80H-FFH ).
8051 chứa 210 vị trí bit được định địa chỉ trong đó 128-bit chứa trong các byte
ở địa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại chứa trong các
thanh ghi đặc biệt. Ngoài ra 8051 còn có các port xuất/nhập có thể định địa chỉ từng
bit, điều này làm đơn giản việc giao tiếp bằng phần mềm với các thiết bị xuất/nhập
đơn bit.
Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H đến 7FH, bên dưới
vùng này từ địa chỉ 00H đến 2FH là vùng nhớ có thể được sử dụng tương tự. Bất kỳ
vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự do bằng
cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp. Bất kỳ vị trí nhớ nào trong
vùng RAM đa mục đích đều có thể được truy xuất tự do bằng cách sử dụng các kiểu
định địa chỉ trực tiếp hoặc gián tiếp.
Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệt
SFR chiếm phần trên của Ram nội từ địa chỉ 80H đến FFH. Cần lưu ý là không phải
tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địa chỉ được
định nghĩa.
13
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Hình 1.7. 128 byte cao của bộ nhớ dữ liệu
Các dãy thanh ghi:
32 vị trí thấp nhất của bộ nhớ nội chứa các dãy thanh ghi. Các lệnh của 8051 hỗ
trợ 8 thanh ghi từ R0 – R7 thuộc dãy 0 (bank 0). Đây là dãy mặc định sau khi reset hệ
thống. Các thanh ghi này ở các địa chỉ từ 00H – 07H.
Các lệnh sử dụng các thanh ghi từ R0 – R7 là các lệnh ngắn và thực hiện nhanh hơn
so với các lệnh tương đương sử dụng kiểu định địa chỉ trực tiếp. Các giá trị thường
được sử dụng nên chứa ở một trong các thanh ghi này. Dãy thanh ghi đang được sử
dụng được gọi là dãy thanh ghi tích cực. Dãy thanh ghi tích cực có thể được thay đổi
bằng cách thay đổi các bit chọn dãy trong thanh ghi PSW.
1.1.2.4. Các thanh ghi đặc biệt
8051 có 21 thanh ghi chức năng đặc biệt SFR chiếm phần trên của Ram nội từ
địa chỉ 80H đến FFH. Cần lưu ý là không phải tất cả 128 địa chỉ từ 80H đến FFH đều
được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa. Hình 4 mô tả các thanh ghi
đặc biệt trong vùng nhớ dữ liệu 80H đến FFH và giá trị của chúng sau khi Reset.
14
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Hình 1.9. Các thanh ghi đặc biệt
Thanh ghi chính:
Thanh ghi tính toán chính của vi điều khiển 8051 ACC (Accumulator). Là
thanh ghi đặc biệt của 8051 dùng để thực hiện các phép toán của CPU, thường kí hiệu
A.
Thanh ghi phụ:
Thanh ghi tính toán phụ của vi điều khiển 8051 là B. Thanh ghi B ở địa chỉ
F0H được dùng chung với thanh chứa A trong các phép toán nhân, chia. Lệnh
MUL AB nhân 2 số 8-bit không dấu chứa trong A và B và chứa kết quả 16 bit vào cặp
thanh ghi B, A (thanh chứa A cất byte thấp và thanh ghi B cất byte cao).
Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư số cất
trong thanh ghi B. Thanh ghi B còn được xử lý như một thanh ghi nháp. Các bit được
định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H.
Thanh ghi trạng thái chương trình (PSW):
Thanh ghi trạng thái chương trình PSW (địa chỉ: D0H) là thanh ghi mô tả toàn bộ
trạng thái chương trình đang hoạt động của hệ thống. Bảng 2 Bảng 3 sẽ mô tả
15
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
thanh ghi này.
7 6 5 4 3 2 1 0
CY AC F0 RS1 RS0 OV - P
Bảng 1.3. Thanh ghi trạng thái chương trình PSW
Bit Ký Hiệu Địa Chỉ Mô tả Bit
PSW.7 CY D7H Cờ nhớ (Carry Flag): được Set nếu có Bit
nhớ từ Bit 7 trong phép cộng hoặc có Bit
mượn cho Bit 7 trong phép trừ.
PSW.6 AC D6H Cờ nhớ phụ: được Set trong phép cộng
nếu có Bit nhớ từ Bit 3 sang Bit 4 hoặc
kết quả trong 4 Bit thấp nằm trong
khoảng 0AH->0FH.
PSW.5 FO D5H Cờ O: dành cho người sử dụng.
PSW.4 RS1 D4H Chọn dãy thanh ghi (Bit 1)
PSW.3 RS0 D3H Chọn dãy thanh ghi (Bit 0)
00=Bank 0: Địa chỉ 00H->07H
01=Bank 1: Địa chỉ 08H->0FH
10=Bank 2: Địa chỉ 10H->17H
11=Bank 3: Địa chỉ 18H->1FH
PSW.2 OV D2H Cờ tràn (Overflow Flag): được Set khi
phép toán có dấu có kết quả > +127 hoặc
< -128.
PSW.1 - D1H Chưa dùng
PSW.0 P D0H Cờ kiểm tra chẵn lẻ: được Set hoặc
Clear bởi phần cứng sau mỗi 1 chu kỳ
lệnh, để chỉ ra rằng có 1 số chẵn hoặc số
lẻ Bit 1 trong thanh chứa.
Bảng 1.4. Chi tiết các bit trong thanh ghi PSW
Thanh ghi ngăn xếp (Stack Pointer):
Con trỏ stack SP (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H. SP chứa địa
chỉ của dữ liệu hiện đang ở đỉnh của stack. Các lệnh liên quan đến satck bao gồm lệnh
16
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
cất dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack. Việc cất vào stack làm tăng SP
trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack sẽ giảm SP. Vùng stack của
8051 được giữ trong RAM nội và được giới hạn đến các địa chỉ truy xuất được bởi
kiểu định địa chỉ gián tiếp. Các lệnh PUSH và POP sẽ cất dữ liệu vào stack và lấy dữ
liệu từ stack, các lệnh gọi chương trình con (ACALL, LCALL) và lệnh trở về (RET,
RETI) cũng cất và phục hồi nội dung của bộ đếm chương trình PC (Program counter).
Con trỏ dữ liệu DPTR:
Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chương
trình ngoài hoặc bộ nhớ dữ liệu ngoài. DPTR là một thanh ghi 16 bit có địa chỉ là 82H
(DPL, byte thấp) và 83H (DPH, byte cao).
Thanh ghi các cổng P0-P3:
Các port xuất/nhập của 8051 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ
90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H. Tất cả các port đều được định
địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh.
Thanh ghi bộ đệm truyền thông nối tiếp (Serial Data Buffer):
Bộ đệm truyền thông được chia thành hai bộ đệm, bộ đệm truyền dữ liệu và bộ
đệm nhận dữ liệu. Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽ được
chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi quá trình
truyền dữ liệu qua truyền thông nối tiếp kết thúc. Khi thực hiện việc chuyển dữ liệu từ
SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệu của truyền thông nối tiếp.
Thanh ghi của bộ định thời/bộ đếm:
8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thời gian
hoặc để đếm các sự kiện. Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là các thanh
ghi của bộ đếm thời gian. Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH
(TH0, byte cao). Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp) và 8DH (TH1, byte
cao). Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD
(Timer Mode Register) ở địa chỉ 88H. Chỉ có TCON được định địa chỉ từng bit.
Các thanh ghi ngắt:
8051 có một cấu trúc ngắt với hai mức ưu tiên và năm nguyên nhân ngắt. Các
ngắt bị vô hiệu hóa sau khi reset hệ thống và sau đó được cho phép ngắt bằng cách ghi
17
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
vào thanh ghi cho phép ngắt IE (interrupt enable register) ở địa chỉ A8H. Mức ưu tiên
ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP (interrupt priority register) ở địa chỉ.
Hoạt động Reset:
8051 được reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳ máy và
sau đó chuyển về mức thấp. RST có thể được tác động tay hoặc đựơc tác động khi cấp
nguồn bằng cách dùng một mạch RC.
Thanh ghi Nội dung
Bộ đếm chương trình 0000H
Thanh chứa A 00H
Thanh ghi B 00H
PSW 00H
SP 07H
DPTR 0000H
Port 0-3 FFH
IP xxx00000B (8051)
xx000000B (8052)
IE 0xx00000B (8051)
0x000000B (8052)
Các thanh ghi định thời 00H
SCON 00H
SBUF 00H
PCON (HMOS) 0xxxxxxxB
PCON (CMOS) 0xxx0000B
Bảng 1.5. Trạng thái của các thanh ghi sau khi reset
18
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
CHƯƠNG 2: TÌM HIỂU VỀ LCD 16X2
2.1. TỔNG QUAN VỀ LCD
2.1.1. Giới thiệu về LCD
Thế kỷ 21 đã chứng kiến sự phát triển vượt bậc của các ngành công nghệ. Một
trong số các công nghệ đó chúng ta phải kể đến đó là công nghệ LCD. Nhà vật lý
người Áo Frinitzen Reinitzer đã phát hiện ra các tinh thể lỏng vào năm 1888. Màn
hình tinh thể lỏng đầu tiên đuợc sản xuất vào những năm 70 của thế ký 20 với những
ứng dụng ban đầu trong máy tính, đồng hồ và quan sát phần tử…. Công nghệ màn
hình tinh thể lỏng phát triển rất mạnh mẽ với giá thành ngày càng thấp, tiêu hao ít
năng luợng kiểu dáng gọn nhẹ với rất nhiều các ứng dụng trong thực tế như: tivi, màn
hình máy tính, màn hình điện thoại…
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong
rất nhiều các ứng dụng của VĐK. LCD có rất nhiều ưu điểm so với các dạng hiển thị
khác: Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ
dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài
nguyên hệ thống và giá thành rẽ …
LCD là tên viết tắt của (Liquid Crystal Display) hay còn được biết đến cái tên dân dã
hơn là màn hình tinh thể lỏng. Có rất nhiều loại màn hình LCD khác nhau. Với những
ứng dụng nhỏ thường sử dụng loại màn hình cỡ nhỏ đơn giản là loại LCD16x2. Các
ký tự được hiển thị trên màn hình với 2 hàng, mỗi hàng hiển thị được 16 ký tự.
Hình 2.1. Màn hình LCD 16x2
Có thể chia các module LCD làm 2 loại chính:
+ Loại hiển thị ký tự (charater LCD) gồm có các các kích cỡ 16x1(16 kí tự x1
dòng) ;16x2(16 ký tự x2 dòng); 16x4 (16 ký tự x4 dòng); 20x1 (20 ký tự x1 dòng).
+ Loại hiển thị đồ họa (graphic LCD) đen trắng hoặc màu gồm các kích cỡ 1,47
inch (128x128 điểm ảnh); 1,8 inch (128x160 điểm ảnh); 2,4 inch (240x320 điểm ảnh).
19
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Thông số kỹ thuật:
Điện áp hoạt động là 5 V.
Kích thước: 80 x 36 x 12.5 mm
Chữ đen, nền xanh lá
Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với
Breadboard.
Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây
điện.
Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng
ít điện năng hơn.
Có thể được điều khiển với 6 dây tín hiệu.
2.1.2. Sơ đồ, chức năng, liên kết các chân của LCD
Sơ đồ chân LCD:
Hình 2.2. Sơ đồ chân LCd 16x2
Mô tả các chân, loại 16 chân
- VDD (chân 2): cấp nguồn dương 5v +/ VSS (chân 1): cấp nguồn âm (GND)
- VEE (chân 3): điều khiển độ tương phản của LCD (contrast), chân này cần được nối
với 1 biến trở 10k để chia áp. Trong khi hoạt động, chỉnh để thay đổi giá trị biến trở
để đạt được độ tương phản cần thiết, sau đó giữ mức biến trở này. Các chân điều
khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp với vi điều khiển. Tùy
theo chế độ hoạt động 4bit hay 8bit mà các chân từ D0 đến D3 có thể bỏ qua hoặc nối
với vi điều khiển.
20
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
o Trong một số LCD, 2 chân LED nền được đánh số 15 và 16 nhưng trong một
số trường hợp 2 chân này được ghi là A (Anode) và K (Cathode), gọi là 2 chân
nguồn cho “đèn LED nền”.
- Chân chọn thanh ghi RS (chân 4_Register Select):
Có hai thanh ghi rất quan trọng trong LCD, chân này cho phép lựa chọn 1 trong
2 thanh ghi IR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với các
chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR
được chọn, thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng
hạn như xóa màn hình và nếu RS=1 thanh ghi DR được chọn, thanh ghi dữ liệu được
chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD. Chúng ta đều biết thanh
ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thế nếu muốn gửi 1 mã lệnh đến LCD
thì chân RS phải được reset về 0. Ngược lại, khi muốn ghi mã ASCII của ký tự cần
hiển thị lên LCD thì chúng ta sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân
RS được mô tả như sau:
o Thanh ghi IR: Để điều khiển LCD, người dùng phải “ra lệnh” thông qua tám
đường bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng.
Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR.
Nghĩa là, khi ta nạp vào thanh ghi IR một chuỗi 8-bit, chip HD44780 sẽ tra
bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó.
VD: Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7...DB0)
Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110
o Thanh ghi DR: Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng
RAM DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2
vùng RAM này gởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi thông
tin vào DR, mạch nội bên trong chip sẽ tự động ghi thông tin này vào DDRAM
hoặc CGRAM. Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ
này trong vùng RAM nội của HD44780 sẽ được chuyển ra DR để truyền cho
MPU. Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại
giữ 2 thanh ghi này khi giao tiếp. Xem bảng thiết lập đối với hai chân RS và
R/W theo mục đích giao tiếp với MPU.
=> Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ 2
thanh ghi này khi giao tiếp với MPU. Bảng sau đây tóm tắt lại các thiết lập đối
với hai chân RS và R/W theo mục đích giao tiếp.
21
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
RS R/W Chức năng
0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD
0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở
DB0-DB6
1 0 Ghi vào thanh ghi DR
1 1 Đọc dữ liệu từ DR
Bảng 2.1. Các thiết lập đối với hai chân RS và R/W
- Chân đọc/ghi R/W (chân 5)
Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộ
điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ liệu sẽ
được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà dữ liệu có thể
đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang bận hay không (cờ
Busy Flag - BF). Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều
khiển), vì thế một cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta
phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác mới
sẽ được gán cho LCD. Vì thế, khi làm việc với Text LCD chúng ta nhất thiết phải có
một chương trình con tạm gọi là wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách
để viết chương trình wait_LCD. Cách 1 là đọc bit BF về kiểm tra và chờ BF=0, cách
này đòi hỏi lệnh đọc từ LCD về bộ điều khiển ngoài, do đó chân R/W cần được nối
với bộ điều khiển ngoài. Cách 2 là viết một hàm delay một khoảng thời gian cố định
nào đó (tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn giản vì không cần đọc
LCD, do đó chân R/W không cần sử dụng và luôn được nối với GND. Tuy nhiên,
nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ làm chậm
quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị.
- Chân cho phép E (chân 6_Enable)
Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với bộ điều
khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo một
“xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào LCD
trước hết cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân D0^7, sau
đó set chân EN lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh xuống, nói cách
khác chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ
liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống
22
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung này
phải rộng tối thiểu là 450ns.
- Chân D0+D7:
Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội
dung của các thanh ghi trong LCD.
Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A
đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1 Cũng như các mã
lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu
dòng hoặc nhấp nháy con trỏ. Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để
xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và
RS=0 như sau: Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc
bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận
thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào
lên LCD
Cờ báo bận BF: (Busy Flag)
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một
khoảng thời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế,
LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có
thiết lập RS=0, R/W=1) lên để báo cho MPU biết nó đang “bận”. Dĩ nhiên, khi xong
việc, nó sẽ đặt cờ BF lại mức 0.
Bộ đếm địa chỉ AC: (Address Counter)
Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM
(DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC. Bộ đếm này lại nối với 2
vùng RAM theo kiểu rẽ nhánh. Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông
tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng RAM tương tác đã
được bao hàm trong mã lệnh.
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.
23
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Hình 2.3. Giản đồ xung cập nhật AC
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 :
Hình 2.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
Vùng ROM chứa kí tự CGROM: Character Generator ROM
24
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
Vùng ROM này dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh/kí tự,
và định địa chỉ bằng 8 bit. Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và 32 mẫu kí tự
kiểu 5x10 (tổng cộng là 240 thay vì 2^8 = 256 mẫu kí tự). Người dùng không thể thay
đổi vùng ROM này.
CHƯƠNG 3: THỰC HIỆN MÔ HÌNH ĐỒ ÁN
3.1. MẠCH NGUYÊN LÝ
25
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
3.2. MẠCH IN, 3D
26
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
27
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
3.3. CHƯƠNG TRÌNH CHÍNH
#include<reg51.h>
#define lcd P0
sbit rs=P2^0;
sbit e=P2^1;
sbit sw=P3^0;
sbit rst=P3^1;
unsigned int i=0;
void delay (int);
void display (unsigned char);
void cmd (unsigned char);
void string (char *);
void init (void);
void int_lcd(unsigned int);
void delay (int d)
{
unsigned char i=0;
for(;d>0;d--)
{
for(i=250;i>0;i--);
for(i=248;i>0;i--);
}
}
void cmd (unsigned char c)
28
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
{
lcd=c;
rs=0;
e=1;
delay(5);
e=0;
}
void display (unsigned char c)
{
lcd=c;
rs=1;
e=1;
delay(5);
e=0;
}
void string (char *p)
{
while(*p)
{
display(*p++);
}
}
void init (void)
{
cmd(0x38);
cmd(0x0c);
cmd(0x01);
cmd(0x80);
}
void int_lcd(unsigned int n)
{
char a[4]={0},i=0;
if(n==0)
29
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
{
display('0');
return;
}
else
{
while(n>0)
{
a[i++]=(n%10)+48;
n/=10;
}
for(--i;i>=0;i--)
{
display(a[i]);
}
}
}
void main()
{
sw=1;
rst=1;
init();
cmd(0x80);
string(" Random Number ");
cmd(0xc0);
string(" Generator ");
delay(2000);
cmd(0x01);
while(1)
{
cmd(0x80);
string("Press the button");
while(sw!=0)
{
i=++i;
30
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
if(i==100)
i=0;
}
cmd(0x80);
string("RAND NUM: ");
cmd(0x8a);
int_lcd(i);
while(rst!=0);
//cmd(0x01);
}
}
31
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
KẾT LUẬN
Ba chương của đồ án đã thể hiện được rằng những mục tiêu đặt ra khi thực hiện
đồ án đều đã đạt được. Cụ thể:
Chương 1 đã hệ thống lại những kiến thức tổng quan về 8051.
Chương 2 đã hệ thống lại những kiến thức tổng quan về LCD 16x2.
Chương 3 thể hiện chương trình minh họa hoạt động của mạch đề tài thông qua
mạch nguyên lý và mạch in. Ta có thể thấy rõ nguyên lý, cách vận hành của mạch tạo
số ngẫu nhiên như thế nào.
32
Downloaded by Van Le (mrl3v4n@gmail.com)
lOMoARcPSD|25518217
| 1/32

Preview text:

lOMoARcPSD|25518217 BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ BÁO CÁO ĐỒ ÁN
ĐỀ TÀI: MẠCH TẠO SỐ NGẪU NHIÊN SỬ DỤNG 8051 HIỂN THỊ TRÊN LCD
Giảng viên hướng dẫn: Đặng Văn Hải Sinh viên thực hiện: Nguyễn Văn Ninh Lê Minh Tuấn Nguyễn Ngọc Huy
Hà Nội, ngày 18 tháng 12 năm 2020 1
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 MỤC LỤC
CHƯƠNG 1: TÌM HIỂU VỀ 8051.............................................................................4
1.1. GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 8051........................................................4
1.1.1. Sơ lược về lịch sử...........................................................................................4
1.1.2. Cấu trúc vi điều khiển 8051...........................................................................6
CHƯƠNG 2: TÌM HIỂU VỀ LCD 16X2.................................................................19
2.1. TỔNG QUAN VỀ LCD...................................................................................19
2.1.1. Giới thiệu về LCD........................................................................................19
2.1.2. Sơ đồ, chức năng, liên kết các chân của LCD.............................................20
CHƯƠNG 3: THỰC HIỆN MÔ HÌNH ĐỒ ÁN......................................................25
3.1. MẠCH NGUYÊN LÝ......................................................................................25
3.2. MẠCH IN, 3D...................................................................................................25
3.3. CHƯƠNG TRÌNH CHÍNH.............................................................................25
Kết luận........................................................................................................................26 2
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 LỜI NÓI ĐẦU
Trong những thập niên cuối thế kỉ XX, từ sự ra đời của công nghệ bán dẫn, kĩ
thuật điện tử đã có sự phát triển vượt bậc. Các thiết bị điện tử sau đó đã được tích hợp
với mật độ cao và rất cao trong các diện tích nhỏ, nhờ vậy các thiết bị điện tử nhỏ hơn
và nhiều chức năng hơn. Các thiết bị điện tử ngày càng nhiều chức năng trong khi giá
thành ngày càng rẻ hơn, chính vì vậy điện tử có mặt khắp mọi nơi.
Ngày nay, các bộ vi điều khiển có ứng dụng ngày cà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 các thiết bị
kỹ thuật từ phức tạp đến đơn giản như thiết bị điều khiển tự động, thiết bị văn phòng
cho đến các thiết bị trong gia đình đều có dùng các bộ vi điều khiển. Rất nhiều họ vi
điều khiển của nhiều nhà chế tạo khác nhau lần lượt được đưa ra thị trường. Để tăng
tính năng điều khiển, các bộ vi điều khiển đã không ngừng được cải tiến, nâng cấp,
chỉnh sửa và tối ưu để phù hợp với công nghệ phát triển hiện nay. Đỉnh cao của việc
sử dụng vi điều khiển là dùng trong người máy (Robot) và các thiết bị PLC để điều
khiển logic chương trình hóa dây chuyền sản xuất tự động. Và một trong những họ vi
điều khiển đang được ứng dụng rộng rãi ngày nay là họ vi điều khiển 8051.
Họ vi điều khiển 8051 được ứng dụng trong thực tế rất phổ biến như ứng dụng
để điều khiển động cơ, điều khiển LED, điều khiển đèn giao thông, làm bộ đếm sản
phẩm, …trong nhiều ứng dụng đó nhóm sinh viên chúng em đã tham gia vào thực
hiện đề tài “MẠCH TẠO SỐ NGẪU NHIÊN SỬ DỤNG 8051 HIỂN THỊ TRÊN
LCD
”. Trong quá trình thực hiện làm do chúng em chưa có kinh nghiệm nhiều nên
còn thiếu sót mong thầy (cô) chỉ dạy chúng em thêm trong những lần tiếp theo để
chúng em thực hiện đề tài thành công hơn.
Chúng em xin chân thành cảm ơn!!!
NHÓM SINH VIÊN THỰC HIỆN ĐỒ ÁN 3
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
CHƯƠNG 1: TÌM HIỂU VỀ 8051
1.1. GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 8051
1.1.1. Sơ lược về lịch sử
Bộ xử lý 4 bit: Vào năm 1971, vi xử lý đầu tiên trên thế giới được Intel ra mắt với tên gọi là 4004.
Hình 1.1. Vi điều khiển 4004
Intel 4004 là một bộ vi xử lý 4-bit, 16 chân, hoạt động ở tốc độ 740KHz - khoảng tám
chu kỳ đồng hồ cho mỗi chu kỳ lệnh (nhận lệnh, giải mã, thực hiện), con chip có khả
năng thực hiện 46250 đến 92500 lệnh mỗi giây.
Bộ xử lý 8 bit: Ra đời năm 1972 có tên là Intel 8008 nó có tốc độ từ 200kHz đến
800kHz cao hơn phiên bản cũ.
Vào năm 1981, Hãng Intel giới thiệu bộ vi điều khiển 8-bit được gọi là 8051. Vi điều
khiển đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác sản xuất và
bán bất kỳ dạng biến thế nào của 8051 mà họ thích với điều kiện họ phải để mã lại tương thích với 8051. 4
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Hình 1.2. Vi điều khiển 8051
Bộ xử lý 64 bit: Ra đời từ năm 2004 với nhiều phiên bản trong đó có các phiên bản
như: P4 Prescott (2004), Premium D (2005), Premium Extreme Edition (2005), kiến
trúc Core I (2006 đến nay), Core 2 Duo, Core 2 Quad, Core 2 Extreme là đỉnh cao của
bộ vi xử lý năm 2007 có khả năng ép xung, QX9650.
Hình 1.3. Chip Intel Core i Series 9th Gen
Kể từ khi ra mắt năm 2006 dòng Core I này liên tục phát triển qua 8 thế hệ: Nehalem,
Sandy Bridge, Ivy Bridge, Haswell, Broad Well, Skylake, Kabylake, Coffelake, ...
Thế hệ mới nhất hiện nay là thế hệ thứ 10 Ice Lake.
Ngày nay với những cái tên như Core i3, Core i5, Core i7, Core i9 ngày càng
thông dụng. Càng phiên bản mới hơn thì những công nghệ, tốc độ, tích hợp cao hơn mạnh mẽ hơn. 5
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Các tính năng của vi điều khiển 8051:
- Bộ nhớ chương trình bên trong: 4 KB (ROM)
- Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
- Bộ nhớ chương trình bên ngoài: 64 KB (ROM)
- Bộ nhớ dữ liệu bên ngoài: 64 KB (RAM)
- 4 port xuất nhập (I/O port) 8-bit
- 2 bộ định thời 16-bit
- Tần số hoạt động từ: 0Hz đến 24 MHz
- Mạch giao tiếp nối tiếp
- Bộ xử lý bit (thao tác trên các bit riêng lẻ)
- 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit - Nhân / Chia trong 4 µs
- 32 thanh ghi đa dụng 8-bit - Thanh ghi PC và DP 16-bit - UART, ADC, ….
Có hai bộ vi điều khiển thành viên khác của họ 8051 là 8052 và 8031.
8052: vi điều khiển 8052 chứa tất cả đặc tính của 8051 nhưng nó bổ sung thêm
128byte RAM, 4Kb ROM và 1 bộ định thời nữa.
8031: Không có sẵn ROM. Để sử dụng, bạn phải tự thêm ROM cho 8031. Bên cạnh
đó, nó chỉ có 2 port 8-bit thay vì 4 port như 8051. Đặc tính 8051 8052 8031 ROM trên chip 4K byte 8K byte OK RAM 128 byte 256 byte 28 byte Bộ định thời 2 3 2 Chân vào ra 32 32 32 Cổng nối tiếp 1 1 1 Nguồn ngắt 6 8 6
Bảng 1.1. So sánh các đặc tính của các thành viên họ 8051
1.1.2. Cấu trúc vi điều khiển 8051
1.1.2.1. Sơ đồ khối và chức năng của khối vi điều khiển 8051 6
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Hình 1.4. Sơ đồ khối của vi điều khiển 8051
- CPU (Central Processing Unit): đơn vị xử lý trung tâm → tính toán và điều khiển
quá trình hoạt động của hệ thống.
- OSC (Oscillator): Mạch dao động → tạo tín hiệu xung clock cung cấp cho các khối trong chip hoạt động.
- Interrupt control: điều khiển ngắt → nhận tín hiệu ngắt từ bên ngoài (INT0\, INT1\),
từ bộ định thời (Timer 0, Timer 1) và từ cổng nối tiếp (Serial port), lần lượt đưa các
tín hiệu ngắt này đến CPU để xử lý.
- Other registers: Các thanh ghi khác → lưu trữ dữ liệu của các port xuất/nhập, trạng
thái làm việc của các khối trong chip trong suốt quá trình hoạt động của hệ thống.
- RAM (Random Access Memory): Bộ nhớ dữ liệu trong chip → lưu trữ các dữ liệu.
- ROM (Read Only Memory): Bộ nhớ chương trình trong chip → lưu trữ chương
trình hoạt động của chip.
- I/O ports (In/Out ports): Các port xuất/nhập → điều khiển việc xuất nhập dữ liệu
dưới dạng song song giữa trong và ngoài chip thông qua các port P0, P1, P2, P3.
- Serial port: Port nối tiếp → điều khiển việc xuất nhập dữ liệu dưới dạng nối tiếp
giữa trong và ngoài chip thông qua các chân TxD, RxD.
- Timer 0, Timer 1: Bộ định thời 0, 1 → dùng để định thời gian hoặc đếm sự kiện
(đếm xung) thông qua các chân T0, T1.
- Bus control: điều khiển bus → điều khiển hoạt động của hệ thống bus và việc di 7
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
chuyển thông tin trên hệ thống bus.
- Bus system: Hệ thống bus → liên kết các khối trong chip lại với nhau.
1.1.2.2. Sơ đồ chân và các chức năng của vi điều khiển 8051
Hình 1.5. Sơ đồ chân 8051 Port 0:
- Port 0 (P0.0 – P0.7) có số chân từ 32 – 39. - Port 0 có hai chức năng:
• Port xuất nhập dữ liệu (P0.0 - P0.7) → không sử dụng bộ nhớ ngoài.
• Bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7) → có sử dụng bộ nhớ ngoài.
- Ở chế độ mặc định (khi reset) thì các chân Port 0 (P0.0 - P0.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 0 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu nhập dữ liệu từ port.
- Khi lập trình cho ROM trong chip thì Port 0 đóng vai trò là ngõ vào của dữ liệu (D0 – D7). Port 1: 8
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
- Port 1 (P1.0 – P1.7) có số chân từ 1 – 8.
- Port 1 có một chức năng:
• Port xuất nhập dữ liệu (P1.0 – P1.7) → sử dụng hoặc không sử dụng bộ nhớ ngoài.
- Ở chế độ mặc định (khi reset) thì các chân Port 1 (P1.0 – P1.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 1 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu nhập dữ liệu từ port.
- Khi lập trình cho ROM trong chip thì Port 1 đóng vai trò là ngõ vào của địa chỉ byte thấp (A0 – A7). Port 2:
- Port 2 (P2.0 – P2.7) có số chân từ 21 – 28.
- Port 2 có hai chức năng:
• Port xuất nhập dữ liệu (P2.0 – P2.7) → không sử dụng bộ nhớ ngoài.
• Bus địa chỉ byte cao (A8 – A15) → có sử dụng bộ nhớ ngoài.
- Ở chế độ mặc định (khi reset) thì các chân Port 2 (P2.0 – P2.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 2 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu nhập dữ liệu từ port.
- Khi lập trình cho ROM trong chip thì Port 2 đóng vai trò là ngõ vào của địa chỉ byte
cao (A8 – A11) và các tín hiệu điều khiển. Port 3:
- Port 3 (P3.0 – P3.7) có số chân từ 10 – 17.
- Port 3 có hai chức năng:
• Port xuất nhập dữ liệu (P3.0 – P3.7) → không sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt.
• Các tín hiệu điều khiển → có sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt.
- Ở chế độ mặc định (khi reset) thì các chân Port 3 (P3.0 – P3.7) được cấu hình là port
xuất dữ liệu. Muốn các chân Port 3 làm port nhập dữ liệu thì cần phải lập trình lại,
bằng cách ghi mức logic cao (mức 1) đến tất cả các bit của port trước khi bắt đầu nhập dữ liệu từ port
- Khi lập trình cho ROM trong chip thì Port 3 đóng vai trò là ngõ vào của các tín hiệu điều khiển. 9
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
- Chức năng của các chân Port 3: Bit Tên Địa chỉ bit Chức năng P3.0 RxD B0H
Chân nhận dữ liệu của port nối tiếp P3.1 TxD B1H
Chân phát dữ liệu của port nối tiếp P3.2 ∫0 B2H Ngõ vào ngắt ngoài 0 P3.3 ∫1 B3H Ngõ vào ngắt ngoài 1 P3.4 T0 B4H
Ngõ vào của bộ định thời/đếm 0 P3.5 T1 B5H
Ngõ vào của bộ định thời/đếm 1 P3.6 WR B6H
Điều khiển ghi vào RAM ngoài P3.7 RD B7H
Điều khiển đọc từ RAM ngoài
Bảng 1.2. Chức năng của các chân Port 3 PSEN :
- PSEN (Program Store Enable): cho phép bộ nhớ chương trình, chân số 29. - Chức năng:
• Là tín hiệu cho phép truy xuất (đọc) bộ nhớ chương trình (ROM) ngoài.
• Là tín hiệu xuất, tích cực mức thấp. PSEN
= 0 → trong thời gian CPU tìm - nạp lệnh từ ROM ngoài. PSEN
= 1 → CPU sử dụng ROM trong (không sử dụng ROM ngoài).
- Khi sử dụng bộ nhớ chương trình bên ngoài, chân PSEN thường được nối với
chân OE của ROM ngoài để cho phép CPU đọc mã lệnh từ ROM ngoài. ALE:
- ALE (Address Latch Enable): cho phép chốt địa chỉ, chân số 30. - Chức năng:
• Là tín hiệu cho phép chốt địa chỉ để thực hiện việc giải đa hợp cho bus địa chỉ byte
thấp và bus dữ liệu đa hợp (AD0 – AD7).
• Là tín hiệu xuất, tích cực mức cao. ALE = 0 → trong thời gian bus AD0 - AD7 đóng
vai trò là bus D0 - D7. ALE = 1 → trong thời gian bus AD0 - AD7 đóng vai trò là bus A0 - A7.
- Khi lập trình cho ROM trong chip thì chân ALE đóng vai trò là ngõ vào của xung lập trình ( PGM ).
- Khi lệnh lấy dữ liệu từ RAM ngoài (MOVX) được thực hiện thì một xung ALE bị bỏ qua. 10
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 EA :
- EA (External Access): truy xuất ngoài, chân số 31. - Chức năng:
• Là tín hiệu cho phép truy xuất (sử dụng) bộ nhớ chương trình (ROM) ngoài.
• Là tín hiệu nhập, tích cực mức thấp. EA
= 0 → Chip 8051 sử dụng chương trình của ROM ngoài. EA
= 1 → Chip 8051 sử dụng chương trình của ROM trong.
- Khi lập trình cho ROM trong chip thì chân EA đóng vai trò là ngõ vào của điện áp
lập trình (Vpp = 12V – 12,5V cho họ 89xx; 21V cho họ 80xx, 87xx). XTAL1, XTAL2:
- XTAL (Crystal): tinh thể thạch anh, chân số 18-19. - Chức năng:
• Dùng để nối với thạch anh hoặc mạch dao động tạo xung clock bên ngoài,
cung cấp tín hiệu xung clock cho chip hoạt động.
• XTAL1 → ngõ vào mạch tạo xung clock trong chip.
• XTAL2 → ngõ ra mạch tạo xung clock trong chip. RST:
- RST (Reset): thiết lập lại, chân số 9. - Chức năng:
• Là tín hiệu cho phép thiết lặp (đặt) lại trạng thái ban đầu cho hệ thống.
• Là tín hiệu nhập, tích cực mức cao.
RST = 0 → Chip 8051 hoạt động bình thường.
RST = 1 → Chip 8051 được thiết lặp lại trạng thái ban đầu. Vcc, GND:
- Vcc, GND: nguồn cấp điện, chân số 40 và 20. - Chức năng:
• Cung cấp nguồn điện cho chip 8051 hoạt động.
• Vcc = +5V ± 10% và GND = 0V.
1.1.2.3. Tổ chức bộ nhớ
Các chip vi điều được dùng làm thành phần trung tâm trong các thiết kế hướng
điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ đĩa và hệ điều hành.
Chương trình điều khiển phải thường trú trong ROM nên 8051 có không gian bộ nhớ 11
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
riêng cho chương trình và dữ liệu, cả hai bộ nhớ chương trình và dữ liệu đều đặt trong
chip, tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằng cách sử
dụng các chip nhớ bên ngoài với dung lượng tối đa là 64K.
- Bộ vi xử lý → có không gian bộ nhớ chung cho dữ liệu và chương trình. →
→ chương trình và dữ liệu nằm chung trên RAM trước khi đưa vào CPU để thực thi.
- Bộ vi điều khiển → có không gian bộ nhớ riêng cho dữ liệu và chương trình.
→ chương trình và dữ liệu nằm riêng trên ROM và RAM trước khi đưa vào CPU để thực thi.
- Tổ chức bộ nhớ của chip 8051: 12
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Hình 1.6. Không gian bộ nhớ của vi điều khiển 8051
Bộ nhớ nội trong chip bao gồm ROM và RAM. RAM trên chip bao gồm vùng
RAM đa chức năng (general purpose RAM: 30H-7FH ) , vùng RAM với từng bit
được định địa chỉ (bit address locations gọi tắt là vùng RAM định địa chỉ bit: 20H-
2FH ) , các dãy thanh ghi ( bank : 00H-1FH) và các thanh ghi chức năng đặc biệt SFR
(spectial function register : 80H-FFH ).
8051 chứa 210 vị trí bit được định địa chỉ trong đó 128-bit chứa trong các byte
ở địa chỉ từ 20H đến 2FH (16 byte x 8 bit = 128 bit) và phần còn lại chứa trong các
thanh ghi đặc biệt. Ngoài ra 8051 còn có các port xuất/nhập có thể định địa chỉ từng
bit, điều này làm đơn giản việc giao tiếp bằng phần mềm với các thiết bị xuất/nhập đơn bit.
Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H đến 7FH, bên dưới
vùng này từ địa chỉ 00H đến 2FH là vùng nhớ có thể được sử dụng tương tự. Bất kỳ
vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự do bằng
cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp. Bất kỳ vị trí nhớ nào trong
vùng RAM đa mục đích đều có thể được truy xuất tự do bằng cách sử dụng các kiểu
định địa chỉ trực tiếp hoặc gián tiếp.
Cũng như các thanh ghi từ R0 đến R7, ta có 21 thanh ghi chức năng đặc biệt
SFR chiếm phần trên của Ram nội từ địa chỉ 80H đến FFH. Cần lưu ý là không phải
tất cả 128 địa chỉ từ 80H đến FFH đều được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa. 13
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Hình 1.7. 128 byte cao của bộ nhớ dữ liệu Các dãy thanh ghi:
32 vị trí thấp nhất của bộ nhớ nội chứa các dãy thanh ghi. Các lệnh của 8051 hỗ
trợ 8 thanh ghi từ R0 – R7 thuộc dãy 0 (bank 0). Đây là dãy mặc định sau khi reset hệ
thống. Các thanh ghi này ở các địa chỉ từ 00H – 07H.
Các lệnh sử dụng các thanh ghi từ R0 – R7 là các lệnh ngắn và thực hiện nhanh hơn
so với các lệnh tương đương sử dụng kiểu định địa chỉ trực tiếp. Các giá trị thường
được sử dụng nên chứa ở một trong các thanh ghi này. Dãy thanh ghi đang được sử
dụng được gọi là dãy thanh ghi tích cực. Dãy thanh ghi tích cực có thể được thay đổi
bằng cách thay đổi các bit chọn dãy trong thanh ghi PSW.
1.1.2.4. Các thanh ghi đặc biệt
8051 có 21 thanh ghi chức năng đặc biệt SFR chiếm phần trên của Ram nội từ
địa chỉ 80H đến FFH. Cần lưu ý là không phải tất cả 128 địa chỉ từ 80H đến FFH đều
được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa. Hình 4 mô tả các thanh ghi
đặc biệt trong vùng nhớ dữ liệu 80H đến FFH và giá trị của chúng sau khi Reset. 14
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Hình 1.9. Các thanh ghi đặc biệt Thanh ghi chính:
Thanh ghi tính toán chính của vi điều khiển 8051 ACC (Accumulator). Là
thanh ghi đặc biệt của 8051 dùng để thực hiện các phép toán của CPU, thường kí hiệu là A. Thanh ghi phụ:
Thanh ghi tính toán phụ của vi điều khiển 8051 là B. Thanh ghi B ở địa chỉ
F0H được dùng chung với thanh chứa A trong các phép toán nhân, chia. Lệnh
MUL AB nhân 2 số 8-bit không dấu chứa trong A và B và chứa kết quả 16 bit vào cặp
thanh ghi B, A (thanh chứa A cất byte thấp và thanh ghi B cất byte cao).
Lệnh chia DIV AB chia A bởi B, thương số cất trong thanh chứa A và dư số cất
trong thanh ghi B. Thanh ghi B còn được xử lý như một thanh ghi nháp. Các bit được
định địa chỉ của thanh ghi B có địa chỉ từ F0H đến F7H.
Thanh ghi trạng thái chương trình (PSW):
Thanh ghi trạng thái chương trình PSW (địa chỉ: D0H) là thanh ghi mô tả toàn bộ
trạng thái chương trình đang hoạt động của hệ thống. Bảng 2 Bảng 3 sẽ mô tả 15
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 thanh ghi này. 7 6 5 4 3 2 1 0 CY AC F0 RS1 RS0 OV - P
Bảng 1.3. Thanh ghi trạng thái chương trình PSW Bit Ký Hiệu Địa Chỉ Mô tả Bit PSW.7 CY D7H
Cờ nhớ (Carry Flag): được Set nếu có Bit
nhớ từ Bit 7 trong phép cộng hoặc có Bit
mượn cho Bit 7 trong phép trừ. PSW.6 AC D6H
Cờ nhớ phụ: được Set trong phép cộng
nếu có Bit nhớ từ Bit 3 sang Bit 4 hoặc
kết quả trong 4 Bit thấp nằm trong khoảng 0AH->0FH. PSW.5 FO D5H
Cờ O: dành cho người sử dụng. PSW.4 RS1 D4H
Chọn dãy thanh ghi (Bit 1) PSW.3 RS0 D3H
Chọn dãy thanh ghi (Bit 0)
00=Bank 0: Địa chỉ 00H->07H
01=Bank 1: Địa chỉ 08H->0FH
10=Bank 2: Địa chỉ 10H->17H
11=Bank 3: Địa chỉ 18H->1FH PSW.2 OV D2H
Cờ tràn (Overflow Flag): được Set khi
phép toán có dấu có kết quả > +127 hoặc < -128. PSW.1 - D1H Chưa dùng PSW.0 P D0H
Cờ kiểm tra chẵn lẻ: được Set hoặc
Clear bởi phần cứng sau mỗi 1 chu kỳ
lệnh, để chỉ ra rằng có 1 số chẵn hoặc số lẻ Bit 1 trong thanh chứa.
Bảng 1.4. Chi tiết các bit trong thanh ghi PSW
Thanh ghi ngăn xếp (Stack Pointer):
Con trỏ stack SP (stack pointer) là 1 thanh ghi 8 bit ở địa chỉ 81H. SP chứa địa
chỉ của dữ liệu hiện đang ở đỉnh của stack. Các lệnh liên quan đến satck bao gồm lệnh 16
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
cất dữ liệu vào stack và lệnh lấy dữ liệu ra khỏi stack. Việc cất vào stack làm tăng SP
trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi stack sẽ giảm SP. Vùng stack của
8051 được giữ trong RAM nội và được giới hạn đến các địa chỉ truy xuất được bởi
kiểu định địa chỉ gián tiếp. Các lệnh PUSH và POP sẽ cất dữ liệu vào stack và lấy dữ
liệu từ stack, các lệnh gọi chương trình con (ACALL, LCALL) và lệnh trở về (RET,
RETI) cũng cất và phục hồi nội dung của bộ đếm chương trình PC (Program counter).
Con trỏ dữ liệu DPTR:
Con trỏ dữ liệu DPTR (data pointer) được dùng để truy xuất bộ nhớ chương
trình ngoài hoặc bộ nhớ dữ liệu ngoài. DPTR là một thanh ghi 16 bit có địa chỉ là 82H
(DPL, byte thấp) và 83H (DPH, byte cao).
Thanh ghi các cổng P0-P3:
Các port xuất/nhập của 8051 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ
90H, Port 2 tại địa chỉ A0H và Port 3 tại địa chỉ B0H. Tất cả các port đều được định
địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh.
Thanh ghi bộ đệm truyền thông nối tiếp (Serial Data Buffer):
Bộ đệm truyền thông được chia thành hai bộ đệm, bộ đệm truyền dữ liệu và bộ
đệm nhận dữ liệu. Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽ được
chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi quá trình
truyền dữ liệu qua truyền thông nối tiếp kết thúc. Khi thực hiện việc chuyển dữ liệu từ
SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệu của truyền thông nối tiếp.
Thanh ghi của bộ định thời/bộ đếm:
8051 có 2 bộ đếm/định thời (counter/timer) 16 bit để định các khoảng thời gian
hoặc để đếm các sự kiện. Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là các thanh
ghi của bộ đếm thời gian. Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH
(TH0, byte cao). Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp) và 8DH (TH1, byte
cao). Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD
(Timer Mode Register) ở địa chỉ 88H. Chỉ có TCON được định địa chỉ từng bit. Các thanh ghi ngắt:
8051 có một cấu trúc ngắt với hai mức ưu tiên và năm nguyên nhân ngắt. Các
ngắt bị vô hiệu hóa sau khi reset hệ thống và sau đó được cho phép ngắt bằng cách ghi 17
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
vào thanh ghi cho phép ngắt IE (interrupt enable register) ở địa chỉ A8H. Mức ưu tiên
ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP (interrupt priority register) ở địa chỉ. Hoạt động Reset:
8051 được reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳ máy và
sau đó chuyển về mức thấp. RST có thể được tác động tay hoặc đựơc tác động khi cấp
nguồn bằng cách dùng một mạch RC. Thanh ghi Nội dung Bộ đếm chương trình 0000H Thanh chứa A 00H Thanh ghi B 00H PSW 00H SP 07H DPTR 0000H Port 0-3 FFH IP xxx00000B (8051) xx000000B (8052) IE 0xx00000B (8051) 0x000000B (8052) Các thanh ghi định thời 00H SCON 00H SBUF 00H PCON (HMOS) 0xxxxxxxB PCON (CMOS) 0xxx0000B
Bảng 1.5. Trạng thái của các thanh ghi sau khi reset 18
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
CHƯƠNG 2: TÌM HIỂU VỀ LCD 16X2 2.1. TỔNG QUAN VỀ LCD
2.1.1. Giới thiệu về LCD
Thế kỷ 21 đã chứng kiến sự phát triển vượt bậc của các ngành công nghệ. Một
trong số các công nghệ đó chúng ta phải kể đến đó là công nghệ LCD. Nhà vật lý
người Áo Frinitzen Reinitzer đã phát hiện ra các tinh thể lỏng vào năm 1888. Màn
hình tinh thể lỏng đầu tiên đuợc sản xuất vào những năm 70 của thế ký 20 với những
ứng dụng ban đầu trong máy tính, đồng hồ và quan sát phần tử…. Công nghệ màn
hình tinh thể lỏng phát triển rất mạnh mẽ với giá thành ngày càng thấp, tiêu hao ít
năng luợng kiểu dáng gọn nhẹ với rất nhiều các ứng dụng trong thực tế như: tivi, màn
hình máy tính, màn hình điện thoại…
Ngày nay, thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong
rất nhiều các ứng dụng của VĐK. LCD có rất nhiều ưu điểm so với các dạng hiển thị
khác: Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ
dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài
nguyên hệ thống và giá thành rẽ …
LCD là tên viết tắt của (Liquid Crystal Display) hay còn được biết đến cái tên dân dã
hơn là màn hình tinh thể lỏng. Có rất nhiều loại màn hình LCD khác nhau. Với những
ứng dụng nhỏ thường sử dụng loại màn hình cỡ nhỏ đơn giản là loại LCD16x2. Các
ký tự được hiển thị trên màn hình với 2 hàng, mỗi hàng hiển thị được 16 ký tự.
Hình 2.1. Màn hình LCD 16x2
Có thể chia các module LCD làm 2 loại chính:
+ Loại hiển thị ký tự (charater LCD) gồm có các các kích cỡ 16x1(16 kí tự x1
dòng) ;16x2(16 ký tự x2 dòng); 16x4 (16 ký tự x4 dòng); 20x1 (20 ký tự x1 dòng).
+ Loại hiển thị đồ họa (graphic LCD) đen trắng hoặc màu gồm các kích cỡ 1,47
inch (128x128 điểm ảnh); 1,8 inch (128x160 điểm ảnh); 2,4 inch (240x320 điểm ảnh). 19
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Thông số kỹ thuật:
 Điện áp hoạt động là 5 V.
 Kích thước: 80 x 36 x 12.5 mm  Chữ đen, nền xanh lá
 Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với Breadboard.
 Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây điện.
 Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít điện năng hơn.
 Có thể được điều khiển với 6 dây tín hiệu.
2.1.2. Sơ đồ, chức năng, liên kết các chân của LCD Sơ đồ chân LCD:
Hình 2.2. Sơ đồ chân LCd 16x2
Mô tả các chân, loại 16 chân
- VDD (chân 2): cấp nguồn dương 5v +/ VSS (chân 1): cấp nguồn âm (GND)
- VEE (chân 3): điều khiển độ tương phản của LCD (contrast), chân này cần được nối
với 1 biến trở 10k để chia áp. Trong khi hoạt động, chỉnh để thay đổi giá trị biến trở
để đạt được độ tương phản cần thiết, sau đó giữ mức biến trở này. Các chân điều
khiển RS, R/W, EN và các đường dữ liệu được nối trực tiếp với vi điều khiển. Tùy
theo chế độ hoạt động 4bit hay 8bit mà các chân từ D0 đến D3 có thể bỏ qua hoặc nối với vi điều khiển. 20
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 o
Trong một số LCD, 2 chân LED nền được đánh số 15 và 16 nhưng trong một
số trường hợp 2 chân này được ghi là A (Anode) và K (Cathode), gọi là 2 chân
nguồn cho “đèn LED nền”.
- Chân chọn thanh ghi RS (chân 4_Register Select):
Có hai thanh ghi rất quan trọng trong LCD, chân này cho phép lựa chọn 1 trong
2 thanh ghi IR hoặc DR để làm việc. Vì cả 2 thanh ghi này đều được kết nối với các
chân Data của LCD nên cần 1 bit để lựa chọn giữa chúng. Nếu RS=0, thanh ghi IR
được chọn, thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng
hạn như xóa màn hình và nếu RS=1 thanh ghi DR được chọn, thanh ghi dữ liệu được
chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD. Chúng ta đều biết thanh
ghi IR là thanh ghi chứa mã lệnh cho LCD, vì thế nếu muốn gửi 1 mã lệnh đến LCD
thì chân RS phải được reset về 0. Ngược lại, khi muốn ghi mã ASCII của ký tự cần
hiển thị lên LCD thì chúng ta sẽ set RS=1 để chọn thanh ghi DR. Hoạt động của chân RS được mô tả như sau: o
Thanh ghi IR: Để điều khiển LCD, người dùng phải “ra lệnh” thông qua tám
đường bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng.
Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR.
Nghĩa là, khi ta nạp vào thanh ghi IR một chuỗi 8-bit, chip HD44780 sẽ tra
bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó.
 VD: Lệnh “hiển thị màn hình” có địa chỉ lệnh là 00001100 (DB7...DB0)
Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110 o
Thanh ghi DR: Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng
RAM DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2
vùng RAM này gởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi thông
tin vào DR, mạch nội bên trong chip sẽ tự động ghi thông tin này vào DDRAM
hoặc CGRAM. Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ
này trong vùng RAM nội của HD44780 sẽ được chuyển ra DR để truyền cho
MPU. Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại
giữ 2 thanh ghi này khi giao tiếp. Xem bảng thiết lập đối với hai chân RS và
R/W theo mục đích giao tiếp với MPU.
=> Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ 2
thanh ghi này khi giao tiếp với MPU. Bảng sau đây tóm tắt lại các thiết lập đối
với hai chân RS và R/W theo mục đích giao tiếp. 21
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 RS R/W Chức năng 0 0
Ghi vào thanh ghi IR để ra lệnh cho LCD 0 1
Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6 1 0 Ghi vào thanh ghi DR 1 1 Đọc dữ liệu từ DR
Bảng 2.1. Các thiết lập đối với hai chân RS và R/W
- Chân đọc/ghi R/W (chân 5)
Chân lựa chọn giữa việc đọc và ghi. Nếu R/W=0 thì dữ liệu sẽ được ghi từ bộ
điều khiển ngoài (vi điều khiển AVR chẳng hạn) vào LCD. Nếu R/W=1 thì dữ liệu sẽ
được đọc từ LCD ra ngoài. Tuy nhiên, chỉ có duy nhất 1 trường hợp mà dữ liệu có thể
đọc từ LCD ra, đó là đọc trạng thái LCD để biết LCD có đang bận hay không (cờ
Busy Flag - BF). Do LCD là một thiết bị hoạt động tương đối chậm (so với vi điều
khiển), vì thế một cờ BF được dùng để báo LCD đang bận, nếu BF=1 thì chúng ta
phải chờ cho LCD xử lí xong nhiệm vụ hiện tại, đến khi nào BF=0 một thao tác mới
sẽ được gán cho LCD. Vì thế, khi làm việc với Text LCD chúng ta nhất thiết phải có
một chương trình con tạm gọi là wait_LCD để chờ cho đến khi LCD rảnh. Có 2 cách
để viết chương trình wait_LCD. Cách 1 là đọc bit BF về kiểm tra và chờ BF=0, cách
này đòi hỏi lệnh đọc từ LCD về bộ điều khiển ngoài, do đó chân R/W cần được nối
với bộ điều khiển ngoài. Cách 2 là viết một hàm delay một khoảng thời gian cố định
nào đó (tốt nhất là trên 1ms). Ưu điểm của cách 2 là sự đơn giản vì không cần đọc
LCD, do đó chân R/W không cần sử dụng và luôn được nối với GND. Tuy nhiên,
nhược điểm của cách 2 là khoảng thời gian delay cố định nếu quá lớn sẽ làm chậm
quá trình thao tác LCD, nếu quá nhỏ sẽ gây ra lỗi hiển thị.
- Chân cho phép E (chân 6_Enable)
Chân cho phép LCD hoạt động (Enable), chân này cần được kết nối với bộ điều
khiển để cho phép thao tác LCD. Để đọc và ghi data từ LCD chúng ta cần tạo một
“xung cạnh xuống” trên chân EN, nói theo cách khác, muốn ghi dữ liệu vào LCD
trước hết cần đảm bảo rằng chân EN=0, tiếp đến xuất dữ liệu đến các chân D0^7, sau
đó set chân EN lên 1 và cuối cùng là xóa EN về 0 để tạo 1 xung cạnh xuống, nói cách
khác chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ
liệu của nó. Khi dữ liệu được cung cấp đến chân dữ liệu thì một xung mức cao xuống 22
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu. Xung này
phải rộng tối thiểu là 450ns. - Chân D0+D7:
Đây là 8 chân dữ liệu 8 bit, được dùng để gửi thông tin trên LCD hoặc đọc nội
dung của các thanh ghi trong LCD.
Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A
đến Z, a đến f và các con số từ 0~9 đến các chân này khi bật RS=1 Cũng như các mã
lệnh mà có thể được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về vị trí đầu
dòng hoặc nhấp nháy con trỏ. Chúng ta cũng sử dụng RS=0 để kiểm tra bit cờ bận để
xem LCD có sẵn sàng nhận thông tin. Cờ bận là D7 và có thể được đọc khi R/W=1 và
RS=0 như sau: Nếu R/W=1, RS=0 khi D7=1(cờ bận 1) thì LCD bận bởi các công việc
bên trong và sẽ không nhận bất kì thông tin mới nào. Khi D7 thì LCD sẵn sàng nhận
thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất khì dữ liệu nào lên LCD
Cờ báo bận BF: (Busy Flag)
Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một
khoảng thời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế,
LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có
thiết lập RS=0, R/W=1) lên để báo cho MPU biết nó đang “bận”. Dĩ nhiên, khi xong
việc, nó sẽ đặt cờ BF lại mức 0.
Bộ đếm địa chỉ AC: (Address Counter)
Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM
(DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC. Bộ đếm này lại nối với 2
vùng RAM theo kiểu rẽ nhánh. Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông
tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng RAM tương tác đã
được bao hàm trong mã lệnh.
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. 23
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Hình 2.3. Giản đồ xung cập nhật AC
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 :
Hình 2.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
Vùng ROM chứa kí tự CGROM: Character Generator ROM 24
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
Vùng ROM này dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh/kí tự,
và định địa chỉ bằng 8 bit. Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và 32 mẫu kí tự
kiểu 5x10 (tổng cộng là 240 thay vì 2^8 = 256 mẫu kí tự). Người dùng không thể thay đổi vùng ROM này.
CHƯƠNG 3: THỰC HIỆN MÔ HÌNH ĐỒ ÁN 3.1. MẠCH NGUYÊN LÝ 25
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 3.2. MẠCH IN, 3D 26
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 27
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217
3.3. CHƯƠNG TRÌNH CHÍNH #include #define lcd P0 sbit rs=P2^0; sbit e=P2^1; sbit sw=P3^0; sbit rst=P3^1; unsigned int i=0; void delay (int); void display (unsigned char); void cmd (unsigned char); void string (char *); void init (void); void int_lcd(unsigned int); void delay (int d) { unsigned char i=0; for(;d>0;d--) { for(i=250;i>0;i--); for(i=248;i>0;i--); } } void cmd (unsigned char c) 28
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 { lcd=c; rs=0; e=1; delay(5); e=0; } void display (unsigned char c) { lcd=c; rs=1; e=1; delay(5); e=0; } void string (char *p) { while(*p) { display(*p++); } } void init (void) { cmd(0x38); cmd(0x0c); cmd(0x01); cmd(0x80); } void int_lcd(unsigned int n) { char a[4]={0},i=0; if(n==0) 29
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 { display('0'); return; } else { while(n>0) { a[i++]=(n%10)+48; n/=10; } for(--i;i>=0;i--) { display(a[i]); } } } void main() { sw=1; rst=1; init(); cmd(0x80); string(" Random Number "); cmd(0xc0); string(" Generator "); delay(2000); cmd(0x01); while(1) { cmd(0x80); string("Press the button"); while(sw!=0) { i=++i; 30
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 if(i==100) i=0; } cmd(0x80); string("RAND NUM: "); cmd(0x8a); int_lcd(i); while(rst!=0); //cmd(0x01); } } 31
Downloaded by Van Le (mrl3v4n@gmail.com) lOMoARcPSD|25518217 KẾT LUẬN
Ba chương của đồ án đã thể hiện được rằng những mục tiêu đặt ra khi thực hiện
đồ án đều đã đạt được. Cụ thể:
Chương 1 đã hệ thống lại những kiến thức tổng quan về 8051.
Chương 2 đã hệ thống lại những kiến thức tổng quan về LCD 16x2.
Chương 3 thể hiện chương trình minh họa hoạt động của mạch đề tài thông qua
mạch nguyên lý và mạch in. Ta có thể thấy rõ nguyên lý, cách vận hành của mạch tạo
số ngẫu nhiên như thế nào. 32
Downloaded by Van Le (mrl3v4n@gmail.com)