Giới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụngGiới thiệu ma trận chi tiếp lập trình ứng dụng
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 1: Mã 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 [...]... 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... slan equ 20h ; đặt tên slan "số lần" cho thanh 20h bd: 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úc st: mov r4, #10 ; nạp trị 10 vào thanh r4 tta: 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ị... 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... 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:... 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... 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... +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... 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... đoạn chương trình cho xuất mã hình trên cảng p2, p3, p0 h1b: 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... 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 . 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. 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. 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