Download as pdf or txt
Download as pdf or txt
You are on page 1of 61

TRƯỜNG CAO ĐẲNG FPT FPOLYTECHNIC

BỘ MÔN: ĐIỆN – CƠ KHÍ

ĐỒ ÁN TỐT NGHIỆP

CHUYÊN NGÀNH: TỰ ĐỘNG HÓA

Đề tài:

‘Xây dựng bộ thực hành vi điều khiển điều khiển các đèn LED’

GVHD: ThS. Nguyễn Thị Thắm

SVTH: Phạm Đức Mạnh

Nguyễn Minh Hiếu

Nguyễn Ngọc Tuấn

Nguyễn Hữu Thắng

Lớp: CĐ TĐH K12

HÀ NỘI – 2020
BỘ LAO ĐỘNG-THƯƠNG BINH & XÃ HỘI CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

TRƯỜNG CAO ĐẲNG FPT POLYTECHNIC Độc lập - Tự do - Hạnh phúc

NHẬN XÉT, CHO ĐIỂM ĐATN CỦA CÁN BỘ HƯỚNG DẪN

Giáo viên hướng dẫn: Nguyễn Thị Thắm Khoa: Điện- Cơ khí.
Học hàm : ............................................ Học vị: Thạc sỹ.
Họ tên sinh viên: Phạm Đức Mạnh Lớp: CĐ TĐH K12
Nguyễn Minh Hiếu
Nguyễn Ngọc Tuấn
Nguyên Hữu Thắng
Tên đề tài: “Xây dựng bộ thực hành vi điều khiển điều khiển các đèn led”
NỘI DUNG NHẬN XÉT

.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
.................................................................................................................................
Cán bộ hướng dẫn cho điểm: ..................................................................................
Ngày tháng năm 202
Giáo viên hướng dẫn
(Ký và ghi rõ họ tên)

ThS.Nguyễn Thị Thắm


MỤC LỤC

CHƯƠNG 1: TỔNG QUAN VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN .......................... 2


1.1 Giới thiệu chung về Vi xử lý – Vi điều khiển .................................................... 2
1.1.1 Một số khái niệm ................................................................................................ 2
1.1.2 Lịch sử phát triển của các bộ Vi xử lý – Vi điều khiển ................................. 5
1.1.3 Ứng dụng của Vi xử lý – vi điều khiển ............................................................ 6
1.2 Cấu trúc chung của hệ vi xử lý – vi điều khiển ................................................ 8
1.2.1. Khối xử lý trung tâm (CPU) .......................................................................... 10
1.2.2. Bộ nhớ ................................................................................................................ 10
1.2.3. Cổng vào/ra song song .................................................................................... 14
1.2.4. Cổng vào/ra nối tiếp .......................................................................................... 14
1.2.5. Bộ đếm/Bộ định thời ...................................................................................... 15
1.2.6. Hệ thống bus .................................................................................................... 16
1.3 Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển 17
1.3.1 Các hệ đếm ........................................................................................................ 17
1.3.2 Mã ký tự - Alphanumeric CODE (ASCII, EBCDIC) ................................. 20
1.3.3 Các phép toán số học trên hệ đếm nhị phân................................................. 21
CHƯƠNG II: TÍNH TOÁN LỰA CHỌN THIẾT BỊ TRÊN BẢNG THỰC
HÀNH .......................................................................................................................... 22
2.1.1 Mô hình .............................................................................................................. 22
2.1.2 Các phần tử ........................................................................................................ 23
2.2 Tính toán lựa chọn các phần tử .......................................................................... 30
2.2.1 ARDUNO NANO ............................................................................................... 30
2.2.2 Led 7 thanh ......................................................................................................... 32
2.2.3 .................................................................................................................... LED ma trận
....................................................................................................................................... 33
2.2.4 LED đơn ............................................................................................................. 34
CHƯƠNG 3: SƠ ĐỒ MẠCH ĐIỆN VÀ NGUYÊN LÝ HOẠT ĐỘNG .................. 35
3.1 Sơ đồ nguyên lý. ................................................................................................... 35
3.2 Nguyên lý hoạt động ................................................. Error! Bookmark not defined.
3.3 Điều khiển LED ................................................................................................... 38
CHƯƠNG 4: KẾT LUẬN............................................................................................ 56
Lời nói đầu
Sau khi đã được học, nghiên cứu và tìm hiểu về vi điều khiển ở phần lý thuyết.
Chúng ta có thể bắt đầu tiến hành thực hiện các bài thí nghiệm đối với vi điều
khiển nhằm mục đích giúp chúng ta hiểu một cách tường tận hơn về những gì
mà ta đã được học trong phần lý thuyết cũng như cách thức vận dụng nó vào
trong thực tế. Trong thực tế, các ứng dụng của vi điều khiển thì rất đa dạng và
phong phú. Từ những ứng dụng đơn giản chỉ có vài thiết bị ngoại vi cho đến
những hệ thống vi điều khiển. Cho nên mô hình các modul thí nghiệm vi điều
khiển này được thiết kế với tương đối đầy đủ các yêu cầu phần cứng và có rất
nhiều chương trình điều khiển mẫu cũng như các bài tập thực hành từ đơn giản
đến phức tạp có thể giúp cho sinh viên thực hành, thí nghiệm và tự nghiên cứu,
tự học môn học này. Mô hình thí nghiệm vi điều khiển này hỗ trợ cho việc thí
nghiệm: các thiết bị ngoại vi như: LED đơn, LED ma trận, LED 7 đoạn, LCD,
Ma trận
Ngày hôm nay chúng em mang tới hội đồng đè tài Xây dựng bộ thực hành vi
điều khiển các đèn LED

Nhóm chúng em xin cảm ơn cô Ths.Nguyễn Thị Thắm đã hướng dẫn chúng em
hoàn thành đè tài này!

ĐỒ ÁN TỐT NGHIỆP
CHƯƠNG 1: TỔNG QUAN VỀ VI XỬ LÝ – VI ĐIỀU KHIỂN

1.1 Giới thiệu chung về Vi xử lý – Vi điều khiển

1.1.1 Một số khái niệm

Khái niệm “vi xử lý” (microprocessor) và “vi điều khiển”


(microcontroller). Về cơ bản hai khái niệm này không khác nhau nhiều, “vi xử
lý” là thuật ngữ chung dùng để đề cập đến kỹ thuật ứng dụng các công nghệ
vi điện tử, công nghệ tích hợp và khả năng xử lý theo chương trình vào các
lĩnh vực khác nhau. Vào những giai đoạn đầu trong quá trình phát triển của
công nghệ vi xử lý, các chip (hay các vi xử lý) được chế tạo chỉ tích hợp những
phần cứng thiết yếu như CPU cùng các mạch giao tiếp giữa CPU và các phần
cứng khác. Trong giai đoạn này, các phần cứng (kể cả bộ nhớ) thường không
được tích hợp trên chip mà phải ghép nối thêm bên ngoài. Các phần cứng này
được gọi là các ngoại vi (Peripherals).
Về sau, nhờ sự phát triển vượt bậc của công nghệ tích hợp, các ngoại vi
cũng được tích hợp vào bên trong IC và người ta gọi các vi xử lý đã được tích
hợp thêm các ngoại vi là các “vi điều khiển”. Vi xử lý có các khối chức năng
cần thiết để lấy dữ liệu, xử lý dữ liệu và xuất dữ liệu ra ngoài sau khi đã xử lý.
Và chức năng chính của Vi xử lý chính là xử lý dữ liệu, chẳng hạn như
cộng, trừ, nhân, chia, so sánh.v.v... Vi xử lý không có khả năng giao tiếp trực
tiếp với các thiết bị ngoại vi, nó chỉ có khả năng nhận và xử lý dữ liệu. Để vi
xử lý hoạt động cần có chương trình kèm theo, các chương trình này điều
khiển các mạch logic và từ đó vi xử lý xử lý các dữ liệu cần thiết theo yêu cầu.
Chương trình là tập hợp các lệnh để xử lý dữ liệu thực hiện từng lệnh được
lưu trữ trong bộ nhớ, công việc thực hành lệnh bao gồm: nhận lệnh từ bộ nhớ,
giải mã lệnh và thực hiện lệnh sau khi đã giải mã. Để thực hiện các công việc
với các thiết bị cuối cùng, chẳng hạn điều khiển động cơ, hiển thị kí tự trên
2

ĐỒ ÁN TỐT NGHIỆP
màn hình .... đòi hỏi phải kết hợp vi xử lý với các mạch điện giao tiếp với bên
ngoài được gọi là các thiết bị I/O (nhập/xuất) hay còn gọi là các thiết bị ngoại
vi. Bản thân các vi xử lý khi đứng một mình không có nhiều hiệu quả sử
dụng, nhưng khi là một phần của một bộ vi điều khiển, thì hiệu quả ứng dụng
của Vi xử lý là rất lớn. Vi xử lý kết hợp với các thiết bị khác được sử trong
các hệ thống lớn, phức tạp đòi hỏi phải xử lý một lượng lớn các phép tính phức
tạp, có tốc độ nhanh. Chẳng hạn như các hệ thống sản xuất tự động trong công
nghiệp, các tổng đài điện thoại, hoặc ở các robot có khả năng hoạt động phức
tạp v.v... Bộ Vi xử lý có khả năng vượt bậc so với các hệ thống khác về khả
năng tính toán, xử lý, và thay đổi chương trình linh hoạt theo mục đích người
dùng, đặc biệt hiệu quả đối với các bài toán và hệ thống lớn. Tuy nhiên đối với
các ứng dụng nhỏ, tầm tính toán không đòi hỏi khả năng tính toán lớn thì việc
ứng dụng vi xử lý cần cân nhắc. Bởi vì hệ thống dù lớn hay nhỏ, nếu dùng vi
xử lý thì cũng đòi hỏi các khối mạch điện giao tiếp phức tạp như nhau. Các khối
này bao gồm bộ nhớ để chứa dữ liệu và chương trình thực hiện, các mạch điện
giao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối này cùng liên kết
với vi xử lý thì mới thực hiện được công việc. Để kết nối các khối này đòi hỏi
người thiết kế phải hiểu biết tinh tường về các thành phần vi xử lý, bộ nhớ, các
thiết bị ngoại vi. Hệ thống được tạo ra khá phức tạp, chiếm nhiều không
gian, mạch in phức tạp và vấn đề chính là trình độ người thiết kế. Kết quả là
giá thành sản phẩm cuối cùng rất cao, không phù hợp để áp dụng cho các hệ
thống nhỏ. Vì một số nhược điểm trên nên các nhà chế tạo tích hợp một ít bộ
nhớ và một số mạch giao tiếp ngoại vi cùng với vi xử lý vào một IC
duy nhất được gọi là Microcontroller-Vi điều khiển, vi điều khiển có khả
năng tương tự như khả năng của vi xử lý, nhưng cấu trúc phần cứng đơn giản
hơn nhiều. Vi điều khiển ra đời mang lại sự tiện lợi đối với người dùng, họ
không cần nắm vững một khối lượng kiến thức quá lớn như khi làm việc với
3

ĐỒ ÁN TỐT NGHIỆP
vi xử lý, việc thiết kế mạch điện cũng trở nên đơn giản hơn nhiều và có khả
năng giao tiếp trực tiếp với các thiết bị bên ngoài. Vi điều khiển tuy được
xây dựng với phần cứng đơn giản hơn, nhưng thay vào ưu điểm này là khả
năng xử lý bị giới hạn (tốc độ xử lý chậm hơn và khả năng tính toán ít hơn,
dung lượng chương trình bị giới hạn). Vì vậy, vi điều khiển có giá thành rẻ hơn
nhiều so với vi xử lý, việc sử dụng đơn giản, nên nó được ứng dụng vào nhiều,
không đòi hỏi tính toán phức tạp. Vi điều khiển được ứng dụng trong các dây
chuyền tự động loại nhỏ, các robot có chức năng đơn giản, trong máy giặt, ôtô
v.v... Năm 1976 Intel giới thiệu bộ vi điều khiển (microcontroller) 8748, một
chip tương tự như các bộ vi xử lý và là chip đầu tiên trong họ MCS-48. Độ
phức tạp, kích thước và khả năng của Vi điều khiển tăng thêm một bậc quan
trọng vào năm 1980 khi intel tung ra chip 8051, bộ Vi điều khiển đầu tiên của
họ MCS-51 và là chuẩn công nghệ cho nhiều họ Vi điều khiển được sản xuất
sau này. Sau đó 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 với tính năng được cải tiến ngày càng mạnh.
Trong tài liệu này, ranh giới giữa hai khái niệm “vi xử lý” và “vi điều khiển”
thực sự không cần phải phân biệt rõ ràng. Ta dùng thuật ngữ “vi xử lý” khi đề
cập đến các khái niệm cơ bản của kỹ thuật vi xử lý nói chung và sẽ dùng thuật
ngữ “vi điều khiển” khi đi sâu nghiên cứu một họ chip cụ thể.

ĐỒ ÁN TỐT NGHIỆP
1.1.2 Lịch sử phát triển của các bộ Vi xử lý – Vi điều khiển

Hình 1.1. Lịch sử phát triển của Vi xử lý – Vi điều khiển

- Thế hệ 1 (1971 - 1973): vi xử lý 4 bit, đại diện là 4004, 4040, 8080 (Intel)
hay

IPM-16 (National Semiconductor).

+ Độ dài word thường là 4 bit (có thể lớn hơn).

+ Tốc độ 10 - 60 μs / lệnh với tần số xung nhịp 0.1 - 0.8 MHz. + Tập lệnh đơn
giản và phải cần nhiều vi mạch phụ trợ.
- Thế hệ 2 (1974 - 1977): vi xử lý 8 bit, đại diện là 8080, 8085 (Intel) hay Z80

+ Tập lệnh phong phú hơn.

+ Địa chỉ có thể đến 64 KB. Một số bộ vi xử lý có thể phân biệt 256 địa chỉ
cho thiết bị ngoại vi.
+ Sử dụng công nghệ NMOS hay CMOS.

+ Tốc độ 1 - 8 μs / lệnh với tần số xung nhịp 1 - 5 MHz

- Thế hệ 3 (1978 - 1982): vi xử lý 16 bit, đại diện là 68000/68010 (Motorola)


hay

ĐỒ ÁN TỐT NGHIỆP
8086/ 80286/ 80386 (Intel)

+ Tập lệnh đa dạng với các lệnh nhân, chia và xử lý chuỗi.

+ Địa chỉ bộ nhớ có thể từ 1 - 16 MB và có thể phân biệt tới 64KB địa chỉ
cho ngoại vi
+ Sử dụng công nghệ HMOS.

+ Tốc độ 0.1 - 1 μs / lệnh với tần số xung nhịp 5 - 10 MHz.

- Thế hệ 4: vi xử lý 32 bit 68020/68030/68040/68060 (Motorola) hay

80386/80486 (Intel) và vi xử lý 32 bit Pentium (Intel)

+ Bus địa chỉ 32 bit, phân biệt 4 GB bộ nhớ. + Có thể dùng thêm các bộ đồng
xử lý

(coprocessor). + Có khả năng làm việc với bộ nhớ ảo.

+ Có các cơ chế pipeline, bộ nhớ cache.


+ Sử dụng công nghệ HCMOS.

- Thế hệ 5: vi xử lý 64

1.1.3 Ứng dụng của Vi xử lý – vi điều khiển

Vi xử lý, chính là chip của các loại máy tính ngày nay. Ở đây, ta chỉ nói đên ứng
dụng của vi điều khiển. Vi điều khiển có thể dùng trong thiết kế các loại hệ thống
nhúng. Hệ thống nhúng có trong hầu hết các thiết bị tự động, thông minh ngày nay.
Chúng ta có thể dùng vi điều khiển để thiết kế bộ điều khiển cho các sản phẩm như:
Trong các sản phẩm dân dụng:

- Nhà thông minh:

- Cửa tự động

- Khóa số

- Tự động điều tiết ánh sáng thông minh (bật/tắt đèn theo thời gian, theo
6

ĐỒ ÁN TỐT NGHIỆP
cường độ ánh sáng,...)

- Điều khiển các thiết bị từ xa (qua điều khiển, qua tiếng vỗ tay,...)

- Điều tiết hơi ẩm, điều tiết nhiệt độ, điều tiết không khí, gió

- Hệ thống vệ sinh thông minh,...

Trong quảng cáo:

- Các loại biển quảng cáo nháy chữ

- Quảng cáo ma trận LED (một màu, 3 màu, đa màu)

- Điều khiển máy cuốn bạt quảng cáo,...

Các máy móc dân dụng:

- Máy điều tiết độ ẩm cho vườn cây


- Buồng ấp trứng gà/vịt
- Đồng hồ số, đồng hồ số có điều khiển theo thời gian
Các sản phẩm giải trí:

- Máy nghe nhạc

- Máy chơi game

- Đầu thu kỹ thuật số, đầu thu set-top-box,...

Trong các thiết bị y tế:

- Máy móc thiết bị hỗ trợ: máy đo nhịp tim, máy đo đường huyết, máy đo

huyết áp, điện tim đồ, điện não đồ,…

- Máy cắt/mài kính

- Máy chụp chiếu (city, X-quang,...)

Các sản phẩm công nghiệp:


- Điều khiển động cơ

- Điều khiển số (PID, mờ,...)


7

ĐỒ ÁN TỐT NGHIỆP
- Đo lường (đo điện áp, đo dòng điện, áp suất, nhiệt độ,...)

- Cân băng tải, cân toa xe, cân ô tô,...

- Máy cán thép: điều khiển động cơ máy cán, điều khiển máy quấn thép,..

- Làm bộ điều khiển trung tâm cho RoBot

- Ổn định tốc độ động cơ

- Đếm sản phẩm của 1 nhà máy, xí nghiệp,…

- Máy vận hành tự động (dạng CNC)

1.2 Cấu trúc chung của hệ vi xử lý – vi điều khiển

Sơ đồ khối một máy tính cổ điển

Hình 1.2. Sơ đồ khối một máy tính cổ điển

- ALU (đơn vị logic số học): thực hiện các bài toán cho máy tính bao gồm: cộng

(+), trừ (-), nhân (*), chia (/), phép toán logic, …

- Control (điều khiển): điều khiển, kiểm soát các đường dữ liệu giữa các thành
phần của máy tính.
- Memory (bộ nhớ): lưu trữ chương trình hay các kết quả trung gian.

- Input (nhập), Output (Xuất): xuất nhập dữ liệu (còn gọi là thiết bị ngoại vi).

Về cơ bản kiến trúc của một vi điều khiển gồm những phần cứng sau:

- Đơn vị xử lý trung tâm CPU (Central Processing Unit).

ĐỒ ÁN TỐT NGHIỆP
- Các bộ nhớ (Memories).

- Các cổng vào/ra (song song (Parallel I/O Ports), nối tiếp (Serial I/O Ports))

- Các bộ đếm/bộ định thời (Timers).

- Hệ thống BUS (Địa chỉ, dữ liệu, điều khiển)


Ngoài ra với mỗi loại vi điều khiển cụ thể còn có thể có thêm một số phần cứng khác
như bộ biến đổi tương tự - số ADC, bộ biến đổi số - tương tự DAC, các mạch điều chế
dạng sóng WG, điều chế độ rộng xung PWM…Bộ não của mỗi vi điều khiển chính
là CPU, các phần cứng khác chỉ là các cơ quan chấp hành dưới quyền của CPU.
Mỗi cơ quan này đều có một cơ chế hoạt động nhất định mà CPU

phải tuân theo khi giao tiếp với chúng.

Hình 1.3. Sơ đồ khối hệ vi điều khiển

Để có thể giao tiếp và điều khiển các cơ quan chấp hành (các ngoại vi), CPU

sử dụng 03 loại tín hiệu cơ bản là tín hiệu địa chỉ (Address), tín hiệu dữ liệu (Data)

và tín hiệu điều khiển (Control). Về mặt vật lý thì các tín hiệu này là các đường dây
dẫn điện nối từ CPU đến các ngoại vi hoặc thậm chí là giữa các ngoại vi với nhau.
Tập hợp các đường tín hiệu có cùng chức năng gọi là các bus. Như vậy ta có các bus
địa chỉ, bus dữ liệu và bus điều khiển.
9

ĐỒ ÁN TỐT NGHIỆP
1.2.1. Khối xử lý trung tâm (CPU)

CPU có cấu tạo gồm có đơn vị xử lý số học và lôgic (ALU), các thanh ghi, các
khối lôgic và các mạch giao tiếp. Chức năng của CPU là tiến hành các thao tác tính
toán xử lý, đưa ra các tín hiệu địa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm
vụ nào đó do người lập trình đưa ra thông qua các lệnh (Instructions).

Hình 1.4. Khối xử lý trung tâm

1.2.2. Bộ nhớ

Nhìn chung có hai loại bộ nhớ là bộ nhớ chương trình và bộ nhớ dữ liệu. Bộ
nhớ chương trình dùng để chứa mã chương trình hướng dẫn CPU thực hiện một
nhiệm vụ nào đó. Thông thường thì bộ nhớ chương trình là các loại bộ nhớ “không
bay hơi” (non-volatile), nghĩa là không bị mất nội dung chứa bên trong khi ngừng
cung cấp nguồn nuôi. Có thể kể ra một số bộ nhớ thuộc loại này như: ROM, PROM,
EPROM, EEPROM, Flash. Bộ nhớ dữ liệu là bộ nhớ dùng để chứa dữ liệu (bao gồm
các tham số, các biến tạm thời…). Tùy thuộc loại dữ liệu mà bộ nhớ loại này có thể là
loại “không bay hơi” hoặc “bay hơi” (mất dữ liệu khi cắt nguồn nuôi). Loại “bay hơi”
thường thấylà các bộ nhớ SRAM.
Bộ nhớ chương trình (Program memory): Là bộ nhớ Flash lập trình được,
10

ĐỒ ÁN TỐT NGHIỆP
trong các chip vi điều khiển cũ (như AT90S1200 hay AT()2313…) bộ nhớ chương
trình chỉ gồm 1 phần là Application Flash Section nhưng trong các chip mới chúng ta
có thêm phần Boot Flash setion. Trong tài liệu này chúng ta hiểu bộ nhớ chương trình
là Application section. Thực chất, application section bao gồm 2 phần: phần chứa các
instruction (mã lệnh cho hoạt động của chip) và phần chứa các vector ngắt (interrupt
vectors). Các vector ngắt nằm ở phần đầu của application section (từ địa chỉ 0x0000)
và dài đến bao nhiêu tùy thuộc vào loại chip. Phần chứa instruction nằm liền sau đó,
chương trình viết cho chip phải được load vào phần này.

Hình 1.5. Cấu trúc của bộ nhớ


Bộ nhớ dữ liệu (data memory): Đây là phần chứa các thanh ghi quan trọng nhất
của chip, việc lập trình cho chip phần lớn là truy cập bộ nhớ này. Bộ nhớ dữ liệu trên
các chip AVR có độ lớn khác nhau tùy theo mỗi chip, tuy nhiên về cơ bản phần bộ
nhớ này được chia thành 5 phần:
Phần 1: là phần đầu tiên trong bộ nhớ dữ liệu, như mô tả tronh hình 2, phần
này bao gồm 32 thanh ghi có tên gọi là register file (RF), hay General Purpose
11

ĐỒ ÁN TỐT NGHIỆP
Rgegister
– GPR, hoặc đơn giản là các Thanh ghi. Tất cả các thanh ghi này đều là các thanh ghi
8 bits.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Hầu hết các chíp đều bao gồm 32 thanh ghi Register File có địa chỉ tuyệt đối từ

0x0000 đến 0x001F. Mỗi thanh ghi có thể chứa giá trị dương từ 0 đến 255 hoặc các
giá trị có dấu từ -128 đến 127 hoặc mã ASCII của một ký tự nào đó…Các thanh ghi
này được đặt tên theo thứ tự là R0 đến R31. Chúng được chia thành 2 phần, phần 1
bao gồm các thanh ghi từ R0 đến R15 và phần 2 là các thanh ghi R16 đến R31. Các
thanh ghi này có các đặc điểm sau:
- Được truy cập trực tiếp trong các instruction .

- Các toán tử, phép toán thực hiện trên các thanh ghi này chỉ cần 1 chu kỳ xung
clock.
- Register File được kết nối trực tiếp với bộ xử lí trung tâm – CPU của chip.

- Chúng là nguồn chứa các số hạng trong các phép toán và cũng là đích chứa kết quả
trả lại của phép toán.
Tất cả các instruction sử dụng RF làm toán hạng đều có thể truy nhập tất cả
các RF một cách trực tiếp trong 1 chu kỳ xung clock, ngoại trừ SBCI, SUBI, CPI,
ANDI và LDI, các instruction này chỉ có thể truy nhập các thanh ghi từ R16 đến R31.
Thanh ghi R0 là thanh ghi duy nhất được sử dụng trong instruction LPM
(Load Program Memory). Các thanh ghi R26, R27, R28, R29, R30 và R31 ngoài
chức năng thông thường còn được sử dụng như các con trỏ (Pointer register) trong
một số instruction truy xuất gián tiếp.

Tóm lại 32 RF của AVR được xem là 1 phần của CPU, vì thế chúng được CPU sử dụng
trực tiếp và nhanh chóng, để gọi các thanh ghi này, chúng ta không cần gọi địa chỉ mà

12

ĐỒ ÁN TỐT NGHIỆP
chỉ cần gọi trực tiếp tên của chúng. RF thường được sử dụng như các toán hạng
(operand) của các phép toán trong lúc lập trình.

Hình 1.6. Mô tả các chức năng phụ của các RF.

Phần 2: là phần nằm ngay sau register file, phần này bao gồm 64 thanh ghi được
gọi là 64 thanh ghi nhập/xuất (64 I/O register) hay còn gọi là vùng nhớ I/O (I/O
Memory). Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Tất cả
các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở đây. Xem lại ví
dụ trong bài 1, trong đó tôi có đề cập về việc điều khiển các PORT của chíp Vi điều
khiển. Xa hơn, nếu muốn truy xuất các thiết bị ngoại vi khác như Timer, chuyển đổi
Analog/Digital, giao tiếp USART…đều thực hiện thông qua việc điều khiển các
thanh ghi trong vùng nhớ này.Vùng nhớ I/O có thể được truy cập như SRAM hay
như các thanh ghi I/O. Nếu sử dụng instruction truy xuất SRAM để truy xuất vùng
nhớ này thì địa chỉ của chúng được tính từ 0x0020 đến 0x005F. Nhưng nếu truy xuất
như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0x0000 đến 0x003F.
Để thống nhất cách sử dụng thuật ngữ, ta dùng khái niệm “địa chỉ I/O” cho các
thanh ghi trong vùng nhớ I/O để nói đến địa chỉ không tính phần Register File, khái
niệm “địa chỉ bộ nhớ” của thanh ghi là chỉ địa chỉ tuyệt đối của chúng trong SRAM.
13

ĐỒ ÁN TỐT NGHIỆP
Phần 3: RAM tĩnh, nội (internal SRAM), là vùng không gian cho chứa các biến
(tạm thời hoặc toàn cục) trong lúc thực thi chương trình.

Phần 4: RAM ngoại (external SRAM), các chip vi xử lý đều cho phép người sử
dụng gắn thêm các bộ nhớ ngoài để chứa biến, vùng này thực chất chỉ tồn tại khi nào
người sử dụng gắn thêm bộ nhớ ngoài vào chip.
Phần 5: EEPROM (Electrically Ereasable Programmable ROM) là một phần
quan trọng của các chip mới, vì là ROM nên bộ nhớ này không bị xóa ngay cả khi
không cung cấp nguồn nuôi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữ liệu.
EEPROM được tách riêng và có địa chỉ tính từ 0x0000.

1.2.3. Cổng vào/ra song song

Đây là các đường tín hiệu được nối với một số chân của IC dùng để giao tiếp với
thế giới bên ngoài IC. Giao tiếp ở đây là đưa điện áp ra hoặc đọc vào giá trị điện áp
tại chân cổng. Các giá trị điện áp đưa ra hay đọc vào chỉ có thể được biểu diễn bởi
một trong hai giá trị lôgic (0 hoặc 1). Trong kỹ thuật vi xử lý, người ta thường dùng
quy ước lôgic dương: giá trị lôgic 0 ứng với mức điện áp thấp xấp xỉ 0VDC, giá trị
lôgic 1 ứng với mức điện áp cao xấp xỉ +5VDC. Tùy loại vi xử lý mà “khoảng xấp
xỉ” đó là khác nhau nhưng nhìn chung là tương thích với mức lôgic TTL. Mỗi
cổng vào/ra song song thường gồm 08 đường vào/ra khác nhau và gọi là các cổng 08
bit. Các đường tín hiệu vào/ra của các cổng và thuộc cùng một cổng là độc lập với
nhau. Điều đó có nghĩa là ta có thể đưa ra hay đọc vào các giá trị lôgic khác nhau đối
với từng chân cổng (từng đường tín hiệu vào/ra). Một điều cần chú ý nữa đối với ác
cổng vào/ra đó là chúng có thể được tích hợp thêm (nói đúng hơn là kiêm thêm) các
chức năng đặc biệt liên quan đến các ngoại vi khác.

1.2.4. Cổng vào/ra nối tiếp

Khác với cổng song song, với cổng nối tiếp các bit dữ liệu được truyền lần
lượt trên cùng một đường tín hiệu thay vì truyền cùng một lúc trên các đường tín hiệu
14

ĐỒ ÁN TỐT NGHIỆP
khác nhau. Thông thường thì việc truyền dữ liệu bằng cổng nối tiếp
phải tuân theo một cơ chế, một giao thức hay một nguyên tắc nhất định. Có thể kể ra
một số giao thức như SPI, I2C, SCI…
Cổng nối tiếp có 02 kiểu truyền dữ liệu chính:

Truyền đồng bộ (synchronous): thiết bị truyền và thiết bị nhận đều dùng chung một
xung nhịp (clock).Truyền dị bộ (asynchronous): thiết bị truyền và thiết bị nhận sử
dụng hai nguồn xung nhịp riêng. Tuy nhiên hai nguồn xung nhịp này không được
khác nhau quá nhiều.Xung nhịp là yếu tố không thể thiếu trong truyền dữ liệu nối tiếp
và nó có vai trò xác định giá trị của bit dữ liệu (hay nói đúng hơn là xác định thời
điểm đọc mức lôgic trên đường truyền dữ liệu).
Cổng nối tiếp có thể có một trong các tính năng sau:

Đơn công: thiết bị chỉ có thể hoặc truyền hoặc nhận dữ liệu.

Bán song công: thiết bị có thể truyền và nhận dữ liệu nhưng tại một thời điểm chỉ có
thể làm một trong hai việc đó.
Song công: thiết bị có thể truyền và nhận dữ liệu đồng thời.

1.2.5. Bộ đếm/Bộ định thời

Đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản: đếm các
xung nhịp. Mỗi khi có thêm một xung nhịp tại đầu vào đếm thì giá trị của bộ đếm sẽ
được tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm đi 01 đơn vị (trong
chế độ đếm lùi/đếm xuống).
Xung nhịp đưa vào đếm có thể là một trong hai loại:

Xung nhịp bên trong IC. Đó là xung nhịp được tạo ra nhờ kết hợp mạch daođộng
bên trong IC và các linh kiện phụ bên ngoài nối với IC. Ta có thể ví đó là “nhịp tim”
để toàn bộ các phần cứng bên trong vi xử lý (bao gồm cả CPU và các ngoại vi) có thể
hoạt động được. Trong trường hợp sử dụng xung nhịp loại này, người ta gọi là các bộ
định thời (timers). Do xung nhịp bên loại này thường đều đặn nên ta có thể dùng để
15

ĐỒ ÁN TỐT NGHIỆP
đếm thời gian một cách khá chính xác.
Xung nhịp bên ngoài IC. Đó là các tín hiệu lôgic thay đổi liên tục giữa 02 mức0-1và
không nhất thiết phải là đều đặn. Trong trường hợp này người ta gọi là các bộ đếm
(counters). Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bên ngoài như
đếm các sản phầm chạy trên băng chuyền, đếm xe ra/vào kho bãi… Một khái niệm
quan trọng cần phải nói đến là sự kiện “tràn” (overflow). Nó được hiểu là sự kiện bộ
đếm đếm vượt quá giá trị tối đa mà nó có thể biểu diễn và quaytrở về giá trị 0. Với bộ
đếm 8 bit, giá trị tối đa là 255 và là 65535 với bộ đếm 16bit.

1.2.6. Hệ thống bus

Bus địa chỉ - Address bus


Là các đường tín hiệu song song 1 chiều nối từ CPU đến bộ nhớ. Độ rộng bus: là số
các đường tín hiệu, có thể là 8, 18, 20, 24, 32 hay 64. CPU gửi giá trị địa chỉ của ô
nhớ cần truy nhập (đọc/ghi) trên các đường tín hiệu này. 1 CPU với n đường địa chỉ
sẽ có thể địa chỉ hoá được 2n ô nhớ. Ví dụ, 1 CPU có 16 đường địa chỉ có thể địa
chỉ hoá được 216 hay 65,536 (64K) ô nhớ.
Bus dữ liệu - Data bus
Độ rộng Bus: 4, 8, 16, 32 hay 64 bits. Là các đường tín hiệu song song 2 chiều,
nhiều thiết bị khác nhau có thể được nối với bus dữ liệu; nhưng tại một thời điểm,
chỉ có 1 thiết bị duy nhất có thể được phép đưa dữ liệu lên bus dữ liệu. Bất kỳ thiết
bị nào đợc kết nối đến bus dữ liệu phải có đầu ra ở dạng 3 trạng thái, sao cho nó có
thể ở trạng thái treo (trở kháng cao) nếu không được sử dụng.
Bus điều khiển - Control bus
Bao gồm 4 đến 10 đường tín hiệu song song. CPU gửi tín hiệu ra bus điều khiển để
cho phép các đầu ra của ô nhớ hay các cổng I/O đã được địa chỉ hoá. Các tín hiệu
điều khiển thường là: đọc/ ghi bộ nhớ - memory read, memory write, đọc/ ghi cổng
vào/ra - I/O read, I/O write. Ví dụ, để đọc 1 byte dữ liệu từ ô nhớ sẽ cần đến các

16

ĐỒ ÁN TỐT NGHIỆP
hoạt động sau:
CPU đưa ra địa chỉ của ô nhớ cần đọc lên bus địa chỉ.

CPU đưa ra tín hiệu đọc bộ nhớ - Memory Read trên bus điều khiển.

Tín hiệu điều khiển này sẽ cho phép thiết bị nhớ đã được địa chỉ hoá đưa byte dữ liệu
lên bus dữ liệu. Byte dữ liệu từ ô nhớ sẽ được truyền tải qua bus dữ liệu đến CPU.

1.3 Định dạng dữ liệu và biểu diễn thông tin trong hệ vi xử lý – vi điều khiển

1.3.1 Các hệ đếm

- Hệ thập phân - Decimal

- Hệ nhị phân - Binary

- Hệ16 - Hexadecimal

- Mã BCD (standard BCD, gray code): (Binary Coded Decimal)

Trong thực tế, đối với một số ứng dụng như đếm tần, đo điện áp, … ngõ ra ở dạng
số thập phân, ta dùng mã BCD. Mã BCD dùng 4 bit nhị phân để mã hoá cho một số
thập phân 0..9. Như vậy, các số hex A..F không tồn tại trong mã BCD. Mã BCD
gồm có 2 loại:
- Mã BCD không nén (unpacked): biểu diễn một số BCD bằng 8 bit nhị phân

- Mã BCD nén (packed): biểu diễn một số BCD bằng 4 bit nhị phân

VD: Số thập phân 5 2 9

- Số BCD không nén 0000 0101b 0000 0010b 0000 1001b

- Số BCD nén 0101b 0010b 1001b

- Mã hiển thị 7 đoạn (7-segment display code)

17

ĐỒ ÁN TỐT NGHIỆP
Hình 1.3.1. LED 7 thanh và cách mã hóa
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 HEX

23 22 21 20 23 22 21 20
0 0 0 0 0 0 0 0 0x00
0 0 0 0 0 0 0 1 0x01
0 0 0 0 0 0 1 1 0x03
0 0 0 0 0 1 1 1 0x07
0 0 0 0 1 1 1 1 0x0F
0 0 0 1 1 1 1 1 0x1F
0 0 1 1 1 1 1 1 0x3F
0 1 1 1 1 1 1 1 0x7F
1 1 1 1 1 1 1 1 0xFF
1 0 1 0 1 0 1 0 0xAA
0 1 0 1 0 1 0 1 0x55

18

ĐỒ ÁN TỐT NGHIỆP
- Các mã hệ đếm thông dụng

Bảng 1.3.2 Giá trị tương ứng giữa các hệ số

19

ĐỒ ÁN TỐT NGHIỆP
1.3.2 Mã ký tự - Alphanumeric CODE (ASCII, EBCDIC)

Bảng 1.3. Bảng mã ASCII

20

ĐỒ ÁN TỐT NGHIỆP
Bảng 1.4. Bảng mã ASCII có cả ký tự trong phần mở rộng

1.3.3 Các phép toán số học trên hệ đếm nhị phân

Phép trừ nhị phân, chính là phép cộng nhị phân với số bù 2 của số trừ
21

ĐỒ ÁN TỐT NGHIỆP
CHƯƠNG II: TÍNH TOÁN LỰA CHỌN THIẾT BỊ TRÊN BẢNG THỰC HÀNH

2.1.1 Mô hình

Hinh2.1. mô hình mạch

22

ĐỒ ÁN TỐT NGHIỆP
2.1.2 Các phần tử

Hình 2.2. Led ma trận

Hình 2.3. Ma trận phím bấm

23

ĐỒ ÁN TỐT NGHIỆP
Hình 2.4. Giao tiếp phím bấm

Hình 2.5. JUMP nạp

24

ĐỒ ÁN TỐT NGHIỆP
Hình 2,6, Thời gian thực

Hình 2.7. Nút nguồn

25

ĐỒ ÁN TỐT NGHIỆP
Hình 2.8. Còi báo

Hình 2.9. Cảm biến nhiệt độ

Hình 2.10 Led đơn

26

ĐỒ ÁN TỐT NGHIỆP
Hình 2.11. Led 7 thanh

Hình 2.12. Nút nhấn

Hình 2.13. Bộ tạc tần số

27

ĐỒ ÁN TỐT NGHIỆP
Hình 2.14. Chân đế vi điều khiển

Hình 2.15. Hiển thị LCD

28

ĐỒ ÁN TỐT NGHIỆP
Hình 2.16. Biến trở

Hình 2.17. Relay

Hình 2.18. Động cơ

29

ĐỒ ÁN TỐT NGHIỆP
2.2 Tính toán lựa chọn các phần tử

2.2.1 ARDUNO NANO


Arduino Nano là một bảng vi điều khiển thân thiện, nhỏ gọn, đầy đủ. Arduino Nano
nặng khoảng 7g với kích thước từ 1,8cm - 4,5cm. Bài viết này trình bày về các thông
số kỹ thuật quan trọng, nhất là sơ đồ chân và chức năng của mỗi chân trong bảng
Arduino Nano.

Arduino Nano có chức năng tương tự như Arduino Duemilanove nhưng khác nhau về
Arduino Nano Thông số kỹ thuật
Số chân analog I/O 8
Cấu trúc AVR
Tốc độ xung 16 MHz
Dòng tiêu thụ I/O 40mA
Số chân Digital I/O 22
Bộ nhớ EEPROM 1 KB
Bộ nhớ Flash 32 KB of which 2 KB used by Bootloader
Điện áp ngõ vào (7-12) Volts
Vi điều khiển ATmega328P
Điện áp hoạt động 5V
Kích thước bo mạch 18 x 45 mm
Nguồn tiêu thụ 19mA
Ngõ ra PWM 6
SRAM 2KB
Cân nặng 7 gms
dạng mạch. Nano được tích hợp vi điều khiển ATmega328P, giống như Arduino
UNO. Sự khác biệt chính giữa chúng là bảng UNO có dạng PDIP (Plastic Dual-In-line
30

ĐỒ ÁN TỐT NGHIỆP
Package) với 30 chân còn Nano có sẵn trong TQFP (plastic quad flat pack) với 32
chân. Trong khi UNO có 6 cổng ADC thì Nano có 8 cổng ADC. Bảng Nano không có
giắc nguồn DC như các bo mạch Arduino khác, mà thay vào đó có cổng mini-
USB. Cổng này được sử dụng cho cả việc lập trình và bộ giám sát nối tiếp. Tính năng
hấp dẫn của arduino Nano là nó sẽ chọn công xuất lớn nhất với hiệu điện thế của nó.
Đặc điểm kỹ thuật Arduino Nano
Sơ đồ chân
Theo sơ đồ bên dưới, chúng ta sẽ thảo luận về tất cả các chức năng của mỗi chân .

Hình 2.19. sơ đồ chân ARDUNO NANO

31

ĐỒ ÁN TỐT NGHIỆP
2.2.2 Led 7 thanh

Hình 2.20. Led 7 thanh

- cấu tạo

32

ĐỒ ÁN TỐT NGHIỆP
2.2.3 LED ma trận

Hình 2.21. Led ma trận

- cấu tạo:

33

ĐỒ ÁN TỐT NGHIỆP
2.2.4 LED đơn

Hình 2.22. Led đơn

- cấu tạo:

34

ĐỒ ÁN TỐT NGHIỆP
CHƯƠNG 3: SƠ ĐỒ MẠCH ĐIỆN VÀ NGUYÊN LÝ HOẠT ĐỘNG

3.1 Sơ đồ nguyên lý.

35

ĐỒ ÁN TỐT NGHIỆP
3.2 ARDUNO

➢ ARDUNO NANO

Arduino Nano có chức năng tương tự như Arduino Duemilanove nhưng khác nhau về
dạng mạch. Nano được tích hợp vi điều khiển ATmega328P, giống như Arduino
UNO. Sự khác biệt chính giữa chúng là bảng UNO có dạng PDIP (Plastic Dual-In-line
Package) với 30 chân còn Nano có sẵn trong TQFP (plastic quad flat pack) với 32
chân. Trong khi UNO có 6 cổng ADC thì Nano có 8 cổng ADC. Bảng Nano không có
giắc nguồn DC như các bo mạch Arduino khác, mà thay vào đó có cổng mini-
USB. Cổng này được sử dụng cho cả việc lập trình và bộ giám sát nối tiếp. Tính năng
hấp dẫn của arduino Nano là nó sẽ chọn công xuất lớn nhất với hiệu điện thế của nó.

36

ĐỒ ÁN TỐT NGHIỆP
chức năng của các chân
Thứ tự chân Tên Pin Kiểu Chức năng
Ngõ vào/ra số
1 D1 / TX I/O
Chân TX-truyền dữ liệu
Ngõ vào/ra số
2 D0 / RX I/O
Chân Rx-nhận dữ liệu
3 RESET Đầu vào Chân reset, hoạt động ở mức thấp
4 GND Nguồn Chân nối mass
5 D2 I/O Ngõ vào/ra digital
6 D3 I/O Ngõ vào/ra digital
7 D4 I/O Ngõ vào/ra digital
8 D5 I/O Ngõ vào/ra digital
9 D6 I/O Ngõ vào/ra digital
D7 Ngõ vào/ra digital
10 I/O

D8 Ngõ vào/ra digital


11 I/O

D9 Ngõ vào/ra digital


12 I/O

D10 Ngõ vào/ra digital


13 I/O

D11 Ngõ vào/ra digital


14 I/O

D12 Ngõ vào/ra digital


15 I/O

D13 Ngõ vào/ra digital


16 I/O

3V3 Đầu ra Đầu ra 3.3V (từ FTDI)


17

AREF Đầu vào Tham chiếu ADC


18

A0 Kênh đầu vào tương tự kênh 0


19 Đầu vào

Kênh đầu vào tương tự kênh 1


20 A1 Đầu vào

21 A2 Đầu vào Kênh đầu vào tương tự kênh 2


37

ĐỒ ÁN TỐT NGHIỆP
Kênh đầu vào tương tự kênh 3
22 A3 Đầu vào

23 A4 Đầu vào Kênh đầu vào tương tự kênh 4


24 A5 Đầu vào Kênh đầu vào tương tự kênh 5
25 A6 Đầu vào Kênh đầu vào tương tự kênh 6
26 A7 Đầu vào Kênh đầu vào tương tự kênh 7
Đầu ra hoặc đầu + Đầu ra 5V (từ bộ điều chỉnh On-board) hoặc
+ 5V
27 vào + 5V (đầu vào từ nguồn điện bên ngoài)

RESET Đầu vào Chân đặt lại, hoạt động ở mức thấp
28

GND Nguồn Chân nối mass


29

VIN Nguồn Chân nối với nguồn vào


30

3.3 Điều khiển LED


- Lập trình nhận biết phím nhấn đơn

Hình 3.1: Khối phím nhấn đơn

38

ĐỒ ÁN TỐT NGHIỆP
Chương trình: chương trình được lưu vào 2 file: “Main.c” và “Main.h”

“Main.h”

#include <16F886.h>
#device ADC=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18)
used for I/O
#use delay(crystal=4000000)

//khai bao ket noi cac nut nhan


#define NUT_NHAN_1 input(PIN_B0)
#define NUT_NHAN_2 input(PIN_B1)
#define NUT_NHAN_3 input(PIN_B2)
#define NUT_NHAN_4 input(PIN_B3)

//khai bao ket noi cac led don


#define LED_1 PIN_C0
#define LED_2 PIN_C1
#define LED_3 PIN_C2
#define LED_4 PIN_C3
“Main.c”

#include <main.h>
void main()
{
//khai bao bien cuc bo o day
39

ĐỒ ÁN TỐT NGHIỆP
//int1 TrangThai[]={0,0,0,0},
int1 DaQua;
int16 Time;

output_bit(LED_1,0);
output_bit(LED_2,0);
output_bit(LED_3,0);
output_bit(LED_4,0);
while(TRUE)
{
//TODO: User Code
if(NUT_NHAN_1==0)//khi phim duoc nhan
{
while(NUT_NHAN_1==0);//chong doi phim nhan
output_bit(LED_1,1);
output_bit(LED_2,0);
output_bit(LED_3,0);
output_bit(LED_4,0);
}
else if(NUT_NHAN_2==0)//khi phim duoc nhan
{
while(NUT_NHAN_1==0);//chong doi phim nhan
output_bit(LED_1,0);
output_bit(LED_2,1);
output_bit(LED_3,0);
output_bit(LED_4,0);
}

40

ĐỒ ÁN TỐT NGHIỆP
else if(NUT_NHAN_3==0)//khi phim duoc nhan
{
while(NUT_NHAN_1==0);//chong doi phim nhan
output_bit(LED_1,0);
output_bit(LED_2,0);
output_bit(LED_3,1);
output_bit(LED_4,0);
}
else if(NUT_NHAN_4==0)
{
Time=0;
DaQua=0;
while(NUT_NHAN_4==0)
{
delay_ms(10);
Time=Time+1;
if(Time>=300)
{
output_bit(LED_1,1);
output_bit(LED_2,1);
output_bit(LED_3,1);
output_bit(LED_4,1);
DaQua=1;
}
}

if(DaQua==0)//khi nguoi dung nhan nut nhan va tha ra nun

41

ĐỒ ÁN TỐT NGHIỆP
{
output_bit(LED_1,0);
output_bit(LED_2,0);
output_bit(LED_3,0);
output_bit(LED_4,1);
}
}
}
}

42

ĐỒ ÁN TỐT NGHIỆP
- Lập trình hiển thị LED 7 thanh
Bài toán: Đếm lùi từ số 1235, giá trị được hiển thị trên LED 7 thanh.

Kết nối: Bài sử dụng khối “Hiển thị LED 7 thanh” Theo như sơ đồ thì các chân RA0-
RA3 sẽ điều khiển Anot chung của mỗi LED, còn lại các chân RC sẽ điều khiển các
thanh của LED. Gạt SD4 lên vị trí ON để kích hoạt khối hiển thị LED 7 thanh.

Hình 2: Khối hiển thị LED 7 thanh

Chương trình: chương trình được lưu vào 2 file: main.c và main.h

“Main.h”

#include <16F886.h>
#device ADC=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18)
used for I/O
#use delay(crystal=4000000)

43

ĐỒ ÁN TỐT NGHIỆP
//khai bao cac chan quet cot
#define COL_1 PIN_A0
#define COL_2 PIN_A1
#define COL_3 PIN_A2
#define COL_4 PIN_A3
“Main.c”

#include <main.h>

void _QuetCot(char TenCot);


void _QuetLed(char Data[]);
void _HienThi(char Data[], int16 Time);
void _TachSo(int16 Dem, char Data[])
{
Data[3] = Dem%10;
Dem = Dem/10;

Data[2] = Dem%10;
Dem = Dem/10;

Data[1] = Dem%10;
Dem = Dem/10;

Data[0] = Dem%10;
Dem = Dem/10;
}

44

ĐỒ ÁN TỐT NGHIỆP
void main()
{
//khai bao bien cuc bo o day
char Data[] = {1,2,3,4};
int16 Dem=1235;

while(TRUE)
{
//TODO: User Code
for(Dem=1235;Dem>0;Dem--)
{
_TachSo(Dem,Data);
_HienThi(Data,20);
}
}
}

void _QuetCot(char TenCot)


{
switch(TenCot)
{
case 0:
{
output_bit(COL_1,1);
output_bit(COL_2,1);
output_bit(COL_3,1);
output_bit(COL_4,1);

45

ĐỒ ÁN TỐT NGHIỆP
break;
}
case 1:
{
output_bit(COL_1,0);
output_bit(COL_2,1);
output_bit(COL_3,1);
output_bit(COL_4,1);
break;
}
case 2:
{
output_bit(COL_1,1);
output_bit(COL_2,0);
output_bit(COL_3,1);
output_bit(COL_4,1);
break;
}
case 3:
{
output_bit(COL_1,1);
output_bit(COL_2,1);
output_bit(COL_3,0);
output_bit(COL_4,1);
break;
}
case 4:

46

ĐỒ ÁN TỐT NGHIỆP
{
output_bit(COL_1,1);
output_bit(COL_2,1);
output_bit(COL_3,1);
output_bit(COL_4,0);
break;
}
}
}

void _QuetLed(char Data[])


{
char MaLed[] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,0xF8,0x80,0x90};
int8 i;

for(i=0;i<4;i++)
{
output_c(MaLed[Data[i]]);
_QuetCot(i+1);
delay_ms(2);
_QuetCot(0);
}
}

void _HienThi(char Data[], int16 Time)


{

47

ĐỒ ÁN TỐT NGHIỆP
while(Time>1)
{
Time = Time - 1;
delay_ms(10);
_QuetLed(Data);
}
}

48

ĐỒ ÁN TỐT NGHIỆP
-Lập trình hiển thị LED ma trận

Bài toán: Lập trình cho chạy 1 dòng chữ từ phải qua trái trên LED ma trận 8x8.

Điều kiện: Bài sử dụng khối LED ma trận như sơ đồ.

Hình 3.3: Khối hiển thị LED ma trận

Chương trình:

“Main.h”

#include <16F886.h>
#device ADC=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18)
used for I/O
#use delay(crystal=4000000)
“Main.c”

#include <main.h>
49

ĐỒ ÁN TỐT NGHIỆP
#include <string.h>
#define SCK PIN_A2
#define DATA PIN_A0
#define STR PIN_A1
unsigned int8 cot[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
const unsigned int8 hang[]={

// 1 2 3 4 5 6 7 8
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //SPACE -32
0x00,0x00,0x00,0xF9,0x00,0x00,0x00,0x00, //! 33
0x00,0x00,0xE0,0x00,0xE0,0x00,0x00,0x00, //" 34
0x00,0x24,0xFF,0x24,0x24,0xFF,0x24,0x00, //# 35
0x00,0x32,0x4A,0xFF,0x4A,0x44,0x00,0x00, //$ 36
0x01,0xC2,0xC4,0x08,0x10,0x23,0x43,0x80, //% 37
0x00,0x66,0x99,0x89,0x95,0x62,0x05,0x00, //& 38
0x00,0x00,0x88,0x90,0xE0,0x00,0x00,0x00, //' 39
0x00,0x3C,0x42,0x81,0x00,0x00,0x00,0x00, //( 40
0x00,0x00,0x00,0x00,0x81,0x42,0x3C,0x00, //) 41
0x00,0x24,0x18,0x7E,0x18,0x24,0x00,0x00, //* 42
0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00, //+ 43
0x00,0x00,0x00,0x05,0x06,0x00,0x00,0x00, //, 44
0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00, //- 45
0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00, //. 46
0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x00, /// 47
0x00,0x7E,0x85,0x89,0x91,0xA1,0x7E,0x00, //0 48
0x00,0x00,0x21,0x41,0xFF,0x01,0x01,0x00, //1 49
0x00,0x41,0x83,0x85,0x89,0x71,0x00,0x00, //2 50

50

ĐỒ ÁN TỐT NGHIỆP
0x00,0x42,0x89,0x89,0x89,0x76,0x00,0x00, //3 51
0x00,0x18,0x28,0x48,0x88,0x3F,0x08,0x00, //4 52
0x00,0xF9,0x89,0x89,0x89,0x89,0x86,0x00, //5 53
0x00,0x7E,0x89,0x89,0x89,0x89,0x06,0x00, //6 54
0x00,0x80,0x83,0x84,0x88,0x90,0xE0,0x00, //7 55
0x00,0x7E,0x91,0x91,0x91,0x91,0x7E,0x00, //8 56
0x00,0x72,0x91,0x91,0x91,0x91,0x7E,0x00, //9 57
0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00, //: 58
0x00,0x00,0x00,0x65,0x66,0x00,0x00,0x00, //; 59
0x00,0x18,0x24,0x42,0x81,0x00,0x00,0x00, //< 60
0x00,0x24,0x24,0x24,0x24,0x24,0x24,0x00, //= 61
0x00,0x00,0x00,0x81,0x42,0x24,0x18,0x00, //> 62
0x00,0x40,0x80,0x85,0x88,0x70,0x00,0x00, //? 63
0x20,0x5C,0xA2,0xA2,0x9C,0x42,0x3C,0x00, //@ 64
0x00,0x1F,0x30,0x50,0x50,0x30,0x1F,0x00, //A 65
0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00, //B 66
0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00, //C 67
0x00,0x7F,0x41,0x41,0x41,0x3E,0x00,0x00, //D 68
0x00,0x7F,0x49,0x49,0x49,0x49,0x00,0x00, //E 69
0x00,0x7F,0x48,0x48,0x48,0x48,0x00,0x00, //F 70
0x00,0x3E,0x41,0x49,0x49,0x2E,0x00,0x00, //G 71
0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00, //H 72
0x00,0x41,0x41,0x7F,0x41,0x41,0x00,0x00, //I 73
0x00,0x41,0x41,0x7E,0x40,0x40,0x00,0x00, //J 74
0x00,0x7F,0x08,0x1C,0x22,0x41,0x00,0x00, //K 75
0x00,0x7F,0x01,0x01,0x01,0x01,0x00,0x00, //L 76
0x00,0x7F,0x20,0x10,0x10,0x20,0x7F,0x00, //M 77

51

ĐỒ ÁN TỐT NGHIỆP
0x00,0x7F,0x20,0x10,0x08,0x04,0x7F,0x00, //N 78
0x00,0x3E,0x61,0x51,0x49,0x45,0x3E,0x00, //O 79
0x00,0x7F,0x48,0x48,0x48,0x48,0x30,0x00, //P 80
0x00,0x3E,0x41,0x41,0x41,0x45,0x3E,0x01, //Q 81
0x00,0x7F,0x48,0x48,0x4C,0x3A,0x01,0x00, //R 82
0x00,0x3A,0x49,0x49,0x49,0x49,0x26,0x00, //S 83
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00, //T 84
0x00,0x7E,0x01,0x01,0x01,0x01,0x7E,0x00, //U 85
0x00,0x7C,0x02,0x01,0x01,0x02,0x7C,0x00, //V 86
0x00,0x7F,0x02,0x04,0x04,0x02,0x7F,0x00, //W 87
0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00, //X 88
0x00,0x60,0x10,0x0F,0x10,0x60,0x00,0x00, //Y 89
0x00,0x43,0x45,0x49,0x51,0x61,0x41,0x00, //Z 90
0x00,0x00,0xFF,0x81,0x81,0x00,0x00,0x00, //[ 91
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, //\ 92
0x00,0x00,0x00,0x81,0x81,0xFF,0x00,0x00, //] 93
0x00,0x20,0x40,0x80,0x40,0x20,0x00,0x00, //^ 94
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00, //_ 95
0x00,0x00,0x80,0x40,0x20,0x00,0x00,0x00, //` 96
0x00,0x0E,0x91,0x91,0x91,0x91,0x7F,0x00, //a 97
0x00,0xFF,0x09,0x11,0x11,0x11,0x0E,0x00, //b 98
0x00,0x3E,0x41,0x41,0x41,0x41,0x02,0x00, //c 99
0x00,0x0E,0x11,0x11,0x11,0x09,0xFF,0x00, //d 100
0x00,0x3E,0x49,0x49,0x49,0x49,0x30,0x00, //e 101
0x00,0x10,0x7F,0x90,0x80,0x40,0x00,0x00, //f 102
0x00,0x70,0x89,0x89,0x89,0x89,0xFE,0x00, //g 103
0x00,0xFF,0x08,0x10,0x10,0x10,0x0F,0x00, //h 104

52

ĐỒ ÁN TỐT NGHIỆP
0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00, //i 105
0x00,0x00,0x21,0x21,0xBE,0x00,0x00,0x00, //j 106
0x00,0xFF,0x08,0x14,0x22,0x41,0x00,0x00, //k 107
0x00,0x00,0x81,0xFF,0x01,0x00,0x00,0x00, //l 108
0x3F,0x40,0x40,0x30,0x40,0x40,0x3F,0x00, //m 109
0x00,0x7F,0x20,0x40,0x40,0x40,0x3F,0x00, //n 110
0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,0x00, //o 111
0x00,0x00,0x7F,0x48,0x48,0x48,0x30,0x00, //p 112
0x00,0x30,0x48,0x48,0x48,0x28,0x7F,0x00, //q 113
0x00,0x7F,0x20,0x40,0x40,0x40,0x20,0x00, //r 114
0x00,0x31,0x49,0x49,0x49,0x46,0x00,0x00, //s 115
0x00,0x40,0x40,0xFE,0x41,0x41,0x02,0x00, //t 116
0x00,0x7E,0x01,0x01,0x01,0x02,0x7F,0x00, //u 117
0x00,0x7C,0x02,0x01,0x02,0x7C,0x00,0x00, //v 118
0x00,0x7E,0x01,0x02,0x01,0x7E,0x00,0x00, //w 119
0x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00, //x 120
0x00,0x00,0x60,0x12,0x12,0x12,0x7C,0x00, //y 121
0x00,0x42,0x46,0x4A,0x52,0x62,0x42,0x00, //z 122
0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00, //{ 123
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, //| 124
0x00,0x00,0x00,0x00,0x82,0x6C,0x10,0x00, //} 125
};
void nap_data(unsigned int8 x)
{
unsigned char i, temp;

for(i=0;i<8;i++)

53

ĐỒ ÁN TỐT NGHIỆP
{
temp = x & 0x80;//tach bit cao nhat
x = x<<1;
if(temp!=0)
output_bit(DATA,1);
else
output_bit(DATA,0);
output_bit(SCK,0);//tao xung dich du lieu
// delay_us(1);
output_bit(SCK,1);
}
output_bit(STR,0);//tao xung chot du lieu
// delay_us(1);
output_bit(STR,1);
}/*
/*
void MT_test()
{
int16 x,y,z;
for(x=0;x<=128;x++)
for(y=0;y<50;y++)
for(z=0;z<8;z++)
{
output_c(~cot[z]);
nap_data(hang[z+x]);
delay_ms(1);
output_d(0xFF);

54

ĐỒ ÁN TỐT NGHIỆP
nap_data(0x00);
}
}*/
void mt_display(unsigned int8 *chuoi)
{
int16 x,y,z,k,i;
int16 len = strlen(chuoi)*8;
for(x=0;x<len;x++)
for(y=0;y<5;y++)
for(z=0;z<8;z++)
{
output_c(~cot[z]);
k = chuoi[(x+z)/8]-32;
nap_data(hang[k*8+((x+z)%8)]);
delay_ms(2);
output_c(0xFF);
nap_data(0x00);
}
}
void main()
{
unsigned int8 st[] = "BAC SON EQUIPMENT";
while(TRUE)
{
mt_display(st);
}}

55

ĐỒ ÁN TỐT NGHIỆP
CHƯƠNG 4: KẾT LUẬN
Về chế tạo bộ thực hành.
Đã chế tạo được bộ thực hành vi xử lý, qua quá trình kiểm nghiệm bộ thực hành hoạt
động ổn định, thực hiện các bài tập thực hành về giao tiếp đèn led đơn, giao tiếp đèn led
7 thanh, giao tiếp bàn phím nhấn, , giao tiếp động cơ một chiều, giao tiếp động cơ bước,
giao tiếp màn hình LCD, giao tiếp IC thời gian thực, giao tiếp bảng chữ chạy điện tử,
giao tiếp modul phân loại phôi trong dây chuyền sản xuất linh hoạt. Tuy nhiên bộ thực
hành chưa đề cấp đến một số các giao tiếp ngoại vi khác, như giao tiếp USB, giao tiếp
thẻ nhớ ….
- Qua kết quả và bàn luận nói trên cho phép chúng có em thể đưa ra một số kết
luận sau:
Sau một thời gian cả nhóm tìm tài liệu và góp ý của Cô Nguyễn Thị Thắm hướng dẫn
nhóm em đã hoàn thành đồ án. Với đề tài” Xây dựng bộ thực hành vi điều khiển điều
khiển các đèn Led” đã giúp chúng e hiểu rõ hơn về đề tài và lý thuyết cũng như có
hình dung khách quan về sản phẩm mô hình chúng em chân thành cảm ơn sự hướng
dẫn và góp ý nhiệt tình từ Cô NGUYỄN THỊ THẮM đã giúp chúng em hoàn thành đồ
án này. Tuy nhiên trong đồ án nhóm chúng em còn nhiều thiếu sót chúng em mong
được sự góp ý xây dựng chỉnh chu hơn của quý thầy cô và các bạn quan tâm. Cuối
cùng Em xin gửi lời chân thành cảm ơ các thầy cô trong bộ môn ĐIỆN- CƠ KHÍ của
trường Cao Đẳng FPT Polytechnic Hà Nội dạy dỗ, chỉ bảo, cung cấp những kiến thức
nền chuyên môn làm cơ sở và cũng như tạo điều kiện tốt nhất cho chúng em. Cảm ơn
đến tất cả các bạn sinh viên Khoa Điện – Điện Tử đã chia sẻ kiến thức cũng như trao
dồi kiến thức như những kinh nghiệm quý báu trong thời giạn thực hiện đề tài.

56

ĐỒ ÁN TỐT NGHIỆP
Tài liệu tham khảo:
- Đề cương bài giảng- bộ môn Điện- Cơ khí
- Trần văn Trọng: Giáo trình vi điều khiển, Trường Đại Học SPKT TP.HCM
- Văn thế Minh : Kỹ thuật vi xử lý , NXB Giáo dục, Hà Nội, 2003.

ARDUNAO:
http://arduino.vn/bai-viet/273-arduino-nano-nho-tien-loi-mang-tren-minh-tinh-hoa-
cua-arduino-uno
https://truonggiathien.com.vn/chi-tiet/led-ma-tran-la-gi/

57

ĐỒ ÁN TỐT NGHIỆP

You might also like