I. GIỚI THIỆU
Ngày nay khi nhu cầu về thông tin quảng cáo rất lớn , việc áp dụng các phương tiện kĩ thuật mới vào các lĩnh vực trên là rất cần thiết .Khi bạn đến các nơi công cộng, bạn dễ dàng bắt gặp những áp phích quảng cáo điện tử chạy theo các hướng khác nhau với nhiều hình ảnh và màu sắc rất ấn tượng. Khi đề tài được mở rộng thì sẽ có khả năng ứng dụng thực tiễn rất lớn. Nói tóm lại, trong thời đại bùng nổ thông tin hiện nay, khả năng ứng dụng và tiềm lực phát triển của hệ thống này là rất lớn, đặc biệt ở Việt Nam, các hệ thống như vậy còn rất ít, hầu hết đều được nhập từ nước ngoài với giá thành khá cao.
Bài toán:
Bài toán xây dựng điều khiển ma trận LED hiển thị các số toán học. Bài toán chia làm 2 phần.
- Phần cứng : Gồm đèn led, bảng mạch các Ic cổng đầu vào tín hiệu LPT và cổng nguồn USB được kết hợp lại với nhau thành bảng mạch để nhận tín hiệu từ máy tính nhờ kiến thức kỹ thuật điện tử số
- Phần mềm : Dùng ngôn ngữ C++ để điều khiển đèn led bằng việc xuất bit tín hiệu qua cổng LPT .
Tài liệu được này sẽ hướng dẫn chi tiết về cách hoạt động của các linh kiện và cách điều khiển chúng.
I. Giới thiệu.
II. CỔNG LPT VÀ ĐIỀU KHIỂN CỔNG
III. IC 74HC595
IV. TRANSISTOR C1815
V. ĐIỆN TRỞ
VI. MA TRẬN LED 5x7
VII. MẠCH LED HOÀN CHỈNH.
VIII. HÌNH ẢNH DEMO
Trong quá trình thực hiện đề tài chúng em đã nhận được sự chỉ bảo, hướng dẫn của thầy giáo Lê Hữu Dũng. Chúng em xin chân thành cảm ơn thầy và mong nhận được lời góp ý để đề tài ngày càng hoàn thiện hơn.
II. CỔNG LPT VÀ ĐIỀU KHIỂN CỔNG
1. Cấu trúc cổng LPT.
Cấu trúc của Parallel port nhìn trên phương diện phần cứng (Hardware).


Parallel port bao gồm 25 pins (chân) được bố trí theo sơ đồ dưới đây, đa số giao diện đầu cắm của Parallel port đều ở dạng female(cái).
8 pins dùng để gởi và nhận data (từ pin số 2 đến số 9) gọi là DATA Port (dân software cũng gọi như thế). Dữ liệu trao đổi qua 8 pin này được gói gọn trong 1 byte.
5 pins dùng để hiển thị tình trạng hoạt động của parallel port: đang bận, đang gởi/nhận thông tin...(các pin số 10-13 và pin số 15) gọi là STATUS Port. Dữ liệu trao đổi qua 8 pin này dùng 5 bit cao của byte.
4 pins dùng để điều khiển gọi là CONTROL Port, là các pin số 1, 14, 16 và 17. Dữ trao đổi qua pnin này dùng 4 bit thấp của byte.
8 pins còn lại được dùng tùy theo ý người sử dụng. Nếu không được sử dụng thì chúng sẽ được grounded (nối đất-thuật ngữ ngành điện?).
Ðây là cấu hình được thống nhất trong công nghệ vi tính và được công nhận bởi IEEE (vốn là một tổ chức lớn nhất về qui định hardware quốc tế). Bạn có thể kiểm tra lại các số pin và đánh dấu bằng cách nhìn rõ hơn vào các dây parallel port cũng như parallel port phía sau máy vi tính của bạn.
Cấu trúc của parallel port nhìn trên phương diện phần mềm (software).
Thực ra thì với lập trình viên, họ cũng không cần biết phía parallel port sau lưng máy tính có bao nhiên pin và mỗi pin cần bao nhiêu điện, cấu trúc như thế nào...Mấy cái nầy hơi thừa cho lập trình viên. Tất cả những gì mà một người lập trình cần biết là address của các pin trên parallel port là đủ. 25 pins kia sẽ được chia làm 3 phần với tên gọi là DATA port (hay là DATA register), STATUS port (hay là STATUS register), và CONTROL port (hay là CONTROL register). Mỗi port là 8 bits với address rõ ràng. Như mô tả từ đầu, DATA port sẽ là 8 bits, STATUS port có 5 pins cho nên sẽ cộng thêm 3 bit trống để tạo một byte, tương tự như thế cho CONTROL port. Riêng phần địa chỉ cho các port nầy cũng khá là phức tạp, vì nó liên quan đến BIOS. Nếu bạn đã hiểu cách phân bố memory của máy tính thì đơn giản hơn, còn không thì hy vọng là lối giải thích của tôi sẽ làm bạn hiểu phần nào. Ðại khái là khi máy tính bật lên (turn on) thì BIOS sẽ làm việc trước, nó sẽ tìm kiếm và định địa chỉ cho cái port trong máy của bạn. Vì BIOS không cái nào giống cái nào cho nên lối qui định địa chỉ của nó cũng khác, tuy nhiên dưới đây là một ví dụ điển hình (bạn thường thấy) trong các máy tính ngày nay. Những địa chỉ này bạn có thể thấy khi khởi động máy trong các thông số BIOS hiện ra.
Port Address 3BCh - 3BFh dùng cho prallel port vốn dính vào Video Card (cách cũ) 378h - 37Fh khu vực memory thường dùng cho LPT 1 278h - 27Fh khu vực memory thường dùng cho LPT 2 ....(nên nhớ là mỗi khoản là 8 bits, tính theo hệ hexadecimal)
Một điều tôi muốn nhắc các bạn là những thông tin đưa ra trên đây thường là thay đổi tùy theo từng máy tính, một máy có thể có nhiều LPT, thông thường thì BIOS sẽ dò xem trong máy có bao nhiêu port và sẽ qui định địa chỉ cho từng port. Theo tôi thường thấy thì nếu máy bạn có hai cái parallel port (nếu bạn mua motherboard có hai parallel port) thì LPT1 sẽ được gán vào điạ chỉ 378h-37Fh (8 bits). Nếu có LPT2 thì sẽ được gán vào địa chỉ 278h-27Fh. Riêng phần 3BCh-3BFh trong quá khứ thường được dùng khi parallel port cài sẵn trong video card.
Ứng dụng của việc điều khiển parallel port
Việc hiểu hoạt động và biết điều khiển parallel port là tối cần thiết cho các bạn đi chuyện sâu trong các kỹ nghệ hardware. Hầu hết các dụng cụ tân tiến thời nay điều liên quan đến việc dùng software để vận hành hardware, ví dụ như bạn có thể gỡi một lệnh từ máy vi tính làm cho tên lửa phóng đi, shutdown computer...điều thuộc dạng software điều khiển hardware. Và với trách nhiệm một trình điều khiển nó, bạn phải thấu hiểu tất cả. Một ví dụ đơn giản khác trong điều khiển học như điều khiển robot, nếu bạn dùng software từ máy vi tính kích hoạt một pin nào đó của cổng parallel và gỡi tới robot như mệnh lệnh, chẳng hạn đi tới phía trước, quay qua bên trái....
Cấu trúc một chương trình C++ gửi dữ liệu ra cổng LPT.
Cần copy file inpout32.dll vào C:\Windows\System32\ biên dịch Code trên phần mềm Dev C++ (Trong file đính kèm).
// Thư viện hỗ trợ vào ra và xử lý dữ liệu.
#include <stdio.h>
#include <conio.h>
#include <windows.h>
// Định nghĩa kiểu dữ liệu.
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
int main()
{
// Thêm thư viện liên kết động inpout32.dll hỗ trợ vào ra các cổng trên Windows 2000 về sau.
HINSTANCE hLib;
inpfuncPtr in;
oupfuncPtr out;
hLib = LoadLibrary("inpout32.dll");
// Quy định cú pháp vào ra ra dữ liệu.
in = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
out = (oupfuncPtr) GetProcAddress(hLib, "Out32");
out(0x378,0x01); // Gửi ra pins 1 của DATA port cổng LPT 1.
return 0;
}
III. IC 74HC595.
1. Sơ lược về IC ghi dịch 74HC595:
Là ic ghi dịch 8bit kết hợp chốt dữ liệu , đầu vào nối tiếp đầu ra song song .
Chức năng: Thường dùng trong các mạch quét led 7 , led matrix …để tiết kiệm số chân VDK tối đa (3 chân) . Có thể mở rộng số chân vi điều khiển bao nhiêu tùy thích mà k ic nào có thể làm dc bằng việc mắc nối tiếp đầu vào dữ liệu các ic với nhau. Cách mở rộng ta chỉ việc nối Q7' của IC trước với chân DATA (chân 14) của IC sau, với IC đầu tiên nhận dữ liệu từ VĐK.
2. Sơ đồ chân IC
Giải thích ý nghĩa hoạt động của một số chân quan trọng:
Chân 14 : Đầu vào dữ liệu nối tiếp . Tại 1 thời điểm xung clock chỉ đưa vào được 1 bit
Chân 15,1,2,3,4,5,6,7 (Q0=>Q7) : là các chân đưa dữ kiệu ra ngoài. Xuất dữ liệu khi chân chân 13 tích cực ở mức thấp và có một xung tích cực ở sườn âm tại chân chốt 12
Chân 13 : Chân cho phép tích cực ở mức thấp (0) .Khi ở mức cao, tất cả các đầu ra của 74595 trở về trạng thái cao trở, không có đầu ra nào được cho phép.
Chân 9: Chân dữ liệu nối tiếp . Nếu dùng nhiều 74595 mắc nối tiếp nhau thì chân này đưa vào đầu vào của con tiếp theo khi đã dịch đủ 8bit.
Chân 11: Chân vào xung clock . Khi có 1 xung clock tích cực ở sườn dương(từ 0 lên 1) thì 1bit được dịch vào ic.
Chân 12 : Xung clock chốt dữ liệu . Khi có 1 xung clock tích cực ở sườn dương thì cho phép xuất dữ liệu trên các chân output . lưu ý có thể xuất dữ liệu bất kỳ lúc nào bạn muốn ,ví dụ đầu vào chân 14 dc 2 bit khi có xung clock ở chân 12 thì dữ liệu sẽ ra ở chân Q0và Q1 (chú ý chiều dịch dữ liệu từ Q0=>Q7)
Chân 10: khi chân này ở mức thấp(mức 0) thì dữ liệu sẽ bị xóa trên chip.
3. Nguyên lý hoạt động.

Cách gửi dữ liệu vào IC có thể diễn tả đơn giản như sau: cho data bit cuối cùng vào chân 14, cho chân 11 lên 1 xuống 0 để ghi bit vào thanh ghi 8 bit, lại cho data của bit tiếp theo vào, lại cho lên 11 lên 1 rồi xuống 0, truyền đủ 8 bit thì cho chân 12 lên 1 xuống 0 để đưa dữ liệu ra ngoài. Nếu chân 13 trong trạng thái tích cực bằng 1 thì không có bit nào được đưa ra ngoài. Muốn xóa dữ liệu trên thanh ghi 8 bít đi chỉ việc đưa chân 10 về mức 0.
4. Code C++ diều khiển IC.
Với cổng LPT sử dụng 3 pins 2,3,4 để gửi dữ liệu.
Với IC sử dụng 3 pins 11,12,14 để nhận và xử lý.

Code C++ như sau:
int a[8]={1,1,1,0,0,1,0,1} Khai báo 1 mảng 8 bit cần gửi.(từ bit 0 đến bit 7)
for(int i=7;i>=0;i--)
{
if(a[i]==10
{
out(0x378,0x01); Cho chân số 2 nhận bit 1 (gửi dữ liệu).
out(0x378,x003); Cho chân số 2 và 3 nhận bít 1 (nhận và chốt dữ liệu)
out(0x378,0x00); Cho chân 2,3, nhận bít 0. (chuyển dữ liệu vào ô địa chỉ tiếp theo.)
}
else
{
out(0x378,0x01); Cho chân số 2 nhận bit 0 (gửi dữ liệu).
out(0x378,x002); Cho chân số 2 nhận bit 0 và 3 nhận bít 1 (nhận và chốt dữ liệu)
out(0x378,0x00); Cho chân 2,3, nhận bít 0. (chuyển dữ liệu vào ô địa chỉ tiếp theo)
}
}
Truyền xong 8bit đẩy dữ liệu ra ngoài bằng chân 12.
out(0x378,0x04); Cho chân 12 nhận bit 1
out(0x378.0x00); Cho chân 12 nhận bit 0
IV. TRANSISTOR C1815
1. Cấu tạo của Transistor. ( Bóng bán dẫn )
Transistor gồm ba lớp bán dẫn ghép với nhau hình thành hai mối tiếp giáp P-N , nếu ghép theo thứ tự PNP ta được Transistor thuận , nếu ghép theo thứ tự NPN ta được Transistor ngược. về phương diện cấu tạo. Transistor tương đương với hai Diode đấu ngược chiều nhau. Trong đó Transistor C1815 là Transistor ngược.
Ba lớp bán dẫn được nối ra thành ba cực , lớp giữa gọi là cực gốc ký hiệu là B ( Base ), lớp bán dẫn B rất mỏng và có nồng độ tạp chất thấp. Hai lớp bán dẫn bên ngoài được nối ra thành cực phát (Emitter ) viết tắt là E, và cực thu hay cực góp ( Collector ) viết tắt là C, vùng bán dẫn E và C có cùng loại bán dẫn (loại N hay P ) nhưng có kích thước và nồng độ tạp chất khác nhau nên không hoán vị cho nhau được.
2. Nguyên tắc hoạt động của C1815.
Ta cấp một nguồn một chiều UCE vào hai cực C và E trong đó nguồn +5V vào cực C và -5V nguồn vào cực E. Khi công tắc mở , ta thấy rằng, mặc dù hai cực C và E đã được cấp điện nhưng vẫn không có dòng điện chạy qua mối C E. Khi công tắc đóng, mối P-N được phân cực thuận do đó có một dòng điện chạy từ nguồn +5V qua công tắc => qua R hạn dòng => qua mối BE về cực -5V tạo thành dòng khép kín. Ngay khi dòng xuất hiện => lập tức cũng có dòng từ C chạy qua mối E làm bóng đèn phát sáng.
Giải thích : Khi có điện áp U CE nhưng các điện tử và lỗ trống không thể vượt qua mối tiếp giáp P-N để tạo thành dòng điện, khi xuất hiện dòng IBE do lớp bán dẫn P tại cực B rất mỏng và nồng độ pha tạp thấp, vì vậy số điện tử tự do từ lớp bán dẫn N ( cực E ) vượt qua tiếp giáp sang lớp bán dẫn P( cực B ) lớn hơn số lượng lỗ trống rất nhiều, một phần nhỏ trong số các điện tử đó thế vào lỗ trống tạo thành dòng IB còn phần lớn số điện tử bị hút về phía cực C dưới tác dụng của điện áp UCE => tạo thành dòng ICE chạy qua Transistor.
V. ĐIỆN TRỞ
1. Khái niệm về điện trở.
Điện trở là gì ? Ta hiểu một cách đơn giản - Điện trở là sự cản trở dòng điện của một vật dẫn điện, nếu một vật dẫn điện tốt thì điện trở nhỏ, vật dẫn điện kém thì điện trở lớn, vật cách điện thì điện trở là vô cùng lớn.
Điện trở của dây dẫn : Điện trở của dây dẫn phụ thộc vào chất liệu, độ dài và tiết diện của dây. được tính theo công thức sau:
R = ρ.L / S
Trong đó:
ρ là điện trở xuất phụ thuộc vào chất liệu
L là chiều dài dây dẫn
S là tiết diện dây dẫn
R là điện trở đơn vị là Ohm
2. Điện trở trong thiết bị điện tử.
a) Hình dáng và ký hiệu :
Trong thiết bị điện tử điện trở là một linh kiện quan trọng, chúng được làm từ hợp chất cacbon và kim loại tuỳ theo tỷ lệ pha trộn mà người ta tạo ra được các loại điện trở có trị số khác nhau.

b) Đơn vị của điện trở
Đơn vị điện trở là Ω (Ohm) , KΩ , MΩ
1KΩ = 1000 Ω
1MΩ = 1000 K Ω = 1000.000 Ω
Công thức tính trong mạch:
R=U / I
U: hiệu điện thế.
R: Điện trở (Ω).
I: Cường độ điện trở.
VI. MA TRẬN LED 5x7
Dựa trên nguyên tắc như quét màn hình, ta có thể thực hiện việc hiển thị ma trận đèn bằng cách quét theo hàng và quét theo cột. Mỗi Led trên ma trận LED có thể coi như một điểm ảnh. Địa chỉ của mỗi điểm ảnh này được xác định đồng thời bởi mạch giải mã hàng và giải mã cột, điểm ảnh này sẽ được xác định trạng thái nhờ dữ liệu đưa ra từ IC 74HC595
Như vậy tại mỗi thời điểm chỉ có trạng thái của một điểm ảnh được xác định. Tuy nhiên khi xác định địa chỉ và trạng thái của điểm ảnh tiếp theo thì các điểm ảnh còn lại sẽ chuyển về trạng thái tắt (nếu LED đang sáng thì sẽ tắt dần). Vì thế để hiển thị được toàn bộ hình ảnh của ma trận đèn, ta có thể quét ma trận nhiều lần với tốc độ quét rất lớn, lớn hơn nhiều lần thời gian kịp tắt của đèn. Mắt người chỉ nhận biết được tối đa 24 hình/s do đó nếu tốc độ quét rất lớn thì sẽ không nhận ra được sự thay đổi nhỏ của đèn mà sẽ thấy được toàn bộ hình ảnh cần hiển thị.
Các LED trên cùng một hàng sẽ được nối các chân dương với nhau.
Các LED trên cùng một cột sẽ được nối các chân âm với nhau như hình vẽ.
Ta có thể mô phỏng một ma trận Led đơn giản 4x4 như sau:

Sơ đồ thiết kế ma trận LED
Trạng thái của một LED sẽ được quyết định bởi tín hiệu điện áp đi vào đồng thời cả 2 chân. Ví dụ để LED sáng thì điện áp 5V phải đưa vào chân dương và chân âm phải được nối đất, LED sẽ tắt khi không có điện áp đưa vào chân dương.
Với đề tài này, chúng em chọn loại ma trận LED 5x7 để hiển thị.
Ta có sơ đồ nguyên lý của Ma trận LED 5x7:
Để ma trận có thể sáng như hình vẽ
Thực hiện quét dòng và cột:
- Chọn cột 1, đưa điện áp cột 1 về 0.
- Sau đó chọn và quét lần lượt các hàng 0,1,2,3,4,5,6như sau:
+ Đèn 1 tắt à Điện áp đưa vào hàng 0 là 0V.
+ Đèn 2 tắt à Điện áp đưa vào hàng 1 là 0V.
+ Đèn 3 sáng à Điện áp đưa vào hàng 2 là 5V.
+ Đèn 4 sáng à Điện áp đưa vào hàng 3 là 5V.
+ Đèn 5 sáng à Điện áp đưa vào hàng 4 là 5V.
+ Đèn 6 sáng à Điện áp đưa vào hàng 5 là 5V.
+ Đèn 7 sáng à Điện áp đưa vào hàng 6 là 5V.
Chọn cột 2, nối đất. Sau đó quét lần lượt các hàng 0,1,2,3,4,5,6.
+ Đèn 1 tắt à Điện áp đưa vào hàng 0 là 0V.
+ Đèn 2 sáng à Điện áp đưa vào hàng 1 là 5V
+ Đèn 3 tắt à Điện áp đưa vào hàng 2 là 0V
+ Đèn 4 sáng à Điện áp đưa vào hàng 3 là 5V
+ Đèn 5 tắt à Điện áp đưa vào hàng 4 là 0V
+ Đèn 6 tắt à Điện áp đưa vào hàng 5 là 0V
+ Đèn 7 tắt à Điện áp đưa vào hàng 6 là 0V
- Tiếp tục quét với các cột từ 3 đến 5bằng cách như trên
- Để mắt người nhận biết được toàn bộ hình ảnh của ma trận ta phải tiến hành quét nhiều lần. Do mắt người không phân biệt được sự thay đổi ảnh nếu ảnh đó được quét với tốc độ 24 hình/s nên nếu ta quét ảnh với tốc độ lớn hơn hoặc bằng 24 hình/s thì ảnh sẽ chạy liên tục và không bị giật.
VII. MẠCH LED HOÀN CHỈNH.



VIII. HÌNH ẢNH DEMO.

Hướng phát triển của chương trình
- Thực tế hình ảnh hiển thị lớn hoặc cần có độ phân giải tốt đòi hỏi số lượng đèn trong ma trận lớn hơn nhiều lần. Từ đó đặt ra một yêu cầu là mở rộng ma trận đèn.
- Dựa trên cơ sở là ma trận LED 5X7 như đã nói ở trên, có thể thiết kế mở rộng (bằng cách tăng thêm số hàng và số cột) theo nguyên lý tương tự (quét hàng và quét cột) tuy nhiên phải thêm IC và linh kiện khác.
MUC LUC
Nội dung Trang
I. GIỚI THIỆU............................................................................ 1
II. CỔNG LPT VÀ ĐIỀU KHIỂN CỔNG................................. 2
III. IC 74HC595........................................................................... 5
IV. TRANSISTOR C1815........................................................... 8
V. ĐIỆN TRỞ............................................................................ 10
VI. MA TRẬN LED 5x7........................................................... 12
VII. MẠCH LED HOÀN CHỈNH............................................... 15
VIII. HÌNH ẢNH DEMO.............................................................. 17
-
TÀI LIỆU THAM KHẢO
[1] Thái Thanh Long – Giáo trình kỹ thuật điện tử số .2011.
[2] Forum http://www.dientuvietnam.net
http://dientuvietnam.net/forums/vi-dieu-khien-ho-8051-53/ic-ghi-dich-74hc595-can-giup-do-21590/index3.html
http://www.dientuvietnam.net/forums/vi-dieu-khien-ho-8051-53/cac-phuong-phap-quet-led-6595/
[3] Forum http://codientu.org
http://codientu.org/threads/74hc595-su-thong-dung-va-cach-dung.196/
[4] Forum http://www.codeproject.com
http://www.codeproject.com/Articles/4981/I-O-Ports-Uncensored-1-Controlling-LEDs-Light-Emit
[5]Forum http://jpjitendrapal.wordpress.com
http://jpjitendrapal.wordpress.com/2011/07/14/parallel-port-programming-in-windows-xp-or-windows-vista/
[6] Forum http://old.voer.edu.vn
http://old.voer.edu.vn/module/khoa-hoc-va-cong-nghe/cau-truc-cong-lpt.html