Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
Tuesday, January 14, 2014


Bài đang soạn...nội dụng sẽ luôn được chỉnh lý

Dẫn nhập

Từ khi con người chế tạo ra được các loại ic lập trình, làm việc với các câu lệnh, thì ngành điện tử đã chuyển qua một thời kỳ mới với rất nhiều ứng dụng hấp dẫn, hay lạ. Từ các ic lập trình chúng ta bắt đầu làm quen với khái niệm "phần xác" và "phần hồn", hay còn được gọi là phần cứng và phần mềm.

Phần xác là gì? Là các linh kiện tạo ra mạch điện, tạo ra thiết bị. Nó giống như bắp thịt, đầu mình và tay chân của chúng ta, phần xác thường như là các vật thể hữu hình có khối lượng và vô tri vô giác.

Phần hồn là gì? Là các câu lệnh vô hình, mà chúng ta đã soạn ra và cho nạp vào bộ nhớ của các ic lập trình, dùng các câu lệnh này chúng ta có thể điều khiển các dạng hoạt động của phần xác. Chúng ta thấy cũng chỉ trên một bộ nhớ mà khi chúng ta cho thay đổi các câu lệnh mới, với các câu lệnh mới này thì phần xác lại có thể tạo ra các đáp ứng mới, các động tính mới. 

Đó chính là cấu trúc của các mạch điện thời đại, của các loại thiết bị đời mới, trong đó làm việc với các loại ic lập trình. Từ hiểu biết trên chúng ta sẽ thấy công việc của người thiết kế điện tử ngày nay sẽ gồm các bước như sau:

Bước 1: Tạo ra các vật thể giống như công việc tạo ra một cái xác có đủ đâu mình và tứ chi. Với các cái xác không hồn thì vô tri vô giác, không làm được trò trống gì cả.

Bước 2: Viết các chương trình nguồn để điều khiển các bộ phận của phần xác. Như chương trình điều khiển sự đi đứng, chương trình điều khiển tay chân, đầu mình...

Bước 3: Dịch các chương trình nguồn vốn là các câu lệnh thành các dòng mã lệnh và cho nạp các dòng mã lệnh vào nằm trong bộ nhớ của thiết bị.

Bước 4: Cho vận hành thử các thiết bị để xem xét các hoạt động của nó có đúng với ý muốn của người thiết kế không? Nếu chưa vừa ý thì cho hiệu chỉnh lại, thường công việc là viết lại các chương trình nguồn.

Ngày nay người ta chế tạo ra biết bao thứ thiết bị thông minh, kết hợp tài tình giữa phần xác và phần hồn, nó hoàn toàn có thể làm được nhiều việc giống như một sinh vật sống. Trong nghề nghiệp, chúng ta không muốn mình bị "lạc hậu", thụt lùi, vậy phải tìm hiểu loại ic lập trình này thôi. Nhưng khởi đầu phải từ bước nhập môn, vậy làm quen với ic lập trình AT89C51 vậy.

  

Giới thiệu bo thực hành với ic lập trình AT89C51


1. Tìm hiểu hoạt động của ic lập trình AT89C51.


 

Hình trên cho thấy ic lập trình đơn phiến AT89C51 có 40 chân, công dụng của các chân như sau:


☆ Chân cuối của hàng dưới, chân 20, cho nối masse, chân cuối của hàng trên, chân 40, cho nối nguồn 5V 

☆ Chân 9 là chân reset, khi chân này ở mức áp cao, IC sẽ ở trạng thái reset.

☆ Chân 18, 19 dùng gắn thạch anh để định tần cho xung nhịp, với thạch anh 12MHz, chu kỳ lệnh sẽ là 1us.

☆ Chân 31 dùng khai báo IC sẽ làm việc với bộ nhớ nào, khi treo chân này lên mức áp cao, IC sẽ chỉ làm việc với bộ nhớ trong.

☆ IC AT89C51 có 4 cảng dạng 8-bit dùng xuất nhập bit. Các cảng được đặt tên là p0, p1, p2 và p3.

☞ Cảng p0 gồm các chân: 39, 38, 37, 36, 35, 34, 33, 32.

☞ Cảng p1 gồm các chân: 1, 2, 3, 4, 5, 6, 7, 8.

☞ Cảng p2 gồm các chân: 21, 22, 23, 24, 25, 26, 27 ,28.

☞ Cảng p3 gồm các chân: 10, 11, 12, 13, 14, 15, 16, 17.


Ghi nhớ: Để tiện dụng trên các chân của các cảng đều đã cho đặt tên riêng, do vậy chúng ta có thể xử dụng các tên này trong các câu lệnh mà không cần phải nhớ số chân của IC. Cũng chú ý có một số chân đa nhiệm, nghĩa là chân đó có thể làm nhiều nhiệm vụ. Nhất là các chân của cảng p3. Người ta thường dùng 2 cảng p0 và p2 để truy cập địa chỉ 16-bit của các bộ nhớ ngoài, với khả năng truy cập địa chỉ 16-bit, nó có thể làm việc với các bộ nhớ có 65536 thanh nhớ.



Khi dùng ic lập trình đơn phiến AT89C51, Bạn chú ý đến 4 điều sau đây:



①. Vấn đề cấp nguồn, IC AT89C51 làm việc với mức nguồn 5V, nguồn nuôi cần có độ ổn định tốt. Do vậy Bạn nên dùng ic ổn áp 7805 để có nguồn 5V cấp cho IC này.

②. Ở mạch reset, Bạn dùng tụ khoảng 10μF và điện trở có trị 10KΩ để tạo ra mức áp cao ngay khi mạch được cấp điện, với mức áp cao xuất hiện trên chân số 9, IC sẽ vào trạng thái reset, nó trả các thanh ghi trong IC về trạng thái reset và quay lại chạy dòng lệnh từ thanh 0000h trong bộ nhớ ROM.

③. Muốn ic lập trình hoạt động Bạn phải gắn thạch anh trên chân 18, 19 dùng để định tần cho mạch dao động tạo xung nhịp. Thạch anh thường dùng trong thực nghiệm là 12MHz, vậy chu kỳ thực hiện lệnh sẽ là 1μs.

④. Nếu chỉ làm thực nghiệm với các câu lệnh có trong bộ nhớ ROM bên trong, nghĩa là không dùng bộ nhớ ngoài, Bạn cho treo chân 31 lên mức áp cao.

 Khi đã thoả mãn 4 điều kiện trên, bây giờ Bạn đã có thể dùng các câu lệnh nạp vào bộ nhớ ROM và dùng ic AT89C51 để làm các công việc mà Bạn muốn. 




2. Mạch điện ứng dụng cơ bản của ic lập trình AT89C51.

Trên bo thực hành đa dụng, Bạn thấy chung quanh ic lập trình đơn phiến AT89C51 có dùng đến các ic 74245 làm tầng khuếch đại dùng điều khiển việc xuất nhập của các bit ra vào trên các cảng của IC.


 

Trước hết chúng ta hãy tìm hiểu công dụng của các ic 74HC245.

 

Hình trên cho thấy, ic logic 74HC245 có 8 tầng khuếch đại song hướng. IC làm việc với chân cuối của hàng dưới, chân 10, cho nối masse và chân cuối của hàng trên, chân 20, cho nối nguồn 5V. Các tầng khuếch đại với A0 - B0, A1- B1, A2 - B2, A3 - B3, A4 - B4, A5 - B5, A6 - B6, A7 - B7. Chân 19 /OE dùng kích mở hoạt động của ic khi nó ở mức volt thấp, hay cho nối masse, khi chân này treo ở mức áp cao, các ngả xuất nhập sẽ cho ở trạng thái thứ ba, nghĩa là trạng thái có trở kháng vô cùng lớn, xem như hở mạch. Chân số 1 chọn hướng đi cho tín hiệu. Khi chân DIR ở mức áp cao, thì tín hiệu vào bên A ra bên B và khi chân DIR ở mức áp thấp thì tín hiệu vào bên B và ra bên A. Tóm lại, người ta dùng ic 74HC245 để khuếch đại tăng cường cho các cảng của ic lập trình AT89C51.

Vậy, có thể thấy, trong sơ đồ mạch điện trên, khi 4 khóa điện trong S đều để hở thì các chân DIR đều cho ở mức áp cao, lúc này tín hiệu vào bên A và ra bên B, hay có thể nói nó dùng cho mode xuất bit trên 4 cảng của AT89C51. Nếu muốn nhập bit vào các cảng của ic AT89C51 chúng ta phải đặt chân DIR xuống mức áp thấp. Trong mạch người ta còn dùng các điện trở thanh để treo áp các chân lên mức áp cao.

Vậy sơ đồ mạch điện này cho thấy phần mạch trung tâm dùng chạy ic lập trình đơn phiến AT89C51, Bạn có thể dùng bó dây nối 8 đường cho kết nối các cổng p0, p1, p2 và p3 đến các bộ phận chịu tác động điều khiển khác cũng trang bị trên bo để làm thực hành với bo mạch đa dụng này.




3. Cấu trúc của các chương trình nguồn.


Bạn cho gắn 8 Led với các chân cathode nối masse và các chân anode nối vào cảng p1. Sơ đồ mạch điện như hình sau:


 


Bây giờ Bạn hãy viết một chương trình nguồn để 8 Led nầy lần lượt sáng lên từng Led và khi 8 Led đã sáng hết thì cho tắt hết 8 Led và rồi bắt đầu lại.



org 0000h    ; thanh nhớ khởi đầu trong bộ nhớ ROM
    jmp loop   ; dùng lệnh nhẩy, cho nhẩy qua các thanh nhờ dùng cho ngắt
org 0080h    ; sắp xếp các lệnh sau từ thanh nhớ nầy trở đi

loop:
    mov p1,#00h   ; đặt 8 chân của cảng p0 xuống mức áp thấp, tắt hết 8 led
    setb p1.0    ; cho sáng led trên chân p1.0
    call delay    ; gọi chương trình làm chậm
    setb p1.1    ; cho sáng led trên chân p1.1
    call delay
    setb p1.2    ; cho sáng led trên chân p1.2
    call delay
    setb p1.3    ; cho sáng led trên chân p1.3
    call delay
    setb p1.4    ; cho sáng led trên chân p1.4
    call delay
    setb p1.5    ; cho sáng led trên chân p1.5
    call delay
    setb p1.6    ; cho sáng led trên chân p1.6
    call delay
    setb p1.7    ; cho sáng led trên chân p1.7
    call delay
    JMP LOOP ; quay lại, bắt đầu từ tên nhãn loop

delay:                 ; đoạn chương trình dùng làm chậm
      mov r5,#20   ; nạp trị thập phân 20 vào thanh r5
d1: mov r6,#40   ; nạp trị thập phân 40 vào thanh r6
d2: mov r7,#248 ; nạp trị thập phân 248 vào thanh r7
      djnz r7,$        ; cho trị trong r7 giảm theo bước -1, chờ r7 = 0
      djnz r6,d2      ; giảm trị trong r6, chưa =0, quay lại d2
      djnz r5,d1      ; giảm trị trong r5, chưa =0, quay lại d1
      ret                 ; quay trở lại dòng lệnh sau lệnh call

end  ; dừng công việc biên dịch ở đây.
 


Phân tích cách viết chương trình nguồn trên:



 

Các câu lệnh setb p1.x tiếp theo sẽ lần lượt làm cho các Led trên các chân p1.1, p1.2, p1.3. p1.4. p1.5, p1.6, p1.7 sáng lên. Chúng ta thấy như hình minh họa sau:




Phân tích đoạn chương trình dùng làm chậm:

 


Sau cùng dùng giả lệnh end để báo cho dừng biên dịch tại dòng này. Như vậy những dòng lệnh tiếp theo bên dưới giả lệnh end đều sẽ bỏ qua.


Sau đây là chương trình nguồn, cũng làm các công việc giống như trên, được viết theo ngôn ngữ lập trình C.

#include<reg51.h> // xác định các định nghĩa lấy trong file reg51.h 
#define uchar unsigned char // dùng định nghĩa đặt tên để tiện dùng
#define uint unsigned int // dùng định nghĩa đặt tên để tiệnn dùng
#define LED P1 // dùng định nghĩa đặt tên để tiện dùng
uchar led_value[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0xff}; // tạo các trị để cho 8 Led sáng lan lên
uchar *p=led_value; // gán trị khởi đầu

void delay() // tạo hàm làm chậm
{
uchar ii,jj;
for(ii=0;ii<200;ii++)
for(jj=0;jj<200;jj++);
}

void run_led() // tạo hàm cho 8 Led sáng lan trên cảng 1
{
while(*p!=0xff)

LED=*p; // gắn trị vào cảng p1
p++; //  nhập trị tiếp theo 
delay(); // gọi hàm trể
}
p=led_value;
}

main() // Khởi chạy hàm chủ
{
while(1)
run_led(); // chạy hàm cho 8 Led sáng lan
}


Góp ý của người soạn: Nếu Bạn là dân thợ điện tử, và mới làm quen với ic lập trình AT89C51, Bạn nên học viết chương trình nguồn với Assembler, các câu lệnh trong Assembler gắn với phần mạch nhiều hơn nên dễ hiểu hơn. Trong bài viết này, các bài tập tôi sẽ chỉ dùng câu lệnh viết với Assembler và cố gắng gắn các câu lệnh này với phần mạch điện để Bạn mau tiếp thu hơn. Phần dùng ngôn ngữ lập trình C, chúng ta sẽ nói đến trong các bài viết khác.

  

4. Tìm hiểu trình biên dịch MIDE-51

Sau khi cài xong trình MIDE-5, trên desktop máy tính của Bạn sẽ thấy có tiêu hình như hình sau: Muốn mở trình MIDE-5, Bạn nháy chuột 2 nhịp nhanh trên tiêu hình này.



 Giao diện của trình MIDE-51 hiện ra như hình sau:

 



Bạn cho mở các file có họ .asm hay cắt các câu lệnh của assembler dán vào vùng biên soạn này để sửa đổi rồi cho biên dịch ra các dòng mã lệnh:



Một thí dụ: Tôi cắt rồi dán các câu lệnh trên vào vùng soạn thảo của MIDE-51, sau khi đặt cho nó một cái tên "8 led p1.asm", save lại và nhấn phím F9 để cho dịch các câu lệnh ra dòng mã lệnh. Kết quả có file "8 led p1.hex" như sau:



Nội dung trong file "8 led p1.hex" là các dòng lệnh được ghi lại với mã thập lục phân.

:030000000200807B
:10008000759000D2901200ADD2911200ADD29212B2
:1000900000ADD2931200ADD2941200ADD2951200F1
:1000A000ADD2961200ADD2971200AD80D37D147EF2
:0A00B000287FF8DFFEDEFADDF622FD
:00000001FF


Bây giờ Bạn chỉ dùng một hộp nạp mà Bạn có, cho nạp các dòng mã lệnh vào ic lập trình AT89C51. Đến đây là xong chuyện, Bạn đã "cấy phần hồn" vào bộ nhớ của IC. Nếu gắn IC vào mạch thực nghiệm, nó sẽ làm đúng các công việc mà Bạn muốn nó làm, tuyệt đổi không bao giờ biết "kêu ca" nếu nguồn điện cấp cho mạch vẫn còn đủ. 


  
5. Hộp nạp.


Hiện nay trên thị trường có rất nhiều bo nạp ROM dùng cho các loại ic lập trình, ở đây tôi giới thiệu một bo nạp "cổ điển", Bạn có thể mua kit về tự ráp, hay mua bo đã ráp sẵn cũng có. Bo không đắc tiền, dưới 100.000 đồng, nhưng số ic lập trình mà bo chịu nạp cũng ít thôi. Nếu chỉ dùng nạp cho nhóm các ic AT89Cxxxx thì có bo này cũng đủ dùng. 


 

Nguyên lý vận hành của bo nạp này như sau:

Phân tích mạch nguồn nuôi:

Với IC ổn áp 7805, mức áp ngả ra trên chân Output sẽ là 5V, ở đây Bạn dùng tụ lọc nhỏ C4 (10m F)để dập hiện tượng dao động tự kích bên trong IC. Nhìn vào hình, Bạn thấy IC ổn áp 7805 dùng vỏ TO220, ở đây chú ý cách bố trí các chân IN, GND và chân OUTPUT (loại IC này chân giữa luôn cho nối masse). Bạn nhớ với các IC vi điều khiển, mức áp nguồn nuôi phải rất ổn định, sự bất ổn định trênđường nguồn sẽ làm cho IC hoạt động không ổn định.

Chúng ta biết các IC CPU thường làm việc ở mức nguồn chuẩn +5V, nó cần đường nguồn có độổn định rất cao. Trong mạch này, người ta dùng cầu nắn dòng với 4 diode (khoảng 1A) và tụ lọc C8 (470m F) để tạo ra đường nguồn khoảng 15V (với mức nguồn AC ở ngả vào là 12V). Tụ nhỏ C9 (0.1m F) dùng lọc bỏ nhiễu tần cao nhiễm trên đường nguồn. Dùng Led đỏ và điện trở hạn dòng 1.2K để chỉ thị. Từ đường nguồn DC lấy trên tụ C8, qua IC 7805, chúng ta sẽ lấy ra được mức áp +5V có độ ổn định cao. Mức nguồn này sẽ cấp cho chân 40 của các IC vi điều khiển U1 (89C51 Master), U2 (89C51 Slave) và chân 16 của IC MAX232.

Trong mạch còn dùng IC ổn áp có chân định áp ngả ra (Adjustment) LM317, ở IC LM317 Bạn có thể dùng 2 điện trở cho lấy tín hiệu hồi tiếp ở ngả ra trả về chân Adj, sự thay đổi của các điện trở này sẽ làm thay đổi mức áp DC ở ngả ra. Ở đây, khi Q1 bão hòa, mức áp trên chân Adj xác lập theo cácđiện trở 270 và 2.2K//1.2K, lúc này điện áp ra sẽ cho ở mức áp 5V. Mức áp này cấp cho chân số 31 của U2 (AT89C51, Slave). Chân 31 là chân _EA/Vpp (External Access), khi nó bị đặt ở mức áp cao (5V), IC vi điều khiển U2 (AT89C51) sẽ không truy cập các chương trình nằm ở bộ nhớ bên ngoài, nghĩa là nó sẽ chỉ chạy các chương trình đã có trong bộ nhớ EEPROM bên trong AT89C51.Chúng ta còn biết, nhà thiết kế còn sử dụng chân 31 (Vpp), khi đưa chân này lên mức áp 12V, để cho xóa các chương trình đã có trong bộ nhớ EEPROM, trước khi cho nạp các chương trình mã lệnh mới vào bộ nhớ EEPROM trong IC lập trình AT89C51. Để cho nạp các chương trình mã lệnh lấy vào trên các cảng nhập xuất P0, P1, P2, Bạn hãy cho chân 31 lên mức áp VPP = 12V. Để làm điều này, mức áp ra trên chân số 13 của U1 (AT89C51, Master) sẽ chuyển xuống mức thấp (mức “0”), nó sẽ làm ngưng dẫn Q1, như vậy điện trở 1.2K trên chân C của Q1 đã đuợc cho cắt masse, nó làm tăng điện trở nối masse của chân Adj của ic ổn áp LM317, điều này sẽ khiến cho mức áp ra trên chân Out của LM317 tăng lên 12V, điều này sẽ cho xóa các dữ liệu đã có trong bộ nhớ EEPROM và cho ghi vào các dòng lệnh mới.


Ghi chú: Nếu nguồn nuôi DC thấp hay vì lý do nào đó, chân 31 của U2 (89C51, Slave) không lênđủ cao (12V), lúc đó việc cài đặt sẽ không thành công, Bạn sẽ thấy xuất hiện chữ Failed (thay vì là chữ Complete) trên cửa sổ của các phần mềm cài đặt (của EZ4.EXE)đặt LED chỉ thị màu xanh, điện trở hạn dòng 470 và diode Zener có Vz=5.6V. Vậy khi bình thuờng mức áp ở chân 31 là 5V, Led chỉ thị màu xanh sẽ không phát sáng. Khi vào mode ghi nó lên 12V, LED này sẽ phát sáng để báo cho Bạn biết trạng thái mức áp trên chân số 31.


Để kiểm tra mạch nguồn, Bạn cấp điện cho mạch, đo áp trên ngả ra của IC ổn áp 7805, mức áp sẽ là 5V, lấy một bóng đen tim làm tải, nếu khi có cho mang tải nặng mà mức áp không giảm xuống, là mạch nguồn 5V tốt.


Đo volt trên ngả ra của IC ổn áp LM317, cho chân B của Q1 nối masse, nếu mức áp trên chân Out của LM317 tăng lên mức 12V là tốt (Khi kiểm tra nguồn, Bạn không cần gắn các ic AT89C51 U1, U2 vào bo).
  

Tóm lại, khi dùng bo nạp này, trước hết Bạn phải có phần mềm EZ4.EXE. Cho bo nạp kết nối với máy tính qua cổng COM, kích mở phần mềm này, chọn đúng tên ic cần nạp, nếu trình EZ4 nhận thấy bo nạp, Bạn hãy nhấn nút cho nạp, file mã lệnh có họ là .hex mà Bạn đã chọn sẽ qua ic AT89C51 Master cho nạp vào bộ nhớ EEPROM của ic lập trình AT89C51 mà Bạn đã cắm trên bộ chân Slave của bo nạp. 




Giới thiệu bo hộp nạp TOP853:


Đây là hộp nạp đã được giới thiệu trên trang web phuclanshop.com, Bạn vào trang nầy để xem cách hướng dẫn sử dụng.


 




6. Hướng dẫn làm thực hành trên bo thực hành đa dụng dùng ic AT89C51.


Hình chụp cho thấy toàn phần một bo thực hành, dùng với ic lập trình AT89C51. Chúng ta biết ic lập trình như AT89C51... có thể làm được rất nhiều công việc, nó tùy thuộc vào các mạch điện kết nối trên các cảng và cũng tùy thuộc vào chương trình nguồn mà Bạn đã soạn ra và cho nạp vào bộ nhớ EEPROM. Do vậy ngày nay trên thị trường đã có rất nhiều bo mạch mà trên đó người ta đã tạo ra rất nhiều kiểu mạch thực dụng để Bạn có thể làm thực hành với ic lập trình một cách tiện lợi, vậy nếu thấy thích Bạn có thể tìm mua về tự học lập trình với các kiểu mạch điện đã được trang bị trên bo mạch này. Ở bài này tôi giới thiệu một bo mạch thực hành ráp ở nội địa có giá bán thấp để Bạn tìm hiểu, ngoài ra còn rất nhiều bo mạch thực hành ngoại nhìn rất "bắt mắt" nhưng giá bán cao, dĩ nhiên rồi, theo tôi nếu chỉ dùng để làm thực hành cho các bài học lập trình Bạn tìm các bo thực hành ráp ở chợ Nhật Tảo P7-Q10 cũng được rồi, thậm chí Bạn tự ráp các phần mạch điện thực hành riêng rẽ dùng cho từng bài tập thực hành cũng được.






Các bài thực hành có thể làm trên board này gồm có:




❶. Làm thực hành với 32 Led trên 4 cảng p0, p1, p2, p3



Sơ đồ mạch điện trên cho thấy, trên bo thực hành đa dụng có 32 Led, chia ra làm 4 nhóm. Bạn dùng bó nối loại 8 dây, cho nối các Led này vào các cảng của ic lập trình AT89C51, rồi tự nghĩ ra các kiểu nhấp nháy của các Led, sau đó mở trình MIDE-51, thử tự dùng các câu lệnh Assembler để viết các chương trình nguồn và rồi cho biên dịch ra thành các dòng mã lệnh, dùng hộp nạp cho nạp các dòng mã lệnh này vào bộ nhớ EEPROM của ic lập trình, sau đó gắn ic AT89C51 và bo mạch thực hành và cấp điện cho chạy thử, xem diễn biến trên các Led có đúng với ý muốn của Bạn không? Nếu không đúng thì hãy tập trung suy nghĩ để tìm ra lý do, cứ làm đi làm lại những công việc này, Bạn sẽ tích lũy được nhiều kinh nghiệm trong việc lập trình, đó là bước khởi đầu rất tốt để tự học cách dùng loại IC lập trình.


Cho một thí dụ: Tôi muốn lập trình, tức viết các câu lệnh, để có kiểu chớp của các Led như hình sau:

 

Trước hết Bạn hãy chọn định các kiểu nhấp nháy tùy thích, sau đó tìm cách dùng các câu lệnh, viết ra chương trình nguồn để ic lập trình AT89C51 tự động làm ra được điều Bạn muốn. Để làm được kiểu nháy như trên Bạn có thể viết chương trình nguồn như sau:

org 00000h
start:
     mov p0, #00000000b
     mov p1, #00000000b
     mov p2, #00000000b
     mov p3, #00000000b

     call delay
     setb p0.7
     setb p3.0
     call delay
         setb p0.6
     setb p3.1
     call delay
       setb p0.5
     setb p3.2
     call delay
        setb p0.4
     setb p3.3
     call delay
       setb p0.3
     setb p3.4
     call delay
       setb p0.2
     setb p3.5
     call delay
      setb p0.1
     setb p3.6
     call delay
     setb p0.0  
     setb p3.7
     call delay
     mov p1, #11111111b
     mov p2, #11111111b
     call delay
     mov p1, #00000000b
     mov p2, #00000000b 
     call delay
      jmp start

delay:
     mov r7, #10
v6: mov r6, #50
v5: mov r5, #200
     djnz r5, $
     djnz r6, v5
     djnz r7, v6
     ret
end      


Trong nhiều bài viết trước đây, chúng tôi cũng đã trình bày về cách dùng Assembler để viết các chương trình nguồn cho các ic lập trình. Bạn có thể tìm đọc lại. Để hiểu rõ hơn các câu lệnh dùng cho ic lập trình AT89C51. Bạn có thể vào đọc bài viết này.







❷. Làm thực hành với 8 đèn số dùng Led mã 7 đoạn. 

Hình vẽ sau cho thấy trên bo thực hành có 8 đèn số dùng Led mã 7 đoạn để cho hiển thị các số thập phân. Trong phần thực hành này, chúng tôi sẽ trình bày cách viết chương trình đồng hồ chỉ thời gian dùng 6 đèn số của bảng đèn này.

 


Nhắn Bạn: Để tránh bài viết quá dài, mỗi ứng dụng tôi sẽ phân tích đầy đủ hơn trong một chuyên mục ứng dụng của ic lập trình AT89C51.




  


❸. Làm thực hành với bảng Led ma trận 8x8.


Đây là sơ đồ mạch điện ứng với phần thực hành dùng đèn Led ma trận 8x8 để cho hiện hình và chạy chữ, để Bạn hiểu rõ cách dùng loại đèn Led ma trận, chúng tôi viết thêm một bài phụ, Bạn hãy vào xem.  





Nhắn Bạn: Để tránh bài viết quá dài, mỗi ứng dụng tôi sẽ phân tích đầy đủ hơn trong một chuyên mục ứng dụng của ic lập trình AT89C51.






❹. Làm thực hành với 16 phím nhấn.



❺. Làm thực hành với ic biến đổi A/D (ADC0809).



❻. Làm thực hành với ic biến đổi D/A (DAC0808).



❼. Làm thực hành mở rộng với các ic khuếch đại ULN2803.

Tự làm bảng đèn Led chạy chữ trên ma trận 8x24 chỉ dùng một ic AT89C51


Dẫn nhập

Dùng ic lập trình AT89C51, Bạn có thể kiểm soát được trạng thái tắt sáng của các dãy Led trên các bảng đèn, từ đó có thể tạo ra được các hình ảnh hay các dòng con chữ cho chạy trên các bảng đèn này, công việc này hiện rất được nhiều Bạn ưa thích, trong bài viết này, tôi trình bày một bài làm thực hành khá đơn giản nhưng rất căn cơ để Bạn hiểu được nguyên lý làm việc của các bảng đèn quang báo. Từ các hiểu biết này, Bạn mới có thể sẽ mở rộng ra nhiều kiểu bảng đèn phức tạp hơn. Mong Bạn để tâm tìm hiểu.  


 


Bài thực hành này sẽ cho hiện hình và các dòng chữ chạy, nhấp nháy, trên một bảng đèn ma trận 8x8. Với ic một lập trình có 4 cảng p0, p1, p2, p3, chúng ta sẽ dùng 3 bộ ma trận 8x8 và như vậy sẽ không cần thêm một ic logic nào nữa. Mạch rất đơn giản, nhưng có cơ sở lý thuyết rất cơ bản, sẽ giúp Bạn hiểu rất rõ về các loại đèn quang báo lớn khác.




Phân tích sơ đồ mạch điện:


 




Trướt hết Bạn tạo bảng đèn dùng 3 bộ 8x8. Các hàng, trên đó là các chân Anode của các Led cho nối chung và dùng một transistor pnp để dùng bit 0 xuất trên các chân của cảng p1 cấp cho chân B của transistor để cho nối dây chung nầy lên đường nguồn 5V. Do mạch dùng kỹ thuật quét nên mỗi lần chỉ có một hàng cho nối vào đường nguồn 5V.

Do các chân của Cathode của Led cho nối chung trên một cột, chúng ta dùng các transistor npn để cho cột thông masse để lấy dòng cấp cho các Led, vậy để chân Cathode thông masse, chúng ta sẽ dùng bit 1, cho xuất trên các chân của cổng p2, p0 và p3 cấp cho chân B của các transistor. Với một cổng có 8 bit, vậy mỗi bộ mã 8 bit cho xuất ra trên các công p2, p0, p3, chúng ta có thể điều khiển mỗi nhịp được 8 Led.



Tìm hiểu bảng ma trận Led 8x8:


Hình vẽ cho thấy cách gắn các Led trên ma trận tạo bởi 8 hàng và 8 cột.



Sơ đồ dùng giải thích nguyên lý tắt mở các Led trên bảng ma trận 8x8.

 


Cách 1Mã quét xuất trên p2, p3, p0, mã hình hay chữ xuất trên cảng p1.

Sơ đồ mạch điện trên, một lần nữa, cho thấy, chúng ta cho nối 8 chân của các chân B của 8 transistor 2SA1015 và cảng p1. Vậy khi có một chân của cảng p1 xuất ra bit 0, nó sẽ làm transistor bão hòa, và lúc này dây anode chung sẽ được cho nối vào đường nguồn 5V. Ở đây, Bạn sẽ viết đoạn chương trình sao cho mỗi nhịp chỉ có một chân của cổng p1 xuất ra bit 0.

Bạn thấy khi xuất 8 bit ra trên cảng p2, 8 bit ở mức 1 ứng với mức volt cao dùng cấp cho chân B của 8 transistor 2SC1815, lúc này các transistor sẽ bị làm cho bão hòa, nó cho 8 cột trên đó có các chân Cathode nối masse, vậy 8 Led này sẽ phát sáng, trong mạch chúng ta hạn dòng với các điện trở 100 ohm. 

Tóm lại, muốn in hình hay các con chữ trên bảng Led ma trận này, Bạn phải làm được 2 việc sau:


Việc 1: Viết đoạn chương trình cấp mã quét.Tốc độ quét đủ nhanh để dùng hiện tượng lưu ảnh của mắt mà gây ra "nhầm lẫn" là trên bảng đèn đang có rất nhiều Led đang được cấp dòng phát sáng.



Viết đoạn chương trình để xuất mã quét bit 0 trên các chân B của các transistor pnp trên các cảng p1, để cho chữ trôi xuống.

 



Viết đoạn chương trình để xuất mã quét bit 0 trên các chân B của các transistor pnp trên các cảng p1, để cho chữ trôi lên.

 



Viết chương trình mã quét, cấp bit 1 cho các chân B của các transistor npn trên các cảng p2, p3, p0, để tạo hình dời ngang.



Việc 2: Viết các dãy mã 8 bit cho xuất mã hình trên các cảng p2, p3, p0 hay trên p1 để làm sáng các Led trên các cột, các mã 8 bit này viết theo kiểu hình hay dạng con chữ mà Bạn muốn nó hiện ra trên bảng đèn. Các dãy mã 8 bit này chúng ta sẽ cho cất trong các bảng, sau này sẽ dùng câu lệnh movc a, @a + dptr để lấy các dãy mã ra cho xuất trên các cảng của ic AT89C51.  


Sau đây là đoạn chương trình viết cho xuất mã quét trên p2, p3, p0 và mã hình xuất trên cảng p1.


h1b:  ;đặt tên nhãn dùng cho lệnh nhẩy        mov r0, #11111110b ; đặt trị khởi đầu dùng cho lệnh quay vòng        mov r1, #00h  ; đặt trị khởi đầu dùng cho lệnh lấy mã hình hay chữll1b:   mov a, r0  ; chuyển trị trong r0 vào thanh a        rr a   ; cho 8 bit trong a quay vòng qua hường phải        mov r0, a  ; chuyển trị trong thanh a ra r0        mov p1, r0  ; cho xuất trị trong thanh a ra cảng p1
        mov a, r1  ; chuyển trị trong thanh r1 vào thanh a        movc a, @a + dptr  ; truy lấy mã hình trong bảng cho cất vào thanh a        mov p2, a  ; cho xuất mã hình trên cảng p2

        inc r1  ; tăng trị trong thanh r1 lên +1 để lấy mã hình tiếp theo        mov a, r1  ; chuyển trị r1 vào thanh a        movc a, @a + dptr  ; truy lấy mã hình trong bảng cho cất vào thanh a        mov p3, a  
; cho xuất mã hình trên cảng p3

        inc r1  ; tăng trị trong thanh r1 lên +1 để lấy mã hình tiếp theo        mov a, r1   ; chuyển trị r1 và thanh a        movc a, @a + dptr  ; truy lấy mã hình trong bảng cho cất vào thanh a        mov p0, a  
; cho xuất mã hình trên cảng p0

        inc r1  ; lại tăng trị trong r1 lên +1        call del1   ; gọi chương trình làm chậm        mov p1, #11111111b  ; tắt 8 bit trên cảng p1        mov p0, #00h  ; tắt 8 bit trên cảng p0        mov p2, #00h  ; tắt 8 bit trên cảng p2        mov p3, #00h  ; tắt 8 bit trên cảng p3        call del1   ; gọi chương trình làm chậm        cjne r0, #11111110b, ll1b   ; so sánh mã quét để chọn hướng nhẩy        ret  
; quay lại sau lệnh call



Đoạn chương trình này viết giống như đoạn trên, điểm khác biệt là dùng câu lệnh rl a quay vòng theo hướng trái để đổi hướng chạy hình trên bảng ma trân 8x24. Mã quét đặt trên cảng p1, mã hình lần lượt cho lấy ra xuất trên cảng p2, rồi p3, rồi p0.


 h1c:   ; đặt tên nhãn dùng cho lệnh nhẩy        mov r0, #01111111b  ; đặt trị khởi đầu dùng cho lệnh quay vòng        mov r1, #00h  
ll1c:    mov a, r0  ; chuyển trị trong r0 vào thanh a        rl a   ; cho 8 bit trong thanh a quay vòng theo hướng trái        mov r0, a  ; chuyển trị trong thanh a vào thanh r0        mov p1, r0  
; cho xuất trị trong thanh r0 ra cảng p1
; lấy mã hình xuất trên cảng p2 
       mov a, r1
        movc a, @a + dptr
        mov p2, a
; lấy mã hình xuất trên cảng p3        inc r1
        mov a, r1
        movc a, @a + dptr
        mov p3, a
; lấy mã hình xuất trên cảng p0        inc r1
        mov a, r1
        movc a, @a + dptr
        mov p0, a
; tránh hình bị lem        inc r1
        call del1
        mov p1, #11111111b
        mov p0, #00h
        mov p2, #00h
        mov p3, #00h
        call del1
        cjne r0, #01111111b, ll1c
        ret  
; quay lại sau lệnh call


Một minh họa: Mã quét cho xuất trên các cảng p2 rồi p3 rồi p0. Mã hình xuất trên cảng p1.



Cho xuất mã quét nhịp nhanh trên các cảng p2, p3, p0 và cùng lúc cho xuất mã hình hay chữ trên cảng p1. Sau đây là đoạn chương trình viết cho trường hợp 2 dùng để hiện các hình và con chữ trên bảng ma trận 8x24.


Phân tích câu lệnh:


; Các câu lệnh cho xuất mã quét trên cảng p2, mã hình trên p1
h1:    ; đặt tên nhãn dùng cho lệnh nhẩy        mov r0, #00000001b  ; đặt trị khởi đầu cho thanh r0        mov r1, #00h   ; trả thanh r1 về trị 0ll1:    mov a, r0  ; cho chuyển trị trong r0 và thanh a        rr a   ; cho các 8 bit trong thanh a, quay vòng qua theo hướng bên phải        mov r0, a  ; chuyển trị có trong thanh a vào thanh r0        mov p2, r0 ; cho xuất trị trong r0 ra ở cảng p2        mov a, r1  ; bây giờ chuyển trị trong r1 vào thanh a        movc a, @a + dptr  ; lấy mã 8 bit trong bảng theo trị trong a, rồi cho cất vào thanh a        mov p1, a  ; cho xuất trị này trên cảng p1        inc r1  ; cho tăng trị trong r1 lên +1 để chuẩn bị lấy dòng mã tiếp theo         call del1 ; gọi chương trình làm châm để tạo mức sáng cho các led        mov p2, #00h  ; cho 8 chân của cảng p2 xuống mức 0 để tắt các Led.  
        mov p1, #0ffh  ; Cho 8 chân của cảng p1 lên mức 1 cũng để tắt Led        call del1  ; cho gọi trìng làm chậm để xóa các Led tránh lem         cjne r0, #00000001b, ll1  ; so sánh trị trong r0, nếu thấy chưa quay đủ 8 nhịp thì tiếp tục.

; Các câu lệnh cho xuất mã quét trên cảng p3, mã hình trên cảng p1
ll2:    ; đặt tên nhãn dùng cho lệnh nhẩy
        mov a, r0  ; lại chuyển trị trong r0 vào a 
        rr a   ; cho quay vòng 8 bit trong a theo hướng bên phải        mov r0, a  ; chuyển trị trong thanh a vào r0        mov p3, r0 ; cho xuất trị trong r0 ra trên cảng p3        mov a, r1  ; chuyển trị có trong r1 vào thanh a        movc a, @a + dptr   ; cho lấy mã trong bảng cất vào a 
        mov p1, a  ; cho trị trong a xuất ra trên cảng p1        inc r1  ; tăng trị trong r1 lên +1 để lấy dòng mã hình tiếp theo        call del1  ; gọi chương trình làm chậm        mov p3, #00h ; đặt 8 chân của cảng p3 xuống mức 0        mov p1, #0ffh  ; đặt 8 chân của cảng p1 lên mức 1        call del1  ; cho gọi chương trình làm chậm        cjne r0, #00000001b, ll2 
 ; so sánh trị trong r0 để định hướng nhẩy

; Các câu lệnh cho xuất mã quét trên cảng p0, mã hình trên cảng p1
ll3:     ; đặt tên nhãn dùng cho lệnh nhẩy
        mov a, r0  ; chuyển trị trong thanh a vào thanh r0        rr a   ; cho 8 bit trong thanh a quay vòng qua hướng phải        mov r0, a  ; chuyển trị trong thanh a trở lại r0        mov p0, r0 ; cho trị trong r0 xuất ra trên cảng p0        mov a, r1  ; chuyển trị trong r1 vào thanh a        movc a, @a + dptr  ; lấy mã 8 bit trong bảng cất vào thanh a        mov p1, a  ; cho trị trong a xuất ra trên cảng p1        inc r1  ; tăng trị trong r1 lên +1 để lấy dòng mã kế tiếp        call del1  ; gọi chương trình làm chậm        mov p0, #00h  ; đặt 8 chân của cảng p0 xuống mức 0        mov p1, #0ffh  ; đặt 8 bit của cảng p1 lên mức 1        call del1  ; gọi chương trình làm chậm        cjne r0, #00000001b, ll3  ; so sánh trị trong r0 để định hướng nhẩy        ret  ; quay lại sau lệnh call 


Cách 2:  Mã quét cho xuất trên p1và mã hình hay chữ cho xuất trên cảng p2, p3, p0


Một minh họa: Cho xuất mã quét nhanh trên cảng p1, các mã hình lần lượt cho xuất trên cảng p2, cảng p3, cảng p0





Phân tích câu lệnh:

h1b:      ; đặt tên nhãn cho lệnh nhẩy        mov r0, #11111110b   ; đặt trị khởi đầu cho nhịp quét        mov r1, #00h   ; trả trị khởi đầu cho r1 về 0ll1b:   mov a, r0  ; chuyển trị r0 vào thanh a        rr a   ; cho 8 bit trong a quay vòng qua phải        mov r0, a   ; chuyển trị trong a ra r0        mov p1, r0  ; cho xuất trị trong r0 ra cảng p1
        mov a, r1  ; chuyển trị r1 vào a        movc a, @a + dptr   ; lấy mã địa chỉ trong bảng cho cất vào thanh a        mov p2, a  ; cho xuất 8 bit mã hình ra trên cảng p2        inc r1 ; tăng trị trong r1 lên +1 
        mov a, r1 ; lại chuyển trị trong r1 vào thanh a        movc a, @a + dptr  ; lại lấy tiếp 8 bit mã hình cất vào thanh a        mov p3, a  ; cho xuất 8 bit mã hình ra trên cảng p3        inc r1  ; một lần nữa laị tăng trị trong r1 lên +1        mov a, r1   ; lại chuyển trị của r1 vào thanh a        movc a, @a + dptr  ; lại lấy tiếp 8 bit mã hình cho cất vào thanh a        mov p0, a  ; bây giờ cho xuất 8 bit mã hình ra trên cảng p0        inc r1  ; lại tăng trị r1 lên +1, chuẩn bị lấy tiếp các mã hình tiếp theo        call del1  ; gọi chương trình làm chậm        mov p1, #11111111b  ; xóa xung quét tránh lem hình        mov p0, #00h  ; xóa mã hình trên p0        mov p2, #00h  ; xóa mã hình trên p2        mov p3, #00h  ; xóa mã hình trên p3        call del1  ; gọi chương trình làm chậm        cjne r0, #11111110b, ll1b  ; so sánh trị trong a với mã quét khởi đầu để nhẩy.
        ret  
; quay lại sau lệnh call 




Phân tích cách viết chương trình nguồn tổng hợp:


 org 0000h    ; khởi đầu chương trìng nguồn        slan equ 20h   ; đặt tên slan "số lần" cho thanh 20hbd:     call xoa   ; gọi chương trình xóa       mov r3, #0  ; đặt trị 3 vào thanh r1        call h2                 ; cho gọi trình mở màn        mov p1, #11111111b ; xóa         mov dptr, #b_1          ; cho hiện chữ Phúcst:     mov r4, #10  ; nạp trị 10 vào thanh r4tta:    call h1   ; cho gọi chương trình có tên nhãn h1        djnz r4, tta  ; cho lập lại call h1 10 lần ;        inc dptr  ; tạm dừng dời chữ Phúc        inc r3  ; tăng trị r3 theo bước +1        cjne r3, #26, st  ; so sánh trị trong r3 để định hướng nhẩy        mov r3, #0   ; trả trị trong r3 về 0
        mov p1, #11111111b ; cho tắt 8 bit trên cảng p1        mov dptr, #b_2          ; cho hiện chữ Lanst2:    mov r4, #10
ttb:    call h1
        djnz r4, ttb
;        inc dptr
        inc r3
        cjne r3, #26, st2
        mov 3, #0
        call h4a        ; bỏ màn xuống        call h4          ;  kéo màn lên
        call xoa
        mov dptr, #b_2b         ; cho hiện chữ Nst21:   mov r4, #2
ttb1:   call h1
        djnz r4, ttb1
;        inc dptr
        inc r3
        cjne r3, #26, st21
        mov 3, #0
        call xoa
        mov dptr, #b_2ba        ; cho hiện chữ NHst21a:  mov r4, #2
ttb1a:  call h1
        djnz r4, ttb1a
;        inc dptr
        inc r3
        cjne r3, #26, st21a
        mov 3, #0
        call xoa
        mov dptr, #b_2bb        ; cho hiến chữ NHẬst21b:  mov r4, #2
ttb1b:  call h1
        djnz r4, ttb1b
;        inc dptr
        inc r3
        cjne r3, #26, st21b
        mov 3, #0
        call xoa
        mov dptr, #b_2bc        ; cho hiện chữ NHẬTst21c:  mov r4, #10
ttb1c:  call h1
        djnz r4, ttb1c
;        inc dptr
        inc r3
        cjne r3, #26, st21c
        mov 3, #0
        call xoa
        mov dptr, #b_2c          ; cho hiện chữ Tst22:   mov r4, #2
ttb2:   call h1
        djnz r4, ttb2
;        inc dptr
        inc r3
        cjne r3, #26, st22
        mov 3, #0
        call xoa
        mov dptr, #b_2ca          ; cho hiện chữ TÂst22a:  mov r4, #2
ttb2a:  call h1
        djnz r4, ttb2a
;        inc dptr
        inc r3
        cjne r3, #26, st22a
        mov 3, #0
        call xoa
        mov dptr, #b_2cb          ; cho hiện chữ TÂNst22b:  mov r4, #10
ttb2b:  call h1
        djnz r4, ttb2b
;        inc dptr
        inc r3
        cjne r3, #26, st22b
        mov 3, #0
        call h4a        ; hạ màn xuống        call h4         ; kéo màn lên
        call xoa
        mov dptr, #b_2a  ; cho hiện chữ Phúc Lan, chữ chạyst5a:   mov r4, #20
tte1:   call h1
        djnz r4, tte1
        inc dptr
        inc r3
        cjne r3, #54, st5a
        mov r3, #0
        call xoa
        mov slan, #3
ttuc:   mov dptr, #b_4          ; cho hiện chữ Chàost4:    mov r4, #10
ttd:    call h1
        djnz r4, ttd
        ;inc dptr
        inc r3
        cjne r3, #10, st4
        mov r3, #0
        mov p0, #00h
        mov p2, #00h
        mov p3, #00h
        call delay
        call xoa
        mov dptr, #b_4b         ; cho hiện chữ Bạnst4a:   mov r4, #10
ttd1:   call h1
        djnz r4, ttd1
        ;inc dptr
        inc r3
        cjne r3, #10, st4a
        mov r3, #0
        mov p0, #00h
        mov p2, #00h
        mov p3, #00h
        call delay
        djnz slan, ttuc
        call xoa
        mov dptr, #b_3  ; cho hiện chữ Tạp chí điện tử Việt Nam, chữ chạyst3:    mov r4, #15
ttc:    call h1
        djnz r4, ttc
        inc dptr
        inc r3
        cjne r3, #122, st3
        mov r3, #0
        call xoa
        mov dptr, #b_5  ; PHONE : 39235347, hiện số điện thoại, chữ chạyst5:    mov r4, #20
tte:    call h1
        djnz r4, tte
        inc dptr
        inc r3
        cjne r3, #79, st5
        mov r3, #0
        call h4a        ; hạ màn xuống        call h4         ; kéo màn lên
        call xoa
        mov dptr, #b_9  ; cho hiện hình hàng câyst9:    mov r4, #20
tti:    call h1
        djnz r4, tti
;        inc dptr
        inc r3
        cjne r3, #26, st9
        mov 3, #0
        call xoa
        mov slan, #14
lamt:   mov dptr, #b_10 ; hiện hình Logo 1        mov r3, #0
qlai:   mov r2, #12
llai:   call h1b
        djnz r2, llai
        inc dptr
        inc dptr
        inc dptr
        inc r3
        cjne r3, #16, qlai
        djnz slan, lamt
        call xoa
        mov dptr, #b_6  ; hiện hàng chữ CHUYEN BAN CAC LINH KIEN DIEN TU ABCDEFGHIJKLMNOPQst6:    mov r4, #8
ttf:    call h1
        djnz r4, ttf
        inc dptr
        inc r3
        cjne r3, #255, st6
        mov r3, #0
        call xoa
        mov dptr, #b_7  ; hiện hàng chữ RSTXYZUVWst7:    mov r4, #8
ttg:    call h1
        djnz r4, ttg
        inc dptr
        inc r3
        cjne r3, #52, st7
        mov r3, #0
        call xoa
        mov slan, #6
lamt1:  mov dptr, #b_11 ; cho hiện hình Logo 2        mov r3, #0
qlai1:  mov r2, #12
llai1:  call h1b
        djnz r2, llai1
        inc dptr
        inc dptr
        inc dptr
        inc r3
        cjne r3, #16, qlai1
        djnz slan, lamt1
        call xoa
        mov slan, #2
lamt2:  mov dptr, #b_12 ; cho hiện hình Logo 3 điện trở        mov r3, #0
qlai2:  mov r2, #50
llai2:  call h1b
        djnz r2, llai2
        inc dptr
        inc dptr
        inc dptr
        inc r3
        cjne r3, #16, qlai2
        djnz slan, lamt2
        call xoa
        mov slan, #10
lamt3:  mov dptr, #b_13   
; cho hiện hình Logo 4 giọt nước
        mov r3, #0
qlai3:  mov r2, #40
llai3:  call h1c
        djnz r2, llai3
        inc dptr
        inc dptr
        inc dptr
        inc r3
        cjne r3, #16, qlai3
        djnz slan, lamt3
        call xoa
        mov slan, #4
lamt4:  mov dptr, #b_14 ; cho hiện hình Logo 5        mov r3, #0
qlai4:  mov r2, #12
llai4:  call h1b
        djnz r2, llai4
        inc dptr
        inc dptr
        inc dptr
        inc r3
        cjne r3, #16, qlai4
        djnz slan, lamt4
        call xoa
        mov dptr, #b_8  ; hiện hình căn nhàst8:    mov r4, #30
tth:    call h1
        djnz r4, tth
;        inc dptr
        inc r3
        cjne r3, #26, st8
        mov 3, #0
        call h3         ; kéo màn lên        call delay
        call delay
        jmp bd

h2:                     ; trình mở màn        mov p1, #00h
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        call delay
        mov p3, #11100111b
        call delay
        mov p3, #11000011b
        call delay
        mov p3, #10000001b
        call delay
        mov p3, #00000000b
        call delay
        mov p2, #11111110b
        mov p0, #01111111b
        call delay
        mov p2, #11111100b
        mov p0, #00111111b
        call delay
        mov p2, #11111000b
        mov p0, #00011111b
        call delay
        mov p2, #11110000b
        mov p0, #00001111b
        call delay
        mov p2, #11100000b
        mov p0, #00000111b
        call delay
        mov p2, #11000000b
        mov p0, #00000011b
        call delay
        mov p2, #10000000b
        mov p0, #00000001b
        call delay
        mov p2, #00000000b
        mov p0, #00000000b
        call delay
        call delay
        ret

h3:                     ; trình kéo màn, sáng từ 2 bên vào        mov p1, #00h
        mov p0, #00h
        mov p2, #00h
        mov p3, #00h
        call delay
        mov p2, #10000000b
        mov p0, #00000001b
        call delay
        mov p2, #11000000b
        mov p0, #00000011b
        call delay
        mov p2, #11100000b
        mov p0, #00000111b
        call delay
        mov p2, #11110000b
        mov p0, #00001111b
        call delay
        mov p2, #11111000b
        mov p0, #00011111b
        call delay
        mov p2, #11111100b
        mov p0, #00111111b
        call delay
        mov p2, #11111110b
        mov p0, #01111111b
        call delay
        mov p2, #11111111b
        mov p0, #11111111b
        call delay
        mov p3, #10000001b
        call delay
        mov p3, #11000011b
        call delay
        mov p3, #11100111b
        call delay
        mov p3, #11111111b
        call delay
        call delay
        ret


h4:                     ; kéo màn lên.         mov p1, #00h
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        call delay
        call delay
        setb p1.7
        call delay
        setb p1.6
        call delay
        setb p1.5
        call delay
        setb p1.4
        call delay
        setb p1.3
        call delay
        setb p1.2
        call delay
        setb p1.1
        call delay
        setb p1.0
        call delay
        call delay
        ret

h4a:            ; hạ màn xuống        mov p1, #0ffh
        call delay
        call delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.0
        call delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.1
        call delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.2
        call delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.3
        call delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.4
        call  delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.5
        call delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.6
        call delay
        mov p0, #0ffh
        mov p2, #0ffh
        mov p3, #0ffh
        clr p1.7
        call delay
        call delay
        ret

; đoạn chương trình dùng để in hình trên ma trận 8x24, mã hình xuất trên cảng p1
h1:  ; đặt tên nhãn dùng cho lệnh nhẩy        mov r0, #00000001b  ; đặt trị khởi đầu cho lệnh quay vòng        mov r1, #00h ; đặt trị khởi đầu dùng để lấy mã hình trong bảng

ll1:    mov a, r0  ; chuyển trị trong r0 vào thanh a để dùng lệnh rr a        rr a  ;  cho 8 bit trong thanh a quay vòng theo hướng phải        mov r0, a  ; chuyển trị trong a trở lại thanh r0        mov p2, r0 
; cho xuất trị trong r0 ra cảng p2
 
        mov a, r1  ; chuyển trị trong r1 vào thanh a        movc a, @a + dptr  ; truy lấy mã hình trong bảng cất vào thanh a        mov p1, a  
; cho xuất mã hình trong a ra cảng p1

        inc r1 ; tăng trị trong r1 lên +1 để lấy mã hình tiếp theo        call del1  ; gọi trễ        mov p2, #00h  ; tắt 8 bit trên cảng p2        mov p1, #0ffh  ; tắt ́ bit trên cảng p1        call del1  ; gọi trễ        cjne r0, #00000001b, ll1  
; so sánh thanh r0 với mã quét để chọn hướng nhẩy

ll2:    mov a, r0  ; chuyển trị trong r0 vào thanh a        rr a   ; cho 8 bit trong thanh a quay vòng theo hướng phải        mov r0, a  ; chuyển trị trong a vào thanh r0        mov p3, r0  ; cho trị mã quét trong r0 xuất ra  ở cảng p3

        mov a, r1  ; chuyển trị trong thanh r1 vào thanh a        movc a, @a + dptr  ; truy lấy mã hình trong bảng cất vào thanh a         mov p1, a  
; cho xuất mã hình trong a ra cảng p1

        inc r1   ; tăng trị trong r1 lên +1 để lấy mã hình tiếp theo        call del1  ; gọi trễ        mov p3, #00h  ; tắt 8 bit trên cảng p3        mov p1, #0ffh  ; tắt 8 bit trên cảng p1        call del1   ; gọi trễ        cjne r0, #00000001b, ll2  
; so sánh r0 và mã quét để chọn hướng nhẩy

ll3:    mov a, r0   ; chuyển trị trong r0 vào thanh a        rr a  ; cho 8 bit trong thanh a quay vòng theo hướng phải        mov r0, a  ; chuyển trị trong thanh a trở lại thanh r0        mov p0, r0  ; cho xuất trị mã quét trong r0 ra cảng p0

        mov a, r1   ; chuyển trị trong thanh r1 vào thanh a        movc a, @a + dptr  ; truy lấy mã hình trong bảng cất vào thanh a        mov p1, a   
; cho xuất trị mã hình trong thanh a ra cảng p1

        inc r1  ; tăng trị trong r1 lên +1 để lấy mã hình tiếp theo         call del1  ; gọi trễ        mov p0, #00h   ; cho tắt 8 bit trên cảng p0        mov p1, #0ffh   ; cho tắt 8 bit trên cảng p1        call del1  ; gọi trễ        cjne r0, #00000001b, ll3  ; so sánh trị trong r0 với mã quét để định hướng nhẩy        ret  
; quay lại sau lệnh call


del1:
        mov r7, #3
v6:     mov r6, #50
        djnz r6, $
        djnz r7, v6
        ret

delay:
        mov r7, #5
v6a:    mov r6, #50
v5:     mov r5, #250
        djnz r5, $
        djnz r6, v5
        djnz r7, v6a
        ret
xoa:    mov p0, #00000000b
        mov p2, #00000000b
        mov p3, #00000000b
        mov p1, #11111111b
        ret

; đoạn chương trình cho xuất mã hình trên cảng p2, p3, p0h1b:
        mov r0, #11111110b
        mov r1, #00h
ll1b:   mov a, r0
        rr a
        mov r0, a
        mov p1, r0
        mov a, r1
        movc a, @a + dptr
        mov p2, a
        inc r1
        mov a, r1
        movc a, @a + dptr
        mov p3, a
        inc r1
        mov a, r1
        movc a, @a + dptr
        mov p0, a
        inc r1
        call del1
        mov p1, #11111111b
        mov p0, #00h
        mov p2, #00h
        mov p3, #00h
        call del1
        cjne r0, #11111110b, ll1b
        ret

; đoạn chương trình cho xuất mã hình trên cảng p2, p3, p0h1c:
        mov r0, #01111111b
        mov r1, #00h
ll1c:    mov a, r0
        rl a
        mov r0, a
        mov p1, r0
        mov a, r1
        movc a, @a + dptr
        mov p2, a
        inc r1
        mov a, r1
        movc a, @a + dptr
        mov p3, a
        inc r1
        mov a, r1
        movc a, @a + dptr
        mov p0, a
        inc r1
        call del1
        mov p1, #11111111b
        mov p0, #00h
        mov p2, #00h
        mov p3, #00h
        call del1
        cjne r0, #01111111b, ll1c
        ret

; các bảng dùng đặt mã hình và chữ do Bạn tự soạnb_1:    ; tạo chữ Phúcdb 11111111b
db 00000001b
db 00000001b
db 11101101b
db 11101101b
db 11110011b
db 11111111b
db 00000001b
db 00000001b
db 11101111b
db 11101111b
db 00000001b
db 11111111b
db 10000001b
db 00000001b
db 01111101b
db 01111110b
db 10000001b
db 11111111b
db 10000011b
db 00000001b
db 01111101b
db 01111101b
db 10011011b

b_2:  ; tạo chữ Landb 11111111b
db 11111111b
db 11111111b
db 00000001b
db 00000001b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000111b
db 00000011b
db 11011101b
db 11011011b
db 00000111b
db 11111111b
db 00000001b
db 00000011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_2a:      ; tạo chữ Phúc * Landb 11111111b
db 11111111b
db 00000001b
db 00000001b
db 11101101b
db 11101101b
db 11110011b
db 11111111b
db 00000001b
db 00000001b
db 11101111b
db 11101111b
db 00000001b
db 11111111b
db 10000001b
db 00000001b
db 01111101b
db 01111110b
db 10000001b
db 11111111b
db 10000011b
db 00000001b
db 01111101b
db 01111101b
db 10011011b
db 11111111b
db 11111111b
db 10111011b
db 11010111b
db 00000001b
db 11010111b
db 10111011b
db 11111111b
db 11111111b
db 00000001b
db 00000001b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000111b
db 00000011b
db 11011101b
db 11011011b
db 00000111b
db 11111111b
db 00000001b
db 00000011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_2b:            ; tạo chữ Ndb 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_2ba:            ; tạo chữ NHdb 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_2bb:            ; tạo chữ NHẬdb 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 00001111b
db 11010101b
db 01011010b
db 11010101b
db 00001111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_2bc:            ; tạo chữ NHẬTdb 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 00001111b
db 11010101b
db 01011010b
db 11010101b
db 00001111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
b_2c:            ; tạo chữ Tdb 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_2ca:            ; tạo chữ TÂdb 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11111111b
db 00001111b
db 11010101b
db 11011010b
db 11010101b
db 00001111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
b_2cb:            ; tạo chữ TÂNdb 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11111111b
db 00001111b
db 11010101b
db 11011010b
db 11010101b
db 00001111b
db 11111111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
b_3:     ; tạo chữ Tạp Chí Điện Tử Việt Namdb 11111111b
db 11111101b
db 11111101b
db 00000001b
db 11111101b
db 11111101b
db 11111111b
db 00001111b
db 11010111b
db 01011011b
db 11010111b
db 00001111b
db 11111111b
db 00000011b
db 11011011b
db 11011011b
db 11011011b
db 11100111b
db 11111111b
db 11011111b
db 11011111b
db 11011111b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00000011b
db 11101111b
db 11101111b
db 11101111b
db 00000011b
db 11111111b
db 00000011b
db 11111111b
db 11011101b
db 11011110b
db 11011111b
db 11111111b
db 00000001b
db 01101101b
db 01101101b
db 01111101b
db 10000011b
db 11111111b
db 00000010b
db 11111111b
db 00000111b
db 01010101b
db 01010110b
db 01010101b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11011111b
db 11011111b
db 11011111b
db 11111111b
db 11111101b
db 11111101b
db 00000001b
db 11111101b
db 11111101b
db 11111111b
db 10000111b
db 01111111b
db 01110010b
db 01111101b
db 10000111b
db 11111001b
db 11011111b
db 11011111b
db 11011111b
db 11111111b
db 11000001b
db 10111111b
db 01111111b
db 10111111b
db 11000001b
db 11111111b
db 00000010b
db 11111111b
db 00000111b
db 01010101b
db 01010110b
db 01010101b
db 01110111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 11101111b
db 11101111b
db 11101111b
db 11111111b
db 00000001b
db 11111011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11110111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_4:          ; tạo chữ Chàodb 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 00001111b
db 11010111b
db 11011011b
db 11010110b
db 00001101b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10000111b
db 11111111b

b_4b:     ; tạo chữ Bạndb 11111111b
db 11111111b
db 00000011b
db 01101011b
db 01101011b
db 01101011b
db 10010111b
db 11111111b
db 11111111b
db 00001111b
db 11010111b
db 01011011b
db 11010111b
db 00001111b
db 11111111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
b_5:    ; tạo chữ Phone: 39235347db 11111111b
db 11111111b
db 00000011b
db 11011011b
db 11011011b
db 11100111b
db 11111111b
db 00000011b
db 11101111b
db 11101111b
db 00000011b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 10000111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 00000011b
db 11111111b
db 00000011b
db 01101011b
db 01101011b
db 11111111b
db 11111111b
db 11101111b
db 11010111b
db 10111011b
db 11010111b
db 11010111b
db 10111011b
db 11010111b
db 11101111b
db 11111111b
db 11111111b
db 10111011b
db 01111101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 01110011b
db 01101101b
db 01101101b
db 01101101b
db 10000011b
db 11111111b
db 00111011b
db 01011101b
db 01011101b
db 01011101b
db 01100011b
db 11111111b
db 10111011b
db 01111101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 10110001b
db 01110101b
db 01110101b
db 01110101b
db 10001101b
db 11111111b
db 10111011b
db 01111101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 11001111b
db 11010111b
db 11011011b
db 00000001b
db 11011111b
db 11111111b
db 11111001b
db 11111101b
db 00001101b
db 11110101b
db 11111001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_6:    ; tạo chữ Chuyên Mua Bán Các Linh Kiện Điện Tửdb 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00000011b
db 11101111b
db 11101111b
db 11101111b
db 00000011b
db 11111111b
db 10000011b
db 01111111b
db 01111111b
db 01111111b
db 10000011b
db 11111111b
db 11110011b
db 11101111b
db 00011111b
db 11101111b
db 11110011b
db 11111111b
db 00000111b
db 01010101b
db 01010110b
db 01010101b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11110111b
db 00000011b
db 11111111b
db 10000011b
db 01111111b
db 01111111b
db 01111111b
db 10000011b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001111b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 01101011b
db 01101011b
db 01101011b
db 10010111b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001101b
db 11111110b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 00001111b
db 10110111b
db 10111011b
db 10110111b
db 00001101b
db 11111110b
db 10000111b
db 01111011b
db 01111011b
db 01111011b
db 10110111b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 01111111b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000101b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 00000011b
db 11011111b
db 11011111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 11011111b
db 11001111b
db 10110111b
db 01111111b
db 11111111b
db 00000101b
db 11111111b
db 00000111b
db 01010011b
db 01010101b
db 01010011b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 00000011b
db 01011011b
db 01011011b
db 01111011b
db 10000111b
db 11111111b
db 00000101b
db 11111111b
db 00000111b
db 01010011b
db 01010101b
db 01010011b
db 01110111b
db 11111111b
db 00000011b
db 11110111b
db 11101111b
db 11011111b
db 00000011b
db 11111111b
db 11111111b
db 11111111b
db 11111011b
db 11111011b
db 00000011b
db 11111011b
db 11111011b
db 11111111b
db 10000011b
db 01111111b
db 01110010b
db 01111101b
db 10000111b
db 11111001b
db 11111111b
db 11111111b
db 00000111b
db 11011011b
db 11011101b
db 11011011b
db 00000111b
db 11111111b
db 00000001b
db 01101101b
db 01101101b
db 01101101b
db 10010011b
db 11111111b
db 10000011b
db 01111101b
db 01111101b
db 01111101b
db 10111011b
db 11111111b
db 00000001b
db 01111101b
db 01111101b
db 01111101b
db 10000011b
db 11111111b
db 00000001b
db 01101101b
db 01101101b
db 01101101b
db 01111101b
db 11111111b
db 00000001b
db 11101101b
db 11101101b
db 11101101b
db 11111101b
db 11111111b
db 10000011b
db 01111101b
db 01101101b
db 01101101b
db 10001011b
db 11111111b
db 00000001b
db 11101111b
db 11101111b
db 11101111b
db 00000001b
db 11111111b
db 00000001b
db 11111111b
db 10111101b
db 01111101b
db 10000001b
db 11111101b
db 11111101b
db 11111111b
db 00000001b
db 11101111b
db 11010111b
db 10111011b
db 01111101b
db 11111111b
db 00000001b
db 01111111b
db 01111111b
db 01111111b
db 01111111b
db 11111111b
db 00000001b
db 11111011b
db 11110111b
db 11111011b
db 00000001b
db 11111111b
db 00000001b
db 11111011b
db 11110111b
db 11101111b
db 00000001b
db 11111111b
db 10000011b
db 01111101b
db 01111101b
db 01111101b
db 10000011b
db 11111111b
db 00000001b
db 11101101b
db 11101101b
db 11101101b
db 11110011b
db 11111111b
db 10000011b
db 01111101b
db 01111101b
db 01011101b
db 10000011b
db 01111111b
db 11111111b

b_7:   ; tạo mẫu các con chữdb 11111111b
db 00000001b
db 11101101b
db 11001101b
db 10101101b
db 01110011b
db 11111111b
db 10011011b
db 01110101b
db 01101101b
db 10011011b
db 11111111b
db 11111101b
db 11111101b
db 00000001b
db 11111101b
db 11111101b
db 11111111b
db 10000001b
db 01111111b
db 01111111b
db 01111111b
db 10000001b
db 11111111b
db 11000001b
db 10111111b
db 01111111b
db 10111111b
db 11000001b
db 11111111b
db 10000001b
db 01111111b
db 10011111b
db 01111111b
db 10000001b
db 11111111b
db 01111101b
db 11011011b
db 11110111b
db 11011011b
db 01111101b
db 11111111b
db 11111001b
db 11110111b
db 00001111b
db 11110111b
db 11111001b
db 11111111b
db 00111101b
db 01011101b
db 01101101b
db 01110101b
db 01111001b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_8:   ; tạo hình căn nhà và câydb 01110011b
db 00001101b
db 01110011b
db 00000111b
db 01111011b
db 01000101b
db 01010110b
db 01000100b
db 01111000b
db 00000000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110001b
db 00000011b
db 00110111b
db 00011111b
db 00001111b
db 00111001b
db 00000110b
db 00111001b
db 01111111b

b_9:   ; tạo hình rừng câydb 00111111b
db 01111001b
db 00000110b
db 01111001b
db 00111111b
db 00000111b
db 00001111b
db 00111111b
db 00111111b
db 00000011b
db 00011111b
db 00000011b
db 00000000b
db 00000111b
db 00011111b
db 00111111b
db 01110001b
db 00000000b
db 01110001b
db 01111111b
db 00111111b
db 00011111b
db 00000111b
db 00011111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

b_10:   ; tạo hình hoa văndb 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 01000100b,01000100b,01000100b
db 00101000b,00101000b,00101000b
db 01000100b,01000100b,01000100b
db 10010010b,10010010b,10010010b
db 01000100b,01000100b,01000100b
db 00101000b,00101000b,00101000b
db 01000100b,01000100b,01000100b
db 00101000b,00101000b,00101000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b

b_11:   ; tạo hình các mũi têndb 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00010000b,00001000b,00000100b
db 00111000b,00011100b,00001110b
db 11111110b,01111111b,00111111b
db 01111100b,00111110b,00011111b
db 01000100b,00100010b,00010001b
db 11000110b,01100011b,00110001b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b

b_12:   ; tạo hình các ký hiệu điện tửdb 11111111b,11111111b,11111111b
db 10000000b,00001100b,11000001b
db 10000000b,00001110b,11000001b
db 10000001b,11111111b,11111001b
db 10000000b,00001110b,11000001b
db 10000000b,00001100b,11000001b
db 10000000b,00001000b,00000001b
db 11111111b,11111111b,11111111b
db 00000000b,00000000b,00000000b
db 11111111b,11111111b,11111111b
db 10000000b,00000000b,00000001b
db 10000010b,00100010b,00000001b
db 10011101b,01010101b,01110001b
db 10000000b,10001000b,10000001b
db 10000000b,00000000b,00000001b
db 11111111b,11111111b,11111111b
db 00000000b,00000000b,00000000b
db 00000000b,01001000b,00000000b
db 00000000b,01001000b,00000000b
db 00011111b,11001111b,11100000b
db 00000000b,01001000b,00000000b
db 00000000b,01001000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b

b_13:     ; tạo hình các bông hoadb 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00011100b,00011100b,00011100b
db 00111110b,00111110b,00111110b
db 00011100b,00011100b,00011100b
db 10001001b,10001001b,10001001b
db 01001010b,01001010b,01001010b
db 00101100b,00101100b,00101100b
db 00011000b,00011000b,00011000b
db 11111111b,11111111b,11111111b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b

b_14:   ; tạo hình các giọt nướcdb 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00100000b,10000010b,00001000b
db 01110001b,11000111b,00011100b
db 11111011b,11101111b,10111110b
db 01110001b,11000111b,00011100b
db 00000100b,00010000b,01000000b
db 00001110b,00111000b,11100000b
db 00011111b,01111101b,11110000b
db 00001110b,00111000b,11100000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
end




Nói rõ hơn: Cách tạo hình trên bảng đèn ma trận 8x24 



❶ Hình vẽ dưới đây cho thấy cách Bạn tạo ra khung mã hình dùng bit 0 để tạo hình.


 

Muốn in hình ra trên bảng ma trận 8x24, trước hết Bạn hãy đặt tên bảng, rồi tạo khung hình tương ứng với bảng đèn. Một thí dụ:

b_8:  ; đặt tên nhãn của bảng mã hìnhdb 01110011b
db 00001101b
db 01110011b
db 00000111b
db 01111011b
db 01000101b
db 01010110b
db 01000100b
db 01111000b
db 00000000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110000b
db 01110001b
db 00000011b
db 00110111b
db 00011111b
db 00001111b
db 00111001b
db 00000110b
db 00111001b
db 01111111b

Trên đây là 24 dòng mã 8 bit viết ở dạng hệ cơ 2. Trong đó ứng với vị trí bit 0 sẽ làm cho Led sáng. Hình trên cho thấy chúng ta đã dùng bit 0 để tạo ra hình một ngôi nhà trên bảng đèn. Tóm lại, muốn Led nào sáng, chúng ta đặt vào số 0, và số 1 sẽ làm tắt Led. Kết quả chúng ta sẽ có hình hiện ra như sau:


Bạn có thể viết gọn lại bảng mã hình trên nếu dùng mã 8 bit viết ở dạng hệ 16, kết quả chúng ta có bảng mã hinh trên như sau:



b_8:  ; đặt tên nhãn của bảng mã hìnhdb 0111 0011b   ; 73h
db 0000 1101b   ; 0dh
db 0111 0011b   ; 73h
db 0000 0111b   ; 07h
db 0111 1011b   ; 7bh
db 0100 0101b   ; 45h
db 0100110b   ; 56h
db 0100 0100b   ; 44h
db 0111 1000b   ; 78h
db 0000 0000b   ; 00h
db 0111 0000b   ; 70h
db 0111 0000b   ; 70h
db 0111 0000b   ; 70h
db 0111 0000b   ; 70h 
db 0111 0000b   ; 70h
db 0111 0001b   ; 71h
db 0000 0011b   ; 03h
db 0011 0111b   ; 37h
db 0001 1111b   ; 1fh
db 0000 1111b   ; 0fh
db 0011 1001b   ; 39h
db 0000 0110b   ; 06h
db 0011 1001b   ; 39h
db 0111 1111b   ; 7fh


Ghi nhận: Viết mã hình ở dạng hệ 16, tuy ngắn gọn hơn, nhưng Bạn sẽ không nhìn thấy trong các dòng mã này nó là hình gì và khi hình hay chữ bị sai rất khó sửa lai cho đúng. 

b_8:  ; đặt tên nhãn của bảng mã hìnhdb 73h, 0dh, 73h, 07h, 7bh, 45h, 56h, 44h
db 78h, 00h, 70h, 70h, 70h, 70h, 70h, 71h
db 03h, 37h, 1fh, 0fh, 39h, 06h, 39h, 7fh



Dưới đây là một khung hình trắng, vì toàn bit 1 (tắt Led), muốn tạo hình trên các điểm Led của ma trận 8x24, Bạn dùng bit 0.

b_vkh:        ; đặt tên nhãn cho bảng    db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b  ;
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b  ;
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b
db 11111111b

  

❷ Hình vẽ dưới đây cho thấy cách Bạn dùng bit 1 để tạo hình



 


Bạn có thể đặt mã quét trên cảng p1, và cho xuất mã hình trên các cảng p2, p3, p0. Lúc này ứng với bit 1 sẽ làm cho Led sáng. Bạn xem một thí dụ, minh họa bằng hình sau:


 

Như vậy khung để tạo hình cho kiểu quét này sẽ như sau:

 b_14:  
; đặt tên nhãn để dùng lệnh mov dptr, #b_14
; câu lệnh này cho đặt bảng vào thanh địa chỉ dptr.db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b
db 00000000b,00000000b,00000000b

Trên đây là một khung mẫu trắng vì toàn là bit 0, nếu Bạn muốn có hình gì hiện trên ma trận 8x24, thì hãy dùng bit 1 làm sáng các Led ở các vị trí tương ứng. Bạn cũng có thể viết các mã hình 8 bit này ở dạng hệ cơ 16, lúc đó bảng sẽ ngắn gọn hơn, nhưng Bạn sẽ không thấy được hình gì trên các dòng mã này, và khi cần sửa đổi sẽ rất khó khăn.


Ý kiến chúng tôi:


 


 


Nếu Bạn muốn làm thực hành bài viết trên, đầu tiên Bạn phải có bảng đèn ma trận 8x24 như hình trên, Bạn có thể mua bản mạch in ở cửa hàng Phúc Lan Shop, sau đó gắn Led lên bản mạch in và kết nối với ic lập trình AT89C52 (dùng ic AT89C52 có bộ nhớ 8K lớn hơn ic AT89C51 chỉ có 4K). Tiếp theo Bạn cắt đoạn chương trình nguồn trên và dán vào vùng biên soạn của MIDE-51 (xem hình bên dưới), đặt cho nó một cái tên với họ là .asm, rồi gõ phím F9 để biên dịch file .asm ra file .hex, bây giờ Bạn cho nạp đoạn chương trình mã hệ 16 này vào bộ nhớ EEPROM của ic lập trình AT89C52, gắn vào board test, Bạn sẽ thấy hình và dòng chữ mà Bạn soạn trong các khung hình xuất hiện trên bảng đèn. Thích không? 






Sau khi biên dịch xong, chúng ta có file .hex như sau:

:1000000012043B7B001202347590FF9004A07C0A1E
:100010001203D5DCFB0BBB1AF57B007590FF900437
:10002000B87C0A1203D5DCFB0BBB1AF57503001272
:10003000035812031A12043B90051B7C021203D5CD
:10004000DCFB0BBB1AF575030012043B9005347CF6
:10005000021203D5DCFB0BBB1AF575030012043B3F
:1000600090054D7C021203D5DCFB0BBB1AF5750322
:100070000012043B9005667C0A1203D5DCFB0BBB27
:100080001AF575030012043B90057F7C021203D51C
:10009000DCFB0BBB1AF575030012043B9005987C42
:1000A000021203D5DCFB0BBB1AF575030012043BEF
:1000B0009005B17C0A1203D5DCFB0BBB1AF5750366
:1000C0000012035812031A12043B9004D07C14123D
:1000D00003D5DCFBA30BBB36F47B0012043B75207D
:1000E0000390065D7C0A1203D5DCFB0BBB0AF57B93
:1000F0000075800075A00075B00012042E12043B3C
:100100009006757C0A1203D5DCFB0BBB0AF57B005D
:1001100075800075A00075B00012042ED520C212A3
:10012000043B9005CA7C0F1203D5DCFBA30BBB7A02
:10013000F47B0012043B90068D7C141203D5DCFB8B
:10014000A30BBB4FF47B0012035812031A12043B9B
:100150009008747C141203D5DCFB0BBB1AF57503F5
:100160000012043B75200E9008A17B007A0C12044B
:1001700048DAFBA3A3A30BBB10F2D520EA12043B81
:100180009006F97C081203D5DCFBA30BBBFFF47BC4
:100190000012043B90080E7C081203D5DCFBA30B75
:1001A000BB34F47B0012043B7520069008E97B0009
:1001B0007A0C120448DAFBA3A3A30BBB10F2D520E0
:1001C000EA12043B7520029009317B007A32120456
:1001D00048DAFBA3A3A30BBB10F2D520EA12043B21
:1001E00075200A9009797B007A28120474DAFBA33F
:1001F000A3A30BBB10F2D520EA12043B7520049098
:1002000009C17B007A0C120448DAFBA3A3A30BBB41
:1002100010F2D520EA12043B90085C7C1E1203D534
:10022000DCFB0BBB1AF57503001202A712042E1299
:10023000042E01007590007580FF75A0FF75B0FF5A
:1002400012042E75B0E712042E75B0C312042E7579
:10025000B08112042E75B00012042E75A0FE7580B8
:100260007F12042E75A0FC75803F12042E75A0F835
:1002700075801F12042E75A0F075800F12042E7564
:10028000A0E075800712042E75A0C07580031204CB
:100290002E75A08075800112042E75A00075800057
:1002A00012042E12042E2275900075800075A00095
:1002B00075B00012042E75A08075800112042E7591
:1002C000A0C075800312042E75A0E075800712048B
:1002D0002E75A0F075800F12042E75A0F875801F82
:1002E00012042E75A0FC75803F12042E75A0FE75B9
:1002F000807F12042E75A0FF7580FF12042E75B04A
:100300008112042E75B0C312042E75B0E712042EAC
:1003100075B0FF12042E12042E227590007580FF16
:1003200075A0FF75B0FF12042E12042ED29712048E
:100330002ED29612042ED29512042ED29412042E8E
:10034000D29312042ED29212042ED29112042ED2E3
:100350009012042E12042E227590FF12042E120405
:100360002E7580FF75A0FF75B0FFC29012042E7528
:1003700080FF75A0FF75B0FFC29112042E7580FF3B
:1003800075A0FF75B0FFC29212042E7580FF75A094
:10039000FF75B0FFC29312042E7580FF75A0FF7524
:1003A000B0FFC29412042E7580FF75A0FF75B0FFD8
:1003B000C29512042E7580FF75A0FF75B0FFC2961E
:1003C00012042E7580FF75A0FF75B0FFC29712044E
:1003D0002E12042E2278017900E803F888A0E99310
:1003E000F5900912042575A0007590FF120425B838
:1003F00001E7E803F888B0E993F590091204257540
:10040000B0007590FF120425B801E7E803F8888072
:10041000E993F590091204257580007590FF120488
:1004200025B801E7227F037E32DEFEDFFA227F0558
:100430007E327DFADDFEDEFADFF62275800075A0E1
:100440000075B0007590FF2278FE7900E803F88807
:1004500090E993F5A009E993F5B009E993F58009CE
:1004600091257590FF75800075A00075B0009125ED
:10047000B8FED922787F7900E823F88890E993F5CF
:10048000A009E993F5B009E993F5800991257590E4
:10049000FF75800075A00075B0009125B87FD92246
:1004A000FF0101EDEDF3FF0101EFEF01FF81017DA0
:1004B0007E81FF83017D7D9BFFFFFF01017F7F7FA9
:1004C000FF0703DDDB07FF0103F7EF01FFFFFFFF7E
:1004D000FFFF0101EDEDF3FF0101EFEF01FF8101EE
:1004E0007D7E81FF83017D7D9BFFFFBBD701D7BB55
:1004F000FFFF01017F7F7FFF0703DDDB07FF0103B4
:10050000F7EF01FFFFFFFFFFFFFFFFFFFFFFFFFF11
:10051000FFFFFFFFFFFFFFFFFFFFFFFF03F7EFDF1F
:1005200003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7
:10053000FFFFFFFFFF03F7EFDF03FF03DFDFDF0353
:10054000FFFFFFFFFFFFFFFFFFFFFFFFFFFF03F7BF
:10055000EFDF03FF03DFDFDF03FF0FD55AD50FFF08
:10056000FFFFFFFFFFFFFF03F7EFDF03FF03DFDF07
:10057000DF03FF0FD55AD50FFFFBFB03FBFBFFFF8C
:10058000FFFFFBFB03FBFBFFFFFFFFFFFFFFFFFF87
:10059000FFFFFFFFFFFFFFFFFFFFFFFBFB03FBFB77
:1005A000FFFF0FD5DAD50FFFFFFFFFFFFFFFFFFFB4
:1005B000FFFFFFFFFBFB03FBFBFFFF0FD5DAD50FB0
:1005C000FFFF03F7EFDF03FFFFFFFFFDFD01FDFD71
:1005D000FF0FD75BD70FFF03DBDBDBE7FFDFDFDFDF
:1005E000FF877B7B7BB7FF03EFEFEF03FF03FFDDAD
:1005F000DEDFFF016D6D7D83FF02FF0755565577E6
:10060000FF03F7EFDF03FFDFDFDFFFFDFD01FDFD90
:10061000FF877F727D87F9DFDFDFFFC1BF7FBFC14B
:10062000FF02FF0755565577FFFBFB03FBFBFFEF70
:10063000EFEFFF01FBF7EF01FF0FB7BBB70FFF03B2
:10064000F7EFF703FFFFFFFFFFFFFFFFFFFFFFFFD6
:10065000FFFFFFFFFFFFFFFFFFFFFFFFFF877B7B2A
:100660007BB7FF03DFDFDF03FF0FD7DBD60DFF878D
:100670007B7B7B87FFFFFF036B6B6B97FFFF0FD7C6
:100680005BD70FFFFF03F7EFDF03FFFFFFFFFF0362
:10069000DBDBE7FF03EFEF03FF877B7B87FF03F7DE
:1006A000EF03FF036B6BFFFFEFD7BBD7D7BBD7EFD2
:1006B000FFFFBB7D6D6D93FF736D6D6D83FF3B5DC4
:1006C0005D5D63FFBB7D6D6D93FFB17575758DFFCE
:1006D000BB7D6D6D93FFCFD7DB01DFFFF9FD0DF51E
:1006E000F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:1006F000FFFFFFFFFFFFFFFFFF877B7B7BB7FF0352
:10070000EFEFEF03FF837F7F7F83FFF3EF1FEFF3B5
:10071000FF0755565577FF03F7EFDF03FFFFFF0392
:10072000F7EFF703FF837F7F7F83FF0FB7BBB70F21
:10073000FFFFFF036B6B6B97FF0FB7BBB70DFE039C
:10074000F7EFDF03FFFFFF877B7B7BB7FF0FB7BBB5
:10075000B70DFE877B7B7BB7FFFFFF037F7F7F7F2C
:10076000FF05FF03F7EFDF03FF03DFDFDF03FFFF1B
:10077000FF03DFCFB77FFF05FF0753555377FF0315
:10078000F7EFDF03FFFFFF035B5B7B87FF05FF07DF
:1007900053555377FF03F7EFDF03FFFFFFFBFB0327
:1007A000FBFBFF837F727D87F9FFFF07DBDDDB0744
:1007B000FF016D6D6D93FF837D7D7DBBFF017D7DB1
:1007C0007D83FF016D6D6D7DFF01EDEDEDFDFF831F
:1007D0007D6D6D8BFF01EFEFEF01FF01FFBD7D81AF
:1007E000FDFDFF01EFD7BB7DFF017F7F7F7FFF0115
:1007F000FBF7FB01FF01FBF7EF01FF837D7D7D83AD
:10080000FF01EDEDEDF3FF837D7D5D837FFFFF0154
:10081000EDCDAD73FF9B756D9BFFFDFD01FDFDFFF4
:10082000817F7F7F81FFC1BF7FBFC1FF817F9F7FAE
:1008300081FF7DDBF7DB7DFFF9F70FF7F9FF3D5D0A
:100840006D7579FFFFFFFFFFFFFFFFFFFFFFFFFF5A
:10085000FFFFFFFFFFFFFFFFFFFFFFFF730D7307AA
:100860007B455644780070707070707103371F0FAD
:100870003906397F3F7906793F070F3F3F031F0352
:1008800000071F3F7100717F3F1F071FFFFFFFFF22
:10089000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68
:1008A000FF00000000000000000000000000000049
:1008B00000000000000000000044444428282844B0
:1008C000444492929244444428282844444428288A
:1008D00028000000000000000000000000000000F0
:1008E0000000000000000000000000000000000008
:1008F00000000000000000000000000000000000F8
:1009000000000000000000100804381C0EFE7F3FAD
:100910007C3E1F442211C66331000000000000002D
:1009200000000000000000000000000000000000C7
:1009300000FFFFFF800CC1800EC181FFF9800EC156
:10094000800CC1800801FFFFFF000000FFFFFF8057
:1009500000018222019D5571808881800001FFFF86
:10096000FF0000000048000048001FCFE0004800E2
:10097000004800000000000000000000000000002F
:100980000000000000000000000000000000000067
:10099000001C1C1C3E3E3E1C1C1C8989894A4A4A7C
:1009A0002C2C2C181818FFFFFF000000000000007E
:1009B0000000000000000000000000000000000037
:1009C0000000000000000000000000000000000027
:1009D00000000000000000000020820871C71CFB1E
:1009E000EFBE71C71C0410400E38E01F7DF00E38BA
:1009F000E000000000000000000000000000000017
:090A0000000000000000000000ED
:00000001FF





Tạm kết: Qua phần trình bày trên, Bạn thấy dùng ic lập trình AT89C51, chúng ta đã có thể điều khiển được sự tắt sáng của bất kỳ con Led nào trên bảng đèn, điều này cho chúng ta một sự thích thú khó tả, cũng qua bài viết này tôi nghĩ Bạn đã làm quen với cách dùng bàng Led ma trận để làm hiện hình và cho chạy chữ, đây là một đề tài rất rất hấp dẫn, khi có dịp chúng tôi sẽ trở lại đề tài này với một mức độ rộng hơn, cao hơn. Mong Bạn thích bài viết này.

0 comments:

Post a Comment

domain, domain name, premium domain name for sales

Popular Posts