Từ yêu cầu của môn học vi điều khiển và thực tiễn như trên chúng em quyết định chọn đề tài cho bài tập lớn môn học là : ‘‘ Thiết kế mô hình bảng led điện tử dùng 01 ma trận led đa sắc ”
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA ĐIỆN TỬ
ĐỒ ÁN MÔN HỌC
THIẾT KẾ MÔ HÌNH BẢNG LED ĐIỆN
TỬ DÙNG 1 MA TRẬN LED ĐA SẮC
GVHD : Nguyễn Anh Dũng
Sinh viên thực hiện : Nguyễn Hoàng Bính
Nguyễn Duy Thụy
Nguyễn Hữu Hùng
Trang 2LỜI NÓI ĐẦU
Ngày nay khi nhu cầu về thông tin quảng cáo rất lớn ,việc áp dụng các phương tiện kĩ thuật mới vào các lĩnh vực trên là rất cần thiết
Khi các bạn đến các nơi công cộng ,bạn dễ dàng bắt gặp những áp phích quảng cáo điện tử chạy theo các hướng khác nhau với nhiều hình ảnh
và màu sắc ấn tượng
Trong nhiều hình thức đa dạng của Thông tin quảng cáo như: báo, đài, tivi, tờ rơi, áp phích thì việc dùng bảng thông tin điện tử là một cách đơn giản và hiệu quả để quảng cáo Chúng ta bắt gặp rất nhiều bảng thông tin như vậy trong thực tế Khi đi vào một hiệu sách, bạn có thể biết được hiệu sách đó bán loại sách gì, giá cả ra sao là nhờ vào bảng đèn quang báo rất bắt mắt trước cửa hiệu Hoặc khi vào sân bay, bạn biết được giờ giấc các chuyến bay, các thông báo ngắn của phi trường, cũng là nhờ vào quang báo Và khi
đi trên đường phố lúc về đêm, bạn sẽ bắt gặp cùng với ánh đèn màu là rất nhiều các bảng quang báo lớn với các hình ảnh sinh động như -ly bia Tiger đang trào bọt, hay các hình ảnh, logo hiện lên với đủ kiểu (từ trên xuống, từ trái sang)
Từ yêu cầu của môn học vi điều khiển và thực tiễn như trên chúng em quyết định chọn đề tài cho bài tập lớn môn học là :
‘‘ Thiết kế mô hình bảng led điện tử dùng 01 ma trận led đa sắc ”
- Khi đề tài được mở rộng thì sẽ có khả năng ứng dụng thực tiễn rất lớn Nói tóm lại trong thời đại bùng nổ thông tin hiện nay ,khả năng ứng dụng và tiềm lực phát triển của hệ thông này là rất lớn ,đặc biệt là ở Việt Nam ,các hệ thông như vậy còn rất ít, hầu hết được nhập từ nước ngoài với giá thành cao Trong quá trình thực hiện đề tài chúng em đã nhận được sự chỉ bảo, hướng dẫn của thầy giáo Nguyễn Anh Dũng Chúng em xin chân thành cảm
ơn thầy và mong nhận được lời góp ý để đề tài ngày càng hoàn thiện hơn
Trang 3PHẦN I CƠ SỞ LÍ THUYẾT
Dựa trên nguyên tắc như quét màn hình, ta có thể thực hiện việc hiển thị ma trận đèn bằng cách quét theo hàng và quét theo cột Mỗi Led trên ma trận LED có thể coi như một điểm ảnh Điểm ảnh này sẽ được xác định trạng thái nhờ dữ liệu đưa ra từ bộ vi điều khiển 89S52.
Như vậy tại mỗi thời điểm chỉ có trạng thái của một điểm ảnh được xác định Tuy nhiên khi xác định địa chỉ và trạng thái của điểm ảnh tiếp theo thì các điểm ảnh còn lại sẽ chuyển về trạng thái tắt (nếu LED đang sáng thì
sẽ tắt dần) Vì thế để hiển thị được toàn bộ hình ảnh của ma trận đèn, ta có thể quét ma trận nhiều lần với tốc độ quét rất lớn, lớn hơn nhiều lần thời gian kịp tắt của đèn Mắt người chỉ nhận biết được tối đa 24 hình/s do đó nếu tốc độ quét rất lớn thì sẽ không nhận ra được sự thay đổi nhỏ của đèn
mà sẽ thấy được toàn bộ hình ảnh cần hiển thị
- Để thực hiện được quét hàng và quét cột thì ma trận LED được thiết kế như sau:
Một ma trận LED 8x8 đa sắc bao gồm 64 điểm sàng được bố trí thành 8 hàng x 8 cột , trong đó mỗi điểm sáng gồm một LED màu xanh lục + một LED màu đỏ Điểm sáng hiển thị màu xanh nếu LED đỏ tắt ,màu đỏ nếu LED xanh tắt ,màu vàng nếu cả hai LED sáng và tắt nếu cả hai LED cùng tắt
Trong cùng một hàng ,các catot của các LED màu xanh được nối với nhau để tạo thành một đường dây hàng thứ nhất và các catot của các LED màu đỏ được nối với nhau để tạo thành một đường dây thứ hai Các anot của mười sáu LED trong cùng một cột được nối với nhau để tạo thành một đường dây cột Như vậy muốn một LED trong ma trận sáng ta cần cấp nguồn cho LED vào dường dây hàng và đường dây cột tương ứng với LED đó
Trang 4Ta có thể mô phỏng một ma trận Led đơn giản 4x4 như sau:
Trạng thái của một LED sẽ được quyết định bởi tín hiệu điện áp đi vào đồng thời cả 2 chân Ví dụ để LED sáng thì điện áp 5V phải đưa vào chân dương
và chân âm phải được nối đất, LED sẽ tắt khi không có điện áp đưa vào chân dương
Trong đề tài này em sử dụng 1 bảng LED 8x8 Mỗi ký tự sẽ được hiển thị trong một khung cỡ 5x7 Dưới đây là nguyên tắc quét và hiển thị một ký tự (giả thiết là chữ A) trên khung hình 5x7
- Để ma trận có thể sáng như hình vẽ :
Hàng 1
3 2
Cột 1 2 3 4
Trang 5Để hiển thị ký tự lên bảng LED, ở đây ta dùng phương pháp quét cột
và xuất dữ liệu hàng Quá trình quét cột là ta gửi tín hiệu cho phép đến từng cột trong từng thời điểm Cùng lúc đó ta gửi dữ liệu hàng đến 7 hàng Trong
đề tài này tín hiệu cho phép cột là mức logic ‘1’, và dữ liệu hàng tương ứng
là mức ‘0’ hay ‘1’ của từng hàng, mức ‘0’ ứng với LED sáng (on) và mức
‘1’ là tắt (off)
Đầu tiên ta đưa dữ liệu cần hiển thị đến 7 hàng, ví dụ 11100110
Kích hoạt cột thứ nhất và các LED tương ứng sẽ sáng Tạo một thời gian trễ, sau đó tắt cột thứ nhất
Gửi tiếp giá trị dữ liệu 7 hàng của cột thứ 2, kích hoạt cột thứ 2, tạo trễ và lại tắt cột thứ 2
Quá trình quét đó cứ tiếp diễn cho đến khi quét hết 16 cột của bảng LED Việc quét hiển thị này diễn ra trong thời gian rất ngắn, cỡ vài chục mili giây, ta sẽ thấy hình ảnh hay chữ hiển thị trên bảng LED Tuy rằng trong mỗi thời điểm chỉ có một cột được sáng nhưng do thời gian quét rất nhanh và do hiện tương lưu ảnh trong võng mạc của mắt nên ta thấy hình ảnh xuất hiện liên tục Tần số quét cần phải đảm bảo sao cho đủ hoặc lớn hơn 24hình/s Thường ta chọn tần số quét từ 40Hz đến 100Hz hoặc có thể lớn hơn
Thực hiện quét dòng và cột
- Chọn cột 1 đưa điện áp cột 1 về 0.Sau đó chọn và quét lần lượt tất cả các hàng 1,2,3,4,5,6,7,8.Ở đây các hàng tương ứng với cột 1 đều tắt nên đưa điện áp vào các hàng này là 0V
- Chọn cột 2 đưa điện áp cột 2 về 0.Sau đó chọn và quét lần lượt tất cả các hàng 1,2,3,4,5,6,7,8:
+ Đèn 1 tắt Điện áp đưa vào hàng 1 là 0V
+ Đèn 2 tắt Điện áp đưa vào hàng 2 là 0V
+ Đèn 3 sáng Điện áp đưa vào hàng 3 là 0V
+ Đèn 4 sáng Điện áp đưa vào hàng 4 là 5V
Trang 6+ Đèn 5 sáng Điện áp đưa vào hàng 5 là 5V.
+ Đèn 6 sáng Điện áp đưa vào hàng 6 là 5V
+ Đèn 7 sáng Điện áp đưa vào hàng 7 là 5V
+ Đèn 8 sáng Điện áp đưa vào hàng 8 là 5V
- Tiếp tục quét với các cột từ 3 đến 8 bằng cách như trên
Để mắt người nhận biết được toàn bộ hình ảnh của ma trận ta phải tiến hành quét nhiều lần Do măt người không phân biệt được sự thay đổi ảnh nếu ảnh đó được quét với tốc độ 24h/s nên ta quét với tốc độ ảnh lớn hơn hoặc bằng 24h/s thì ảnh sẽ chạy liên tục và không bị giật
PHẦN II NỘI DUNG
- Khối điều khiển trung tâm sử dụng vi điều khiển 89S52
- Khối giải mã dữ liệu cột: Dùng các chân của Port 1(từ chân P1.0 đến P1.7 ) của vi điều khiển 89S52 làm đầu vào vi điều khiển,các chân của Port 1 được đưa vào các chân C của 8 con transitor có chức năng giống như cổng NOT
- Khối giải mã dữ liệu hàng :Dùng các chân của Port 0( từ chân P0.0 đến P0.7) của vi diều khiển 89S52 làm đầu vào vi điều khiển ,các chân của Port 0 được nối các đường dây hàng của LED màu đỏ.Dùng các chân của Port 2 (từ chân P2.0 đến P2.7) được nối với các đường dây hàng của LED màu xanh
I, IC xử lí trung tâm 89S52
- 89S52 là IC vi điều khiển (Microcontroller) do hãng Atmel sản xuất
IC này có đặc điểm như sau:
CPU ( Centralprocessing unit) bao gồm:
- Thanh ghi tích luỹ A
- Thanh ghi tích lũy B, dung cho phép nhân và phép chia
Trang 7- Đơn vị logic học
- Thanh ghi từ trạng thái chương trình
- Bốn băng thanh ghi
- Con trỏ ngăn xếp
Bộ nhớ chương trình (bộ nhớ ROM) gồm 8kbyte Flash
Bộ nhớ dữ liệu (bộ nhớ Ram ) gồm 256 byte
Bộ UART có chức năng truyền nhận nối tiếp ,có thể giao tiếp với công nối tiếp của máy tính thông qua bọ UART
3 bộ Timer/Counter 16 bit thực hiện các chức năng định thời và đếm
sự kiện
WDM dùng để phục hồi lại hoạt động của CPU khi nó bị treo bởi 1 nguyên nhân nào đó
Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong
Bộ lập trình cho phép người sử dụng có thể nạp các chương trình cho chip mà không cần các bộ nạp chuyên dụng
Bộ chia tần với hệ số chia tần là 12
4 cổng xuất nhập với 32 chân
Trang 8Hình 1.Sơ đồ chân 89S52 Chức năng của các chân 89S52:
Port 0 : từ chân 32 đến chân 39 (P0.0 _P0.7) Port 0 có 2 chức năng: trong các
thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường IO, đối với thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa chỉ và bus dữ liệu.
Port 1 : từ chân 1 đến chân 8 (P1.0 _ P1.7) Port 1 chỉ có chức năng dùng làm
các đường điều khiển xuất nhập IO
Port 2 : từ chân 21 đến chân 28 (P2.0 _P2.7) Nếu không dùng bộ nhớ mở
rộng bên ngoài thì port 2 dùng làm các đường điều khiển IO.Nếu dung bộ nhớ mở rộng bên ngoài thì port 2 có chức năng là bus địa chỉ cao A0 – A15.
Port 3 : từ chân 10 đến chân 17 (P3.0 _ P3.7) Port 3 là port có 2 chức
năng.Các chân port này có nhiều chức năng , các công dụng chuyển đổi có liên hệ
Trang 9đặc biệt của 89S52 như ở bảng sau:
PSEN (Program store enable):
PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương trình mở rộng thường được nối đến chân OE\ của Eprom cho phép đọc các byte
mã lệnh.
PSEN ở mức thấp trong thời gian 89S52 lấy lệnh Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong 89S52 để giải mã lệnh Khi 89S52 thi hành chương trình trong EPROM nội PSEN
ở mức logic 1.
ALE (Address Latch Enable):
Khi 89S52 truy xuất bộ nhớ bên ngoài, Port 0 có chức năng là bus địa chỉ và
dữ liệu (AD7 – AD0) do đó phải tách các đường dữ liệu và địa chỉ Tín hiệu ra ALE ở chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ
và dữ liệu khi kết nối chúng với IC chốt
Tín hiệu ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.
EA\ (External Access):
Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1 hoặc mức 0.
Nếu ở mức 1 thì vi điều khiển thi hành chương trình từ bộ nhớ nội.
Nếu ở mức 0 thì vi điều khiển thi hành chương trình từ bộ nhớ ngoại.
RST (Reset):
Ngõ vào chân 9 là ngõ vào Reset.Khi cấp điện cho hệ thống hoặc nhấn nút reset thì mạch sẽ reset vi điều khiển.Khi reset thì tín hiệu reset phải ở mức cao ít nhất 2 chu kì máy.
Các ngõ vào bộ dao động Xtal1, Xtal2:
Bộ tạo dao động được tích hợp bên trong 89S52 Khi sử dụng 89S52, người
ta chỉ cần nối thêm tụ thạch anh và các tụ Tần số tụ thạch anh thường là 12 Mhz –
Trang 1024 Mhz
VCC ,GND:
AT 89S52 dùng nguồn một chiều có dải điện áp từ 4V đến 5,5 V được cấp qua chân 40 và 20
II,PHƯƠNG PHÁP TẠO HIỆU ỨNG CHỮ CHẠY TỪ PHẢI QUA TRÁI TRÊN BẢNG LED
Sau khi đã hiển thị đ ư ợc hình ảnh lên bảng LED Bây giờ ta sẽ tìm hiểu cách tạo
hiệu ứng chữ chạy trên bảng LED Thủ thuật ở đây là quét và hiển thị một hình ảnh
trong một thời gian nhất định, sau đó ta dịch dữ liệu của các cột sang trái một vị trí,
khi đó ta sẽ tạo đ ư ợc hiệu ứng chữ chạy trên bảng LED.
Hiệu ứng chữ chạy đ ư ợc tạo ra bằng cách dịch giá trị các phần tử đi một vị trí (54, 43, 32,21,10 )
Sau mỗi lần dịch ta lại gọi ch ư ơng trình hiển thị Khi đó
trên bảng LED ta sẽ quan sát đ ư ợc hiệu ứng chữ chạy.
III,SƠ ĐỒ NGUYÊN LÝ
Trang 11IV, SƠ ĐỒ MẠCH IN
Trang 12V,LINH KIỆN SỬ DỤNG TRONG MẠCH
Khối điều khiển trung tâm : Vi điều khiển 89S52 (1 con)
Transistor A1015 ( 8 con)
Điện trở 1K,10K.Tụ 10uF
Bảng led 8x8 ( 1 bảng)
VI, MÃ NGUỒN CHƯƠNG TRÌNH
Chương trình điều khiển :
#include <reg52.h>
#include <stdio.h>
sbit RED = P3^0; // Mau Do
sbit GRE = P3^1; // Mau Xanh
Trang 13sbit YEL = P3^2; // Mau Vang
unsigned long int n;
unsigned int i,j,chu_cai,stt,lap,mau_do,mau_xanh,dich;
unsigned char hang_so[] =
{0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFF};
unsigned char code font[] = {
0xFF,0xC3,0xBD,0xFD,0xFD,0xFD,0xBD,0xC3, //C
0xFF,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0xBD, //H 0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0x83, //U 0xFF,0xC3,0xBD,0xFD,0xFD,0xFD,0xBD,0xC3, //C 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //SPEACE
0xFF,0xBD,0x99,0xA5,0xBD,0xBD,0xBD,0xBD, //M 0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0x83, //U 0xFF,0xBD,0xB9,0xB5,0xB5,0xAD,0x9D,0xBD, //N 0xFF,0xC3,0xBD,0xFD,0x8D,0xBD,0xBD,0xC3, //G 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //SPEACE
0xFF,0xBD,0xB9,0xB5,0xB5,0xAD,0x9D,0xBD, //N 0xFF,0xE7,0xDB,0xBD,0x81,0xBD,0xBD,0xBD, //A 0xFF,0xBD,0x99,0xA5,0xBD,0xBD,0xBD,0xBD, //M 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //SPEACE
0xFF,0xBD,0x99,0xA5,0xBD,0xBD,0xBD,0xBD, //M 0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3, //O 0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3, //I 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //SPEACE
0xFF,0xC3,0xBD,0xDF,0xEF,0xF3,0xBD,0x81, //2 0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3, //0
0xFF,0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xC3, //1
0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3, //0
Trang 140xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //SPEACE
/*
0xFF,0xE7,0xDB,0xBD,0x81,0xBD,0xBD,0xBD, //A 0xFF,0xE1,0xDD,0xDD,0xC1,0xBD,0xBD,0xC1, //B
0xFF,0xC3,0xBD,0xFD,0xFD,0xFD,0xBD,0xC3, //C
0xFF,0xC1,0xBD,0xBD,0xBD,0xBD,0xBD,0xC1, //D
0xFF,0xC1,0xFD,0xFD,0xE1,0xFD,0xFD,0x81, //E
0xFF,0x81,0xFD,0xFD,0xE1,0xFD,0xFD,0xFD, //F
0xFF,0xC3,0xBD,0xFD,0x8D,0xBD,0xBD,0xC3, //G
0xFF,0xBD,0xBD,0x81,0xBD,0xBD,0xBD,0xBD, //H
0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3, //I
0xFF,0xC7,0xDF,0xDF,0xDF,0xDF,0xDD,0xE3, //J
0xFF,0xED,0xF5,0xF9,0xF5,0xED,0xDD,0xBD, //K
0xFF,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xC1, //L
0xFF,0xBD,0x99,0xA5,0xBD,0xBD,0xBD,0xBD, //M
0xFF,0xBD,0xB9,0xB5,0xB5,0xAD,0x9D,0xBD, //N
0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3, //O
0xFF,0xC1,0xBD,0xBD,0xC1,0xFD,0xFD,0xFD, //P
0xFF,0xC3,0xBD,0xBD,0xBD,0xA5,0xDD,0x23, //Q
0xFF,0xE1,0xDD,0xDD,0xE1,0xF5,0xAD,0xDD, //R
0xFF,0xC3,0xBD,0xFD,0xC3,0xBF,0xBD,0xC3, //S
0xFF,0x81,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7, //T
0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0x83, //U 0xFF,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7, //V
0xFF,0xBE,0xBE,0xB6,0xB6,0xB6,0xAA,0xDD, //W
0xFF,0xBE,0xDD,0xEB,0xF7,0xEB,0xDD,0xBE, //X
0xFF,0x7D,0xBB,0xD7,0xEF,0xF7,0xFB,0xFD, //Y
0xFF,0x83,0xDF,0xEF,0xF7,0xFB,0xBD,0xC0, //Z
0x81,0x7E,0x46,0x5A,0x5A,0x86,0x7E,0x81, //@
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //SPEACE
0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3, //0 0xFF,0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7, //1 0xFF,0xC3,0xBD,0xDF,0xEF,0xF3,0xBD,0x81, //2 0xFF,0xE7,0xDB,0xDF,0xE7,0xDF,0xDB,0xE7, //3
Trang 150xFF,0xCF,0xC7,0xCB,0xCD,0xC1,0xCF,0xCF, //4 0xFF,0xC3,0xFB,0xE3,0xC3,0xDF,0xDF,0xE3, //5 0xFF,0xE3,0xFD,0xFD,0xC1,0xDD,0xDD,0xE3, //6 0xFF,0xC3,0xDF,0xCF,0xF7,0xF7,0xF7,0xF7, //7 0xFF,0xE3,0xDD,0xDD,0xE3,0xDD,0xDD,0xE3, //8 0xFF,0xC3,0xBD,0xBD,0x83,0xBF,0xBF,0xC3, //9
*/
} ;
void delay(unsigned long int d)
{
for(n=0;n<d;n++);
}
void scan_key(void)
{
if(RED == 0) // Nhan phim mau do
{
mau_do = 1; // Cho phep sang mau do mau_xanh = 0; // Tat mau xanh
chu_cai = 0; // Bat dau chay tu chu a while(!RED); // Cho nha phim
}
if(GRE == 0) // Nhan phim mau xanh
{
mau_do = 0; // Cho phep sang mau xanh mau_xanh = 1; // Tat mau do
chu_cai = 0; // Bat dau chay tu chu a while(!GRE); // Cho nha phim
}
if(YEL == 0) // Nhan phim mau vang
{