Sau một thời gian nghiên cứu và code thành công điều khiển module led matrix P10, hôm nay mình xin mạo muội viết tut nhỏ hướng dẫn các bạn cách điều khiển P10.
Đây là thành quả của mình

Đầu tiên chúng ta hãy xem hình ảnh thực thế của P10

- Module 16x32 đơn sắc có 16 hàng và 32 cột,có 16 con 74hc595 là ic ghi dịch 8 bit mắc nối tiếp nhau.

- Tất cả các chân anot của mỗi hàng được nối chung vào nhau , được cấp điện qua Mofet và ic 74hc138
- 4 con 74hc595 trên cùng phụ trách bật tắt 4 hàng led trên cùng là 1,2,3,4. cụ thể con 1 bật tắt 8 led đầu tiên,con 2 bật tắt 8 led tiếp,con 3 bật tắt 8 led tiếp theo,con 3 bật tắt 8 led cuối cùng
- 4 con 74hc595 tếp theo phụ trách bật tắt 4 hàng led là 5,6,7,8. cụ thể con 5 bật tắt 8 led đầu tiên,con 6 bật tắt 8 led tiếp theo ,con 7 bật tắt 8 led tiếp theo,con 8 bật tắt 8 led cuối cùng
- 4 con 74hc595 tếp theo phụ trách bật tắt 4 hàng led là 9,10,11,12. cụ thể con 9 bật tắt 8 led đầu tiên,con 10 bật tắt 8 led tiếp theo ,con 11 bật tắt 8 led tiếp theo,con 12 bật tắt 8 led cuối cùng
- 4 con 74hc595 cuối cùng phụ trách bật tắt 4 hàng led là 13,14,15,16. cụ thể con 13 bật tắt 8 led đầu tiên,con 14 bật tắt 8 led tiếp theo ,con 15 bật tắt 8 led tiếp theo,con 16 bật tắt 8 led cuối cùng
- dữ liệu được truyền như sau:

Dữ liệu truyền theo kiểu từ trên xuống, từ phải sang trái, bắt đầu từ con 74hc595 thứ 4 -> thứ 8 -> thứ 12 -> thứ 16 -> thứ 3 -> thứ 7 ..... - cách quét led rất đơn giản, chỉ cần quét 4 phát là quét được toàn bộ môdun, đơn giản cụ thể như sau:
- cách quét led rất đơn giản, chỉ cần quét 4 phát là quét được toàn bộ môdun, đơn giản cụ thể như sau:

+ phát thứ nhất: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 1,5,9,13 ( phát này quyét 4 hàng 1 lúc)
+ phát thứ hai: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 2,6,10,14 ( phát này quyét 4 hàng 1 lúc)
+ phát thứ ba: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 3,7,11,15 ( phát này quyét 4 hàng 1 lúc)
+ phát thứ tư: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 4,8,12,16 ( phát này quyét 4 hàng 1 lúc)

( Code Full + Nguyên lý - Mạch in ) Link Mediafire
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút
hiện ra ở góc phải phía trên, nhấn vào để đến trang download
Giải thích chương trình
Khai báo chân điều khiển của 89s52 nối với module
sbit OE=P2^0;// cho phép 74hc138 xuất dữ liệu
sbit A138=P2^1;// chân dữ liệu
sbit B138=P2^2;// chân dữ liệu
sbit CLK=P2^3;// xung 74hc595
sbit SCLK=P2^4;// chốt 74hc595
sbit DATA=P2^5;// dữ liệu 74hc595
Module có 16 hàng, có 32 cột, do mỗi 74hc595 điều khiển 8 cột lên ta có 32/8=4
Ta sẽ khai báo như sau:
#define so_hang 16
#define so_led 4
Ta sẽ định nghĩa kiểu dữ liệu như sau
typedef unsigned char uchar;
Ta sẽ lưu dữ liệu màn hình vào một mảng lưu trong RAM tương ứng với số hàng và số led
idata uchar Dmem[so_hang][so_led];
Có rất nhiều cách điều khiển 74hc595, do thói quen nên mình viết như sau
void dk595(uchar x)
{
uchar temp,i;
for(i=0;i
{
temp=x;
temp=temp&0x80;
if(temp==0x80) DATA=1; else DATA=0;
CLK=1;CLK=0;
x=x*2;
}
}
Để 74hc595 xuất dữ liệu sau khi dịch dữ liệu xong thì ta phải chốt lại
void chot595()
{
SCLK=1;SCLK=0;
}
Do module quét theo phương pháp ¼ nên mỗi lần quét thì sẽ có 4 hàng sáng cùng lúc.
void dk138(uchar h,uchar enoe)
{
switch(h)
{
case 0: A138=0;B138=0;break;
case 1: A138=1;B138=0;break;
case 2: A138=0;B138=1;break;
case 3: A138=1;B138=1;break;
}
OE=enoe;
}
Biến h tức là hàng số mấy, biến enoe cho phép 74hc138 xuất dữ liệu hay không.
Hoc_master_p10_ (2).png
Do có nhiều 74hc595 nối tiếp nhau, nên cái gì đẩy vào đầu tiên, sau khi chốt thì nó sẽ ở con cuối cùng.
Căn cứ vào hướng dịch dữ liệu của module, ta có chương trình như sau
void dichdl()
{
uchar i,j,k;
for(k=0;k
{
for(j=0;j
{
for(i=0;i
{
dk595(Dmem[12+k*2-(k+i*4)][j]);
}
}
chot595();
dk138(k,1);
delay(50);
dk138(k,0);
delay(50);
}
}
Để kiểm tra xem ta dịch đúng hướng dữ liệu chưa, ta sẽ có code kiểm tra nếu hàng chẵn thì chỉ 1 led sáng, hàng lẻ thì cả hàng sáng
void test_led()
{
uchar i,j;
for(i=0;i
{
for(j=0;j
{
if(i%2==0) Dmem[j]=0x00; else Dmem[j]=~0x01;
}
}
}
Chương trình chính
void main()
{
test_led();
while(1)
{
dichdl();
}
}
Để tạo font cho led matrix, các bạn sử dụng phần mềm LCD Font Maker.
Các bạn chỉ cần nhập chữ muốn hiển thị vào ô char input, muốn thay đổi font chữ kích vào Choose Font và chọn tùy ý muốn

Sau khi đã chọn được font theo ý muốn, các bạn nhấ vào hình cài đặt, bên cạnh ngôi nhà vào chọn hướng dữ liệu như hình.

Sau đó nhấn vào hình ngôi nhà để tạo mã led. Nhấn vào copy all để sao chép mã led
Đến đây các bạn Paste vào file font_matrix.h và biên dịch, nạp code và chiêm ngưỡng thành quả.
Vậy là xong bản test module, bài sau mình sẽ hướng dẫn để code sao cho chữ chạy từ phải sang trái.
Mọi thắc mắc các bạn có thể liên hệ Facebook: http://facebook.com/maingochoc.mtt
Chúc thành công.
Theo Mai Ngoc Hoc
Đây là thành quả của mình

Đầu tiên chúng ta hãy xem hình ảnh thực thế của P10

- Module 16x32 đơn sắc có 16 hàng và 32 cột,có 16 con 74hc595 là ic ghi dịch 8 bit mắc nối tiếp nhau.

- Tất cả các chân anot của mỗi hàng được nối chung vào nhau , được cấp điện qua Mofet và ic 74hc138
- 4 con 74hc595 trên cùng phụ trách bật tắt 4 hàng led trên cùng là 1,2,3,4. cụ thể con 1 bật tắt 8 led đầu tiên,con 2 bật tắt 8 led tiếp,con 3 bật tắt 8 led tiếp theo,con 3 bật tắt 8 led cuối cùng
- 4 con 74hc595 tếp theo phụ trách bật tắt 4 hàng led là 5,6,7,8. cụ thể con 5 bật tắt 8 led đầu tiên,con 6 bật tắt 8 led tiếp theo ,con 7 bật tắt 8 led tiếp theo,con 8 bật tắt 8 led cuối cùng
- 4 con 74hc595 tếp theo phụ trách bật tắt 4 hàng led là 9,10,11,12. cụ thể con 9 bật tắt 8 led đầu tiên,con 10 bật tắt 8 led tiếp theo ,con 11 bật tắt 8 led tiếp theo,con 12 bật tắt 8 led cuối cùng
- 4 con 74hc595 cuối cùng phụ trách bật tắt 4 hàng led là 13,14,15,16. cụ thể con 13 bật tắt 8 led đầu tiên,con 14 bật tắt 8 led tiếp theo ,con 15 bật tắt 8 led tiếp theo,con 16 bật tắt 8 led cuối cùng
- dữ liệu được truyền như sau:

Dữ liệu truyền theo kiểu từ trên xuống, từ phải sang trái, bắt đầu từ con 74hc595 thứ 4 -> thứ 8 -> thứ 12 -> thứ 16 -> thứ 3 -> thứ 7 ..... - cách quét led rất đơn giản, chỉ cần quét 4 phát là quét được toàn bộ môdun, đơn giản cụ thể như sau:
- cách quét led rất đơn giản, chỉ cần quét 4 phát là quét được toàn bộ môdun, đơn giản cụ thể như sau:

+ phát thứ nhất: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 1,5,9,13 ( phát này quyét 4 hàng 1 lúc)
+ phát thứ hai: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 2,6,10,14 ( phát này quyét 4 hàng 1 lúc)
+ phát thứ ba: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 3,7,11,15 ( phát này quyét 4 hàng 1 lúc)
+ phát thứ tư: tắt hết các hàng, Truyền dữ liệu cho 74hc595 bật hàng số 4,8,12,16 ( phát này quyét 4 hàng 1 lúc)


Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút

Giải thích chương trình
Khai báo chân điều khiển của 89s52 nối với module
sbit OE=P2^0;// cho phép 74hc138 xuất dữ liệu
sbit A138=P2^1;// chân dữ liệu
sbit B138=P2^2;// chân dữ liệu
sbit CLK=P2^3;// xung 74hc595
sbit SCLK=P2^4;// chốt 74hc595
sbit DATA=P2^5;// dữ liệu 74hc595
Module có 16 hàng, có 32 cột, do mỗi 74hc595 điều khiển 8 cột lên ta có 32/8=4
Ta sẽ khai báo như sau:
#define so_hang 16
#define so_led 4
Ta sẽ định nghĩa kiểu dữ liệu như sau
typedef unsigned char uchar;
Ta sẽ lưu dữ liệu màn hình vào một mảng lưu trong RAM tương ứng với số hàng và số led
idata uchar Dmem[so_hang][so_led];
Có rất nhiều cách điều khiển 74hc595, do thói quen nên mình viết như sau
void dk595(uchar x)
{
uchar temp,i;
for(i=0;i
{
temp=x;
temp=temp&0x80;
if(temp==0x80) DATA=1; else DATA=0;
CLK=1;CLK=0;
x=x*2;
}
}
Để 74hc595 xuất dữ liệu sau khi dịch dữ liệu xong thì ta phải chốt lại
void chot595()
{
SCLK=1;SCLK=0;
}
Do module quét theo phương pháp ¼ nên mỗi lần quét thì sẽ có 4 hàng sáng cùng lúc.
void dk138(uchar h,uchar enoe)
{
switch(h)
{
case 0: A138=0;B138=0;break;
case 1: A138=1;B138=0;break;
case 2: A138=0;B138=1;break;
case 3: A138=1;B138=1;break;
}
OE=enoe;
}
Biến h tức là hàng số mấy, biến enoe cho phép 74hc138 xuất dữ liệu hay không.
Hoc_master_p10_ (2).png
Do có nhiều 74hc595 nối tiếp nhau, nên cái gì đẩy vào đầu tiên, sau khi chốt thì nó sẽ ở con cuối cùng.
Căn cứ vào hướng dịch dữ liệu của module, ta có chương trình như sau
void dichdl()
{
uchar i,j,k;
for(k=0;k
{
for(j=0;j
{
for(i=0;i
{
dk595(Dmem[12+k*2-(k+i*4)][j]);
}
}
chot595();
dk138(k,1);
delay(50);
dk138(k,0);
delay(50);
}
}
Để kiểm tra xem ta dịch đúng hướng dữ liệu chưa, ta sẽ có code kiểm tra nếu hàng chẵn thì chỉ 1 led sáng, hàng lẻ thì cả hàng sáng
void test_led()
{
uchar i,j;
for(i=0;i
{
for(j=0;j
{
if(i%2==0) Dmem[j]=0x00; else Dmem[j]=~0x01;
}
}
}
Chương trình chính
void main()
{
test_led();
while(1)
{
dichdl();
}
}
Để tạo font cho led matrix, các bạn sử dụng phần mềm LCD Font Maker.
Các bạn chỉ cần nhập chữ muốn hiển thị vào ô char input, muốn thay đổi font chữ kích vào Choose Font và chọn tùy ý muốn

Sau khi đã chọn được font theo ý muốn, các bạn nhấ vào hình cài đặt, bên cạnh ngôi nhà vào chọn hướng dữ liệu như hình.

Sau đó nhấn vào hình ngôi nhà để tạo mã led. Nhấn vào copy all để sao chép mã led
Đến đây các bạn Paste vào file font_matrix.h và biên dịch, nạp code và chiêm ngưỡng thành quả.
Vậy là xong bản test module, bài sau mình sẽ hướng dẫn để code sao cho chữ chạy từ phải sang trái.
Mọi thắc mắc các bạn có thể liên hệ Facebook: http://facebook.com/maingochoc.mtt
Chúc thành công.
Theo Mai Ngoc Hoc