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

Thiết kế máy tính cầm tay đơn giản

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

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA KỸ THUẬT ĐIỆN - ĐIỆN TỬ I

BÁO CÁO ĐỒ ÁN
THIẾT KẾ HỆ THỐNG NHÚNG

Đề tài: Máy tính cầm tay đơn giản

Giáo viên hướng dẫn : TS. Nguyễn Ngọc Minh
Lớp
: D11XLTH
Sinh viên thực hiện
: Nguyễn Trung Kiên
: Ngô Tuấn Linh
: Lã Hùng Anh

HÀ NỘI - 2015

Page 1


LỜI MỞ ĐẦU
Ngày nay, hệ thống Nhúng được ứng dụng và lắp đặt trên hầu hết các thiết bị điện
tử, nhất là những thiết bị điện tử thông minh, các thiết bị điện tử ngày càng đa dạng và
dần thay thế các công việc hàng ngày của con người. Những sản phẩm điện tử này được
thiết kế giúp năng suất làm việc hiểu quả hơn và tiết kiệm thời gian và sức lực cho chon
người hơn.
Ý tưởng đề tài xuất phát từ bài toàn thực tế. Một sản phẩm điện tử sử dụng trong
cuộc sống, có thể cho phép tính toán các số liệu với các phép tính cơ bản. Trong phạm vi
môn học, với mục tiêu thiết kế một sản phẩm nhúng đơn giản, hiệu quả và có giao diện,
lập trình nhóm chúng em đã chọn sản phẩm này làm đề tài. Một sản phẩm nhúng đơn


giản, thực tế và tiết kiệm chi phí thiết kế. Mục đích chính là hiểu sâu hơn về cấu trúc cơ
bản của một hệ thống Nhúng và qua đó giúp chúng em lắm vững hơn những kiến thức về
lập trình và vi điều khiển…
Nội dung của đề tài bao gồm 3 chương:
Chương 1: Khảo sát và phân tích bài toán
Chương 2: Thiết kế hệ thống
Chương 3: Viết code và mô phỏng
Do hạn chế về mặt thời gian cũng như kiến thức nên không thể tránh khỏi những thiếu
sót trong lần biên soạn đầu tiên này, chúng em xin chân thành cảm ơn và mong đợi ý kiến
đóng góp của thầy cô và các bạn.

Page 2


MỤC LỤC

Danh Mục Hình

Danh Mục Bảng

Page 3


CHƯƠNG 1: KHẢO SÁT VÀ PHÂN TÍCH BÀI TOÁN
1.1 VAI TRÒ CỦA MÁY TÍNH SỐ
Trước đây, để tính toán trên những con số, người ta thường tính nhẩm, viết trên giấy
hay tính trên bảng tính cơ học. Chúng ta sẽ mất rất nhiều thời gian để tính toán mà vẫn
mắc rất nhiều sai lầm. Các em học sinh vẫn thường sử dụng những máy tính cầm tay đơn
giản để thực hiện nhứng phép tính cơ bản trong môn học. Nếu không có chiếc máy tính
cầm thì việc tính toán sẽ lâu và khó khăn.


Hình 1. Một chiếc máy tính số thực tế
Từ xưa con người đã biết chế tạo ra: bàn phím số ở TRUNG QUỐC phục vụ cho việc
tính toán Đặc biệt trong nền sản xuất hiện đại, máy tính được coi là thiết bị quan trọng
trong nhiều lĩnh vực như: trong các đơn vị hành chính, các nhà máy, phân xưởng sản xuất,
các khu công nghiệp... Khả năng của máy tính ngày càng đa dạng, thông minh và tích hợp
nên máy tính dần thay thế con người và trong tương lai sự phụ thuộc của máy tính điện tử
là không thể thay thế. Một cách tổng quát, máy tính giúp con người tính toán đơn giản
đồng thời cho năng suất cao,độchính xác cao,tiết kiệm thời gian và chi phí.
1.2 Ý TƯỞNG THIẾT KẾ
Xuất phát từ vai trò cần thiết của một chiếc máy tính số, nhóm em đã ứng dụng hệ
thống nhúng để thiết kế một sản phẩm điện tử có chức năng tính toán các phép tính cơ
bản như một chiệc máy tính cầm tay. Sản phẩm tạo ra sẽ đơn giản, thân thiện, hiệu quả và
tiết kiệm chi phí.

Page 4


Mục đích:Ứng dụng kiến thức đã học về hệ thống Nhúng vào thực tế để hiểu sâu hơn
về hệ thống Nhúng, cũng như các kiến thức về lập trình, về các VĐK, ARM,… qua đó
phát triển lên những sản phẩm thông minh hơn, tích hợp hơn và nếu có thể sẽ tạo ra sản
phẩm điện tử hoàn thiện.
Mục tiêu:
- Sản phẩm tạo ra phải đơn giản, tiết kiệm chi phí.
- Có giao diện (LCD), có lập trình và có ARM…
- Sản phẩm hoàn thiện, ổn định và chính xác.
1.3 XÁC ĐỊNH BÀI TOÁN
1.3.1 Xác định chức năng sản phẩm
1. Tính toán các phép tính đơn giản: +, - ,*, /
2. Nhân hai chữ số giá trị nhỏ hơn 45.000

3. Cộng, trừ, chia hai số trong phạm vi 1 tỉ
4. Báo lỗi khi nhập sai phép tính hoặc lỗi chia 0
5. Báo lỗi tràn khi vượt quá khá năng thực hiện
6. Tự reset kết quả mỗi lần thực hiện.
7. Chia hai số làm tròn đến giá trị nguyên.
1.3.2 Xác định các vấn đề gặp phải.
a. Lỗi chia 0
Khi thực hiện phép chia, nếu cố chia là 0 thì phép tính sẽ bị lỗi. Thay vì bằng “vô
cùng” ta sẽ thông báo là phép tính bị lỗi, hoặc không tính được.
b. Lỗi nhập do nhập nhiều phép tính cùng 1 lúc.
Máy tính sẽ chỉ thwujc hiện đc các phép tính đơn như + hoặc – hoặc * hoặc /
Còn nếu phép tính nhập và la ++ hoặc +- thì máy tính sẽ không hiểu đây là phpes tính
gì và sẽ thông báo lỗi.
c. Lỗi tràn dữ liệu tính toán do vượt quá khá năng lưu trữ và tính toán.
Lỗi này gặp phải khi nhân chia một số quá lớn với khả năng lưu trữ của bộ nhớ.Cách
khắc phục là, báo lỗi ngay khi nhập số lớn quá, hoặc so sánh kết quả tính được với khả
năng tính toán của thiết bị và từ đó đưa ra thông báo lỗi tràn.

Page 5


1.4 Sơ đồ giải thuật

Hình 2. Nhập phép tính

Hình 3. Thực hiện phép tính

Page 6



Hình 4. Phép nhân
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG
2.1 SƠ ĐỒ KHỐI TỔNG THỂ

Hình 5. Sơ đồ khối
Chức năng của từng khối:
+ Khối nguồn: cung cấp điện áp 2.5-5.5 cho ARM hoạt động.
+ Khối nhập dữ liệu: nhập số và các phép tính.
+Khối điều khiển: Xử lý các thông tin nhập vào từ khối nhập dữ liệu mã hóa và đưa ra
khối hiển thị.
+Khối hiển thị: hiển thị các kết quả đưa ra từ khối điều khiển.
Nguyên lý hoạt động của sơ đồ:
Khi các khối tạo xung và khối nguồn được đảm bảo lúc đó hệ thống được cấp nguồn
và xung dao động và bắt đầu hoạt động. Khối nhập dữ liệu là bàn phím gồm các nút bấm
nên khi các nút này được bấm thì ngay khi đó các thông tin về phím bấm thông qua dạng
tín hiệu điện được truyền đến khối điều khiển, tại đây các thông tin này được xử lý theo
thuật toán được lập trình sẵn và đưa ra các kết quả xử lý ra khối hiển thị để hiển thị dạng
số ra màn hình giúp người sử dụng có thể nhìn thấy được các kết quả này.

Page 7


2.3. LỰA CHỌN THIẾT BỊ
Trong hệ thống ta có thể thiết kế với nhiều loại linh kiện khác nhau, và trong từng
khối ta cũng có nhiều lựa chọn khác nhau:
2.3.1. Khối điều khiển trung tâm:

Hình 6. Khối điều khiển ARM CORTEX-M0
Khối điều khiển sử dụng ARM COTEXT-M0, nó đóng vai trò hết sức quan trọng
trong hệ thống để điều khiển hệ thống khóa số.


Page 8


2.3.2. Khối hiển thị:
Khối hiển thị chính là màn hình hiển thị LCD 16x2

Hình 7. Khối hiển thị

Khối hiển thị được dùng là LCD, có 2 chế độ truyền dùng cho LCD là chế độ truyền LCD
8 bit và chế độ truyền 4 bit.
2.3.3 Khối bàn phím

Hình 8. Ma trận 16 phím
Nguyên lý hoạt động của việc quét phím chính là cho các cột bằng 0 và lần lượt các
chân nối với hàng mức 1. Rồi kiểm tra xem có cột nào bằng 0 hay không, nếu cột nào
bằng 0 trong thời điểm một hàng bằng 0 thì phát hiện ra phím đó được bấm.
Page 9


2.4. LỰA CHỌN LINH KIỆN
2.4.1. ARM CORTEX-M0
2.4.1.1. Giới thiệu dòng chíp
Hãng Nuvoton là công ty con được tách ra từ Tập đoàn Điện tử Winbond – một hãng
điện tử bán dẫn đứng hàng đầu Đài Loan. Hãng này có 3 dòng chip vi điều khiển (MCU)
4-bit, 8-bit và 32-bit (ARM Cortex). Nội dung trình bày chủ yếu sau đây là dòng chip vi
điều khiển 32-bit lõi ARM Cortex-M0 của hãng Nuvoton.
2.4.1.2. Phân loại và cấu trúc
Đặc trưng của dòng chip MCU 32-bit lõi ARM Cortex-M0: khá đa dạng về chủng
loại, cấu hình và đáp ứng nhu cầu thị trường về dòng chip 32-bit này. Vi điều khiển lõi

ARM Cortex-M0 có nhiều giao diện ngoại vi đáp ứng tính năng mạnh mẽ và khả năng kết
nối. Nó được phát triển để cung cấp một nền tảng chi phí thấp, đáp ứng nhu cầu thực thi
của MCU với việc giảm số lượng bóng bán dẫn trong lõi ARM Cortex dẫn tới tiêu thụ
điện năng thấp và giảm giá thành vi xử lý, đồng thời cung cấp hiệu năng tính toán cao.
Dòng vi điều khiển ARM Cortex-M0 được thiết kế nhúng tối ưu hóa cho các ứng dụng vi
xử lý MCU. Dòng ARM Cortex-M0 là dòng vi điều khiển lõi ARM có kích thước nhỏ
nhất, tiêu thụ điện năng thấp nhất và có kiến trúc được sắp xếp hợp lý tương thích với
việc sử dụng tools nạp của các hãng khác để phát triển các ứng dụng. Hãng Nuvoton sản
xuất chip MCU 32-bit lõi ARM Cortex-M0 với kích thước rất nhỏ, tiêu thụ điện năng thấp
và tích hợp các đặc tính kỹ thuật hiện đại như:
- CPU Cortex-M0 cung cấp khả năng điều khiển ngắt ngoại lệ gọi là vector điều khiển
ngắt lồng nhau (NVIC), được liên kết chặt chẽ với nhân vi xử lý để cung cấp các tính
năng: hỗ trợ vector ngắt gián đoạn lồng nhau; tiết kiệm bộ vi xử lý và có khả năng phục
hồi,giảm và xác định độ trễ ngắt; thay đổi mức ưu tiên năng động.
- Dung lượng bộ nhớ Flash ROM lớn (tối đa 128KB Flash).
- Dải điện áp rộng từ 2.5V~5.5V.
- Tích hợp sẵn nhiều ngoại vi như: UART, USB, ISP, I2C, I2S, PWM, LCD…
- Tích hợp thạch anh nội lên đến 22MHz, có thể điều chỉnh độ chính xác nhờ phần tử
thạch anh bên ngoài 32,768Khz. - Khả năng hỗ trợ nạp đa năng (ISP, ICP và song song),
nạp bằng tools nạp của chính hãng như NuGang, Nu-Link hoặc các tools nạp phổ biến
của hãng khác như J-Link, U-Link và các máy nạp rom đa năng của Elnec, Xeltek, Hilo,...
Page
10


- Có khả năng chống nhiễu tốt, thích hợp cho các ứng dụng dân dụng cũng như trong
công nghiệp.
- Dải nhiệt độ hoạt động từ -40ºC ~ +85ºC.
- Cung cấp các ứng dụng mạnh mẽ và khả năng kết nối với nhiều giao diện ngoại vi.
Quan sát sơ đồ tương quan giá thành và khả năng của các dòng chip Nuvoton, ta thấy

ARM Cortex-M0 là sự phát triển cao giữa dòng chip MCU 8051 và dòng ARM7/9 với
khả năng kết nối và các tính năng vi điều khiển mạnh nhưng vẫn có mức giá phù hợp.

Hình 9. sơ đồ tương quan giá thành và khả năng của các dòng chip Nuvoton

Page
11


Phân loại dòng sản phẩm MCU lõi ARM Cortex-M0:

Hình 10. Biểu đồ phân loại dòng chíp 32-bit lõi ARM Cortex-M0
Trong đồ án chúng em sử dụng Dòng NuMicro NUC140:

Hình 11. Hình ảnh cho NUC140

Page
12


Sơ đồ khối :

Hình 12. Sơ đồ khối NUC140
Tính năng kỹ thuật của dòng NUC140:
- NUC140 là vi điều khiển 32-bit lõi ARM Cortex-M0, trình đơn phần cứng 32
bit, chạy lên tới 50MHz.
- Có 4 mức ưu tiên ngắt đầu vào, có 128 KB flash ROM cho bộ nhớ chương trình.
- 16KB SRAM, 4KB bộ nhớ flash cho nạp chương trình trong hệ thống.

Page

13


- Giao tiếp thiết bị ngoại vi: 8 kênh 12bit ADC, UART nối tiếp tốc độ cao, SPI lên đến
32MHz, I2C lên đến 1MHz; kết nối thiết bị ngoại vi USB 2.0, CAN, LIN…
- Thiết bị ngoại vi có tính năng phong phú: PWM, RTC, bộ ngắt nhận dạng Brown-out,
GPIO, PDMA và 4 bộ Timer 32 bit.
- Dải điện áp hoạt động rộng từ 2,5V~5,5V, chống nhiễu tiếng ồn tốt, tích hợp dữ liệu
flash, dao động thạch anh nội chính xác ±1% với nhiệt độ phòng, có khả năng bảo mật
trên chip, điện áp reset lại mạch thấp.
2.4.1.3. ỨNG DỤNG NUC140EC

Hình 13. Một số ứng dụng của NUC140
Ngày nay ARM được sử dụng rộng rãi, trong các thiết bị như điện thoại đi động các hệ
thống nhúng, và trong nghiên cứu. Giá thành tùy thuộc vào dòngARM. Sự phát triển hiện
nay thì ARM đang có sự phát triển mạnh hơn so với các ngành khác cả về ứng dụng của
nó.
Một số ứng dụng trong làm bằng ARM như:
 Làm các xe động cơ , các cánh tay robot, máy bay loại nhỏ.
 Giao tiếp với module cảm biến.
 Giao tiếp với máy tính…

2.4.2. KHỐI HIỂN THỊ
Tổng quan về LCD
Giới thiệu chung:
Được sản xuất từ năm 1970, LCD là một loại vật chất phản xạ ánh sáng khi điện thế
thay đổi. Nó hoạt động dựa trên nguyên tắc ánh sáng nền (Back Light). Nó bao gồm một
lớp chất lỏng nằm giữa 2 lớp kiếng phân cực ánh sáng. Bình thường, khi không có điện
áp, các tinh thể này được xếp thẳng hàng giữa hai lớp cho phép ánh sáng truyền qua theo
hình xoắn ốc. Hai bộ lọc phân cực, 2 bộ lọc màu và 2 bộ cân chỉnh sẽ xác định cường độ

ánh sáng đi qua và màu nào được tạo ra trên một pixel. Khi có điện áp cấp vào, lớp canh
chỉnh sẽ tạo một vùng điện tích, canh chỉnh lại các tinh thể lỏng đó. Nó không cho phép
ánh sáng đi qua để hiện thị lên hình ảnh tại vị trí điểm ảnh đó. Các điểm ảnh trong màn
hình LCD là một transistor cực nhỏ ở 1 trong 2 chế độ: cho phép ánh sáng đi qua hoặc
không. Điểm ảnh bao gồm 3 yếu tố màu: đỏ, xanh lá, xanh dương. Các màn hình LCD
trước đây thường tiêu thụ điện năng nhiều, độ tương phản thấp cho đến khi các nhà khoa
học người Anh tìm ra "Biphenyl" - vật liệu chính của tinh thể lỏng, thì LCD mới thực sự
phổ biến. LCD xuất hiện đầu tiên trong các máy tính cầm tay, trò chơi điện tử cầm tay,
Page
14


đồng hồ điện tử, … LCD ngày nay được thiết kế nhỏ gọn, nhẹ, chiếm ít không gian, chất
lượng hình ảnh tốt, tiêu thụ ít năng lượng và đang thay thế dần màn hình CRT truyền
thống.
Có hai kiểu cấu tạo màn hình tinh thể lỏng chính, khác nhau ở thiết kế nguồn
sáng.Trong kiểu thứ nhất (hình 4.1), ánh sáng được phát ra từ một đèn nền, có vô số
phương phân cực như các ánh sáng tự nhiên. Ánh sáng này được cho lọt qua lớp kính lọc
phân cực thứ nhất, trở thành ánh sáng phân cực phẳng chỉ có phương thẳng đứng. Ánh
sáng phân cực phẳng này được tiếp tục cho truyền qua tấm thủy tinh và lớp điện cực trong
suốt để đến lớp tinh thể lỏng. Sau đó, chúng tiếp tục đi tới kính lọc phân cực thứ hai; có
phương phân cực vuông góc với kính lọc thứ nhất, rồi đi tới mắt ngườiquan sát. Kiểu màn
hình này thường áp dụng cho màn hình màu ở máy tính hay ti vi. Để tạo ra màu sắt, lớp
ngoài cùng, trước khi ánh sáng đi ra đến mắt người, có kính lọc màu.
Ở loại màn hình tinh thể lỏng thứ hai (hình 4.2), chúng sử dụng ánh sáng tự nhiên đi
vào từ mặt trên và có gương phản xạ nằm sau, dội ánh sáng này lại cho người xem.Đây là
cấu tạo thường gặp ở các loại màn hình tinh thể lỏng đen trắng trong các thiết bị bỏ túi.
Do không cần nguồn sáng nên chúng tiết kiệm năng lượng.
 Hoạt động bật tắt cơ bản:
Nếu điện cực của một điểm ảnh con không được áp một điện thế, thì phần tinh thể

lỏng ở nơi ấy không bị tác động gì cả, ánh sáng sau khi truyền qua chỗ ấy vẫn giữ nguyên
phương phân cực, và cuối cùng bị chặn lại hoàn toàn bởi kính lọc phân cực thứ hai. Điểm
ảnh con này lúc đó bị tắt và đối với mắt đây là một điểm tối.
Để bật một điểm ảnh con, cần đặt một điện thế vào điện cực của nó, làm thay đổi sự
định hướng của các phân tử tinh thể lỏng ở nơi ấy; kết quả là ánh sáng sau khi truyền qua
phần tinh thể lỏng ở chỗ điểm ảnh con này sẽ bị xoay phương phân cực đi, có thể lọt qua
lớp kính lọc phân cực thứ hai, tạo ra một điểm màu trên tấm kính trước.
 LCD 1602A
 Cấu trúc LCD 1602A
LCD 1602A (Hình 4.3 và Hình 4.4) là các loại màn hình tinh thể lỏng nhỏ dùng để
hiển thị các dòng chữ hoặc số trong bảng mã ASCII. Không giống các loại LCD lớn, LCD
1602A được chia sẵn thành từng ô và ứng với mỗi ô chỉ có thể hiển thị một ký tự ASCII.
Cũng vì lý do chỉ hiện thị được ký tự ASCII nên loại LCD này được gọi là Text LCD (để
phân biệt với Graphic LCD có thể hiển thị hình ảnh). Mỗi ô của Text LCD bao gồm các
“chấm” tinh thể lỏng, việc kết hợp “ẩn” và “hiện” các chấm này sẽ tạo thành một ký tự
cần hiển thị. Trong các Text LCD, các mẫu ký tự được định nghĩa sẵn vì thế việc điều
khiển Text LCD sẽ tương đối dễ dàng hơn các graphic LCD. Kích thước của LCD 1602A
được định nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có.
LCD 1602A là loại có 2 dòng và mỗi dòng có thể hiển thị tối đa 16 ký tự.
Page
15


Hình 14. Hình dạng LCD 1602A
LCD 1602A có 2 cách giao tiếp cơ bản là nối tiếp (như I2C) và song song. Ở đây tôi
chỉ giới thiệu loại giao tiếp song song, cụ thể là LCD 1602A điều khiển bởi chip
HD44780U(Hình 4.4) của hãng Hitachi. Đối với các LCD khác chúng ta cần tham khảo
datasheet riêng của từng loại. Tuy nhiên, HD44780U cũng được coi là chuẩn chung cho
các loại Text LCD.
HD44780U là bộ điều khiển cho các Text LCD dạng ma trận điểm (dot-matrix), chip

này có thể được dùng cho các LCD có 1 hoặc 2 dòng hiển thị. HD44780U có 2 mode giao
tiếp là 4 bit và 8 bit. Nó chứa sẵn 208 ký tự mẫu kích thước font 5x8 và 32 ký tự mẫu font
5x10 (tổng cộng là 240 ký tự mẫu khác nhau).

Bảng 1. Chức năng các chân
Chân số
1

Tên
Vss

Chức năng
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
Page
16


2

Vdd

3
4

Vee
Rs

5


R/w

6

E

7-14

DB0DB7

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
Chân này dùng để điều chỉnh độ tương phản của LCD.
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.
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.
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-tolow 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.
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
MSB là bit DB7.
+ Chế độ 4 bit: Dữ liệu được truyền trên 4 đường từ DB4 tới
DB7, bit MSB là DB7

Bảng 2. Tập lệnh của LCD

Page
17



(Hex)
1

Lệnh đến thanh ghi của LCD
Xóa màn hình hiển thị

2

Trở về đầu dòng

4

Giả con trỏ (dịch con trỏ sang trái)

5


Tăng con trỏ (dịch con trỏ sang
phải)

6

Dịch hiển thị sang trái

7

Dịch hiển thị sang phải

8

Tắt con trỏ, tắt hiển thị

A

Tắt hiển thị, bật con trỏ

C

Bật hiển thị, tắt con trỏ

E

Bật hiển thị, nhấp nháy con trỏ

F


Tắt con trỏ, nhấp nháy con trỏ

10

Dịch vị trí con trỏ sang trái

14

Dịch vị trí con trỏ sang phải

18

Dịch toàn bộ vị trí hiển thị sang trái

1C

Dịch toàn bộ vị trí hiển thị sang phải

80

Ép con trỏ về đầu dòng thứ nhất

C0

Ép con trỏ về đầu dòng thứ hai

38

Hai dòng và ma trận 5x7


Để đọc thanh ghi lệnh,ta phải đặt RS=0 và R/W =1 và xung cao xuống thấp cho bít E.
Sau khi đọc thanh ghi lệnh,nếu bit D7(cờ bận ) ở mức cao thì LCD bận, không có thông
tin hay lệnh nào được xuất đến nó. Khi D7=0 mới có thể gửi lệnh hay dữ liệu đến LCD.
Chúng ta nên kiểm tra bit cờ bận trước khi ghi thông tin lên LCD.

Page
18


2.4.3. Bàn Phím

Hình 15. Ma Trận 16 Phím
Thực hiện chức năng giao tiếp với vi điều khiển ARM-CortexM0, dùng để hiển thị
nhập password, thay đổi password, mở khóa cửa. Sử dụng bàn phím ma trận 16 phím. Với
các phím số từ 0 =>9 và các phím chức năng mở cửa, khóa cửa, và đổi mật khẩu.Dùng
các phím bấm có 2 chân giống như hình vẽ:

Hình 16. Nút bấm sử dụng trong mạch

Page
19


CHƯƠNG 3. VIẾT CODE
3.1. Code chương trình trên Nuc140vc3cn
#include <stdio.h>
#include "NUC1xx.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvADC.h"

#include "Driver\DrvTIMER.h"
#include "keypad.h"
* Copyright (c) Nuvoton Technology Corp. All rights reserved.

*/

/*
Keypad 4x4
R0 - PA7
R1 - PA6
R2 - PA4
R3 - PA5

C0 - PE3
C1 - PE2
C2 - PE1
C3 - PE0
*--------------------------------------------------------------------------------------------------------*/
#include <stdio.h>
Page
20


#include "Driver\DrvGPIO.h"
#include "keypad.h"

uint8_t kCod[4][4] =
{{'1', '2', '3', '+'},

//Ma tran phím


{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'C', '0', '=', '/'} } ;
void delay(void)
{
int j;
for(j=0;j<1000;j++);
}
void OpenKeyPad(void)
{
uint8_t i;
/* Initial key pad */
for(i=0;i<8;i++)
DrvGPIO_Open(E_GPE, i, E_IO_QUASI);
}
void CloseKeyPad(void)
{
uint8_t i;
for(i=0;i<8;i++)
Page
21


DrvGPIO_Close(E_GPE, i);
}
uint8_t Scankey(void)
{
uint8_t act[4]={0xf7, 0xfb, 0xfd, 0xfe};
uint8_t i,temp,pin;

for(i=0;i<4;i++) // quet cot, doc hang
{
temp=act[i];
for(pin=0;pin<8;pin++)
{
if((temp&0x01)==0x01)
DrvGPIO_SetBit(E_GPE,pin);
else
DrvGPIO_ClrBit(E_GPE,pin);
temp>>=1;
}
delay(); // tre ktra phim
if(DrvGPIO_GetBit(E_GPE,7)==0)
return kCod[i][0];
if(DrvGPIO_GetBit(E_GPE,6)==0)
return kCod[i][1];
if(DrvGPIO_GetBit(E_GPE,5)==0)
return kCod[i][2];
Page
22


if(DrvGPIO_GetBit(E_GPE,4)==0)
return kCod[i][3];
}
return 0;
}
/* Display ON/OFF Control defines */
#define DON


0x0F /* Display on

*/

#define DOFF

0x0b /* Display off

*/

#define CURSOR_ON

0x0f /* Cursor on

*/

#define CURSOR_OFF

0x0d /* Cursor off

*/

#define BLINK_ON

0x0f /* Cursor Blink

*/

#define BLINK_OFF


0x0e /* Cursor No Blink

*/

#define CLEAR_LCD

0x01

#define RETURN_CURSOR_HOME
HOME position*/

/* Clears the LCD
0x02

*/

/* Returns the cursor to the

#define INCR_MODE

0x07

/* Increment mode

#define DECR_MODE

0x05

/* Decrement Mode */


#define ENTIRE_SHIFT_OFF

0x06

/* Shift Entire Display

#define ENTIRE_SHIFT_ON

0x07

/* Dont Shift Entire Display

#define SHIFT_CUR_LEFT
#define SHIFT_CUR_RIGHT
#define SHIFT_DISP_LEFT
#define SHIFT_DISP_RIGHT

0x13 /* Cursor shifts to the left */
0x17 /* Cursor shifts to the right */
0x1b /* Display shifts to the left */
0x1f /* Display shifts to the right */
Page
23

*/

*/
*/



#define FOUR_BIT

0x2f /* 4-bit Interface */

#define EIGHT_BIT

0x3f /* 8-bit Interface */

#define SINGLE_LINE
#define TWO_LINE
#define

LCD_DATA

0x37 /* Single line display */
0x3F /* Two line display */
GPIOB->DOUT

#define DATA_PIN_0_SET DrvGPIO_SetBit(E_GPB,0)
#define DATA_PIN_0_CLR DrvGPIO_ClrBit(E_GPB,0)
#define DATA_PIN_1_SET DrvGPIO_SetBit(E_GPB,1)
#define DATA_PIN_1_CLR DrvGPIO_ClrBit(E_GPB,1)
#define DATA_PIN_2_SET DrvGPIO_SetBit(E_GPB,2)
#define DATA_PIN_2_CLR DrvGPIO_ClrBit(E_GPB,2)
#define DATA_PIN_3_SET DrvGPIO_SetBit(E_GPB,3)
#define DATA_PIN_3_CLR DrvGPIO_ClrBit(E_GPB,3)
#define DATA_PIN_4_SET DrvGPIO_SetBit(E_GPB,4)
#define DATA_PIN_4_CLR DrvGPIO_ClrBit(E_GPB,4)
#define DATA_PIN_5_SET DrvGPIO_SetBit(E_GPB,5)
#define DATA_PIN_5_CLR DrvGPIO_ClrBit(E_GPB,5)

#define DATA_PIN_6_SET DrvGPIO_SetBit(E_GPB,6)
#define DATA_PIN_6_CLR DrvGPIO_ClrBit(E_GPB,6)
#define DATA_PIN_7_SET DrvGPIO_SetBit(E_GPB,7)
#define DATA_PIN_7_CLR DrvGPIO_ClrBit(E_GPB,7)
#define LCD_RS_SET DrvGPIO_SetBit(E_GPA,0) // RS pin = GPA0
#define LCD_RS_CLR DrvGPIO_ClrBit(E_GPA,0)
#define LCD_RW_SET DrvGPIO_SetBit(E_GPA,1) // RW pin = GPA1
Page
24


#define LCD_RW_CLR DrvGPIO_ClrBit(E_GPA,1)
#define LCD_E_SET DrvGPIO_SetBit(E_GPA,2) // E

pin = GPA2

#define LCD_E_CLR DrvGPIO_ClrBit(E_GPA,2)
char LcdBuf1[16];
void calAndDisplay(unsigned char key); // Hàm tính toán và hi?n th?
void Delay(uint32_t h)
{
while(h--);
}
void Init_GPIO(void)
{
int i;
for(i=0; i<8; i++)
{
DrvGPIO_Open(E_GPB, i, E_IO_QUASI);
}

DrvGPIO_Open(E_GPA, 0, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 1, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 2, E_IO_OUTPUT);
DrvGPIO_ClrBit(E_GPA, 0);
DrvGPIO_ClrBit(E_GPA, 1);
DrvGPIO_ClrBit(E_GPA, 2);
}
void LCD_data(unsigned char wdata)
Page
25


×