LỜI NÓI ĐẦU
Quảng cáo luôn là một trong các vấn đề đóng vai trò quan trọng trong sự phát triển của một công ty, doanh nghiệp hay thậm chí là của một cửa hàng. Quảng cáo tốt sẽ đem lại nhiều lợi ích to lớn. Cũng chính vì vậy mà không ngạc nhiên khi hàng năm các doanh nghiệp đã đầu tư rất nhiều vào vấn đề này. Một trong những biện pháp được ưa dùng hiện nay đó là sử dụng bảng quảng cáo bằng đèn LED, vì sự đơn giản, hiện đại, bắt mắt, chi phí hợp lý cũng như tính hiệu quả của nó. Những bảng thông tin, cổng chào hay những bảng LED quảng cáo với màu sắc sặc sỡ, bắt mắt, gây nhiều chú ý chắc hẳn đã không còn xa lạ đối với người dân, nhất là người dân đô thị.
Quảng cáo bằng đèn LED hiện nay được ứng dụng rất rộng rãi trong nhiều ngành, nhiều lĩnh vực. Nó không chỉ giới hạn bởi việc hiển thị các dòng chữ, các biển hiệu nhấp nháy mà còn có thể hiển thị các hình ảnh đồ họa, các hình ảnh full colour và đặc biệt là có thể hiển thị được cả video. Nó cũng không chỉ giới hạn trong việc quảng cáo trong nhà (indoor), bán ngoài trời (semi – outdoor ) mà còn có thể quảng cáo ở cả ngoài trời, ngay giữa ban ngày với độ sáng và độ sắc nét cao.
Nhóm chúng em đã đề xuất một đề tài tìm hiểu về phương pháp lập trình điều khiển bảng ma trận chữ chạy trên 3 led matrix 8*8 hiển thị chữ “WELCOME”. Từ phải qua trái.
Trong quá trình lập trình và thiết kế kết quả vẫn chưa được hoàn thiện và vẫn cần bổ sung. Nhóm chúng em mong được sự góp ý và hướng dẫn của thầy giáo cùng các bạn để có thể đạt được kết quả như mong muốn.
MỤC LỤC
I- PHÂN TÍCH ĐỀ BÀI 3
II- PHÂN TÍCH THIẾT KẾ 3
1, Các linh kiện sử dụng trong mạch .2
a , Vi điều khiển AT89C51 2
b, Led matrix 8×8 8
c , Bộ ghi dịch 74hc595 .11
d,Transistor và trở .12
2, Sơ đồ nguyên lý và mạch mô phỏng 13
3, Nguyên lý hoạt động . 14
III- CHƯƠNG TRÌNH ĐIỀU KHIỂN 14
18 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3091 | Lượt tải: 5
Bạn đang xem nội dung tài liệu Đề tài Lập trình c cho 8051 - Hiển thị chữ “welcome” trên 3 matran led 8*8, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC THÁI NGUYÊN
KHOA CÔNG NGHỆ THÔNG TIN
---------eòf---------
BÀI TẬP LỚN :
KỸ THUẬT LẬP TRÌNH NHÚNG
Đề Tài :
Lập Trình C Cho 8051 - Hiển Thị Chữ “WELCOME” Trên 3 Matran led 8*8
Giáo viên : Phạm Quốc Thịnh
Nhóm thảo luận: Đào Thị Thảo
Hoàng Thị La
Lê Thị Thu
Dương Thị Thuyến
Ma Thị Hạnh
Thái Nguyên, tháng 5 năm 2010
LỜI NÓI ĐẦU
Quảng cáo luôn là một trong các vấn đề đóng vai trò quan trọng trong sự phát triển của một công ty, doanh nghiệp hay thậm chí là của một cửa hàng. Quảng cáo tốt sẽ đem lại nhiều lợi ích to lớn. Cũng chính vì vậy mà không ngạc nhiên khi hàng năm các doanh nghiệp đã đầu tư rất nhiều vào vấn đề này. Một trong những biện pháp được ưa dùng hiện nay đó là sử dụng bảng quảng cáo bằng đèn LED, vì sự đơn giản, hiện đại, bắt mắt, chi phí hợp lý cũng như tính hiệu quả của nó. Những bảng thông tin, cổng chào hay những bảng LED quảng cáo với màu sắc sặc sỡ, bắt mắt, gây nhiều chú ý chắc hẳn đã không còn xa lạ đối với người dân, nhất là người dân đô thị.
Quảng cáo bằng đèn LED hiện nay được ứng dụng rất rộng rãi trong nhiều ngành, nhiều lĩnh vực. Nó không chỉ giới hạn bởi việc hiển thị các dòng chữ, các biển hiệu nhấp nháy mà còn có thể hiển thị các hình ảnh đồ họa, các hình ảnh full colour và đặc biệt là có thể hiển thị được cả video. Nó cũng không chỉ giới hạn trong việc quảng cáo trong nhà (indoor), bán ngoài trời (semi – outdoor ) mà còn có thể quảng cáo ở cả ngoài trời, ngay giữa ban ngày với độ sáng và độ sắc nét cao.
Nhóm chúng em đã đề xuất một đề tài tìm hiểu về phương pháp lập trình điều khiển bảng ma trận chữ chạy trên 3 led matrix 8*8 hiển thị chữ “WELCOME”. Từ phải qua trái.
Trong quá trình lập trình và thiết kế kết quả vẫn chưa được hoàn thiện và vẫn cần bổ sung. Nhóm chúng em mong được sự góp ý và hướng dẫn của thầy giáo cùng các bạn để có thể đạt được kết quả như mong muốn.
Chúng em xin chân thành cảm ơn !
MỤC LỤC
I- PHÂN TÍCH ĐỀ BÀI…………………………………3
II- PHÂN TÍCH THIẾT KẾ ............................................3
1, Các linh kiện sử dụng trong mạch………………….2
a , Vi điều khiển AT89C51…………………………………..2
b, Led matrix 8×8 ………………………………………8
c , Bộ ghi dịch 74hc595 …………………………………….11
d,Transistor và trở…………………………………………...12
2, Sơ đồ nguyên lý và mạch mô phỏng………………..13
3, Nguyên lý hoạt động…….…………………………..14
III- CHƯƠNG TRÌNH ĐIỀU KHIỂN …………………14
I- Phân Tích Đề Tài
Hiển thị chữ trên led matrix màu đỏ.
Chữ “WELCOME ” chạy từ phải qua trái.
Dùng port1 để đưa dữ liệu vào bộ ghi dịch 74hc595 .Dữ liệu sẽ được đưa vào nối tiếp vào chân 14 của 595.Sau mỗi xung clock tại chân 11 thì dữ liệu lại được dịch đi một bit và bittiepes theo được đưa vào.Sau 8 xung tại chân 11, để đưa dữ liệu ra song song tại các cột của led matrix thì tạo xung tại chân 12 để đưa dũ liệu ra ngoài và chốt dữ liệu lại. Port2 dùng để điều khiển hàng trên led ma trận.
II- Phân Tích Thiết Kế
1, Các linh kiện sử dụng trong mạch:
1 vdk 89C51
3 Ledmatrix 8x8
3 74HC595
Một vài điện trở 220 ohm
40 transistor C1815
a, VDK 89C51
Tổng quan về 8051
Sản xuất bởi Intel năm 1981
Vi điều khiển đơn chíp 8-bit, được tối ưu cho các ứng dụng điều khiển
128 byte RAM, 4096 byte (4KB) ROM, 2 timer, 1 serial port, 4 I/O port
40 Chân được đóng gói theo chuẩn DIP
Giới thiệu sơ lược về IC 89C51
IC điều khiển 89C51tương thích với họ MSC51 có đặc điểm sau :
+ 4K Bytes Flash rom
+ 128 Bytes Ram
+ 4 port 8 bit
+ 2 bộ định thời 16 bit
+ Có port nối tiếp
+ Có thể mở rộng bộ nhớ chương trình ngoài 64 K Byte
+ Bộ xử lý bit
TXD* RXD*
T1*
T2*
P0 P1 P2 P3
INT\*1
INT\*0
TIMER2
IMER1
PORT nối tiếp
EA\ RST PSEN ALE
Các thanh ghi khác
128 byte Ram
Rom
4K-8051
OK-8031
Timer1
Timer2
Điều khiển ngắt
Ñieàu khieån bus
CPU
Port noái tieáp
Caùc port I\O
Taïo dao ñoäng
Cấu trúc bên trong của 89C51:
Hình dạng thực tế và sơ đồ chân :
Trong số 40 chân, có 32 chân dành cho 4 cổng P0, P1 ,P2 và P3 ,mỗi cổng có 8 chân. Các chân còn lại dành cho nguồn Vcc, đất GND, các chân dao động XTAL1 và XTAL2, khởi động lại RST, cho phép chốt địa chỉ ALE, truy cập được địa chỉ ngoài ,cho phép cất chương trình
Chân VCC: Chân số 40 là VCC cấp điện áp nguồn cho Vi điều khiển
Nguồn điện cấp là +5V±0.5.
Chân GND:Chân số 20 nối GND(hay nối Mass).
Khi thiết kế cần sử dụng một mạch ổn áp để bảo vệ cho Vi điều khiển, cách đơn giản là sử dụng IC ổn áp 7805.
Port 0 gồm 8 chân (từ chân 32 đến 39) có hai chức năng:
Chức năng xuất/nhập :các chân này được dùng để nhận tín hiệu từ bên ngoài vào để xử lí, hoặc dùng để xuất tín hiệu ra bên ngoài, chẳng hạn xuất tín hiệu để điều khiển led đơn sáng tắt.
Chức năng là bus dữ liệu và bus địa chỉ (AD7-AD0) : 8 chân này (hoặc Port 0) còn làm nhiệm vụ lấy dữ liệu từ ROM hoặc RAM ngoại (nếu có kết nối với bộ nhớ ngoài), đồng thời Port 0 còn được dùng để định địa chỉ của bộ nhớ ngoài.
Port P1 gồm 8 chân (từ chân 1 đến chân 8), chỉ có chức năng làm các
đường xuất/nhập, không có chức năng khác.
Port 2 gồm 8 chân (từ chân 21 đến chân 28) có hai chức năng:
Chức năng xuất/nhập
Chức năng là bus địa chỉ cao (A8-A15): khi kết nối với bộ nhớ ngoài có dung lượng lớn,cần 2 byte để định địa chỉ của bộ nhớ, byte thấp do P0 đảm nhận, byte cao do P2 này đảm nhận.
Port 3 gồm 8 chân (từ chân 10 đến 17):
Chức năng xuất/nhập Với mỗi chân có một chức năng riêng thứ hai như trong bảng sau Bit Tên Chức năng P3.0 RxD Ngõ vào nhận dữ liệu nối tiếp P3.1 TxD Ngõ xuất dữ liệu nối tiếp P3.2 INT0 Ngõ vào ngắt cứng thứ 0 P3.3 INT1 Ngõ vào ngắt cứng thứ 1 P3.4 T0 Ngõ vào của Timer/Counter thứ 0 P3.5 T1 Ngõ vào của Timer/Counter thứ 1 P3.6 WR Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài P3.7 RD Ngõ điều khiển đọc dữ liệu từ bộ nhớ bên ngoài
Ngõ vào RST ở chân 9 là ngõ vào Reset dùng để thiết lập trạng thái
ban đầu cho vi điều khiển. Hệ thống sẽ được thiết lập lại các giá trị ban đầu nếu ngõ này ở mức 1 tối thiểu 2 chu kì máy.
Chân XTAL1 và XTAL2 : hai chân này có vị trí chân là 18 và 19 được
sử dụng để nhận nguồn xung clock từ bên ngoài để hoạt động, thường được ghép nối với thạch anh và các tụ để tạo nguồn xung clock ổn định.
PSEN ( program store enable) tín hiệu được xuất ra ở chân 29 dùng để
truy xuất bộ nhớ chương trình ngoài. Chân này thường được nối với chân OE (output enable) của ROM ngoài.
Khi vi điều khiển làm việc với bộ nhớ chương trình ngoài, chân này phát ra tín hiệu kích hoạt ở mức thấp và được kích hoạt 2 lần trong một chu kì máy Khi thực thi một chương trình ở ROM nội, chân này được duy trì ở mức logic không tích cực (logic 1)
(Không cần kết nối chân này khi không sử dụng đến)
Chân ALE (chân cho phép chốt địa chỉ-chân 30)
Khi Vi điều khiển truy xuất bộ nhớ từ bên ngoài, port 0 vừa có chức năng là bus địa chỉ, vừa có chức năng là bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ở chân ALE dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và các đường dữ liệu khi kết nối chúng với IC chốt. Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động đưa vào Vi điều khiển, như vậy có thể dùng tín hiệu ở ngõ ra ALE làm xung clock cung cấp cho các phần khác của hệ thống.
Ghi chú: khi không sử dụng có thể bỏ trống chân này
Chân EA dùng để xác định chương trình thực hiện được lấy từ ROM
nội hay ROM ngoại.
Khi EA nối với logic 1(+5V) thì Vi điều khiển thực hiện chương trình lấy từ bộ nhớ nội
Khi EA nối với logic 0(0V) thì Vi điều khiển thực hiện chương trình lấy từ bộ nhớ ngoại
Các đặc điểm của 8051
4KB ROM
128 bytes RAM nội
4 bank thanh ghi với 8 byte mỗi bank (R0-R7)
16 byte được định địa chỉ bit
80 byte bộ nhớ đa dụng
Bốn cổng I/O 8-bit (P0-P3)
Hai bộ timer 16-bit (Timer0 và Timer1)
Một bộ giao diện truyền nhận nối tiếp
Năm nguồn ngắt (2 ngắt ngoài và 3 ngắt nội)
Bộ nhớ dữ liệu và chương trình của 8051 có
thể được mở rộng tới 64K ROM và 64K RAM
b, Led Matrix 8x8
Ma trận LED gồm các LED phát quang bố trí thành hàng và cột trong một .Các tín hiệu điều khiển hàng nối vào Anode của tất cả các LED trên cùng một hàng. Các tín hiệu điều khiển cột nối vào Cathode của tất cả cácv LED trên cùng một cột. Khi có 1 cặp tín hiệu điều khiển hàng, các Anode của hàng LED thứ nhất RW1 (hàng trên cùng) được cấp điện thế cao. Đồng thời các Cathode của cột LED thứ nhất CL1 (bìa trái) được cấp thế thấp.Tuy nhiên chỉ có LED 1 là sáng vì nó có đồng thời thế cao trên Anode và thế thấp trên Cathode. Như vậy khi có 1 cặp tín hiệu điều khiển hàng và cột thì chỉ có duy nhất 1 LED tại điểm hàng và cột gặp nhau là sáng. Trên cơ sở cấu trúc như vậy ta có thể xây dựng được bảng ma trận LED với số lượng LED lớn hơn ví dụ như trong các bảng quang báo.
Hình dạng thực tế :
Cấu tạo của matrix 8x8 :
Trong trường hợp ta cần hiển thị đồng thời 1 số LED trong ma trận để có thể hiển thị một ký hiệu nào đó ví dụ chữ ‘L‘ trên ma trận LED. Khi đó ta thấy các LED ở cột bìa trái (CL1) sáng và các LED từ 1 đến 4 ở hàng dưới cùng (RW8) sáng. Nếu trong hiển thị tĩnh ta phải đặt tất cả các PA0 đến PA6 và PB0-4 ở mức cao, lúc này sẽ làm sáng các ở hàng RW7 và cột CL1 nhưng khi đó điều gì sẽ xảy ra?. Ta thấy rõ ràng là khi đó thì các LED khác trong ma trận cũng được cấp áp cao vào Anode và áp thấp vào Cathode do đó nó sẽ sáng tất cả các LED trong ma trận. Vì vậy trong điều khiển ma trận LED ta không thể sử dụng phương pháp hiển thị tĩnh mà phải dùng phương pháp quét (hiển thị động). Nnghĩa là tiến hành cấp tín hiệu điều khiển theo dạng xung theo kiểu quét cho các hàng và cột cần hiển thị. Tần số quét nhỏ nhất cho một chu kỳ cần khoảng 20Hz (50ms) nhằm bảo đảm cho mắt thấy các LED sáng đều không nháy.
Cách xác định chân
Xác định cho chân LED ma trận. Ta dùng đồng hồ xác định cũng được . Vì mỗi ma trận LED được cấu tạo bởi bởi các hàng và các cột trong đó các hàng là cực Anot của LED và cột là Katot của LED
c, Bộ ghi dịch 74HC595
74HC595 là IC ghi dịch nối tiếp sang song với 8 ngõ ra QH - QA
và bộ chốt dữ liệu 8 bit.Dữ liệu được đưa vào các thanh ghi dịch bên trong IC thông qua 1 chânSER (chân 14) và các chân điều khiển RCK (chân 12, điều khiển chốt dữ liệu), chânSCK (chân 11, điều khiển quá trình dịch dữ liệu), chân (chân 10, dùng để tác động lên quá trình xóa dữ liệu) ,chânQH’ (chân 9 đưa dữ liệu nối tiếp ra ngoài dùng để ghép nhiều IC lại với nhau) và chân G dùng đẻ cho phép các ngõ ra.
Ta có thể điều khiển được một hoặc nhiều IC 74HC595 ghép với nhau thông qua 4 chân SER, RCK, SCKvà chân 10 .
Bảng trạng thái:
d, Điện Trở và Transistor
2, Sơ Đồ Nguyên Lý:
Hình mô phỏng :
3, Nguyên Lý Hoạt Động.
Đưa dữ liệu từ VDK vào bộ ghi dịch từ nối tiếp sang song song.Khi muốn đưa dữ liệu vào thanh ghi ta cho dữ liệu vào chân số 14(data) và cho chân 11 lên mức cao để tạo xung clock cho phép dịch dữ liệu từng bit một. Khi muốn xuất dữ liệu ra ta cho chân 12 (latch) lên mức cao(1),muốn chốt dữ liệu lại thì ta cho chân 12 xuống mức thấp -> lúc đó các chân của 595 sẽ giữ nguyên dữ liệu ta đưa ra.
Ta xuất dữ liệu ra cột thì mỗi led matrix cần một ic 74hc595 (bảng mạch có 3 led matrix thì cần 3 ic 74hc595), các ic này ghép nối tiếp nhau, vì 74595 là ic ghi dịch 8 bit ,nên khi ta đưa đủ 8 bit vào thì nó sẽ bị đầy,và bit tiếp theo (bit 9) sẽ bị đẩy ra ngoài qua chân số 9,như vậy ta phải ghép các ic 74HC595 theo kiểu chân 9 của ic đầu nối với chân 14 của ic sau đẻ tiếp tục đẩy bit dữ liệu tiếp theo vào các ic 74595 còn lại.
Chương Trình.
//---------- Khai báo thư viện ---------
#include
#include
#include
sbit DATA = P1^0;
sbit sck = P1^1;
sbit strobe = P1^2;
//---------chương trình con tạo trễ ----------
void delay(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++);
}
int m,n,k;
//------------------ khai báo dữ liệu trên hang ------------
unsigned char hang[104]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xc0,0x80,0x7F,0xBF,0xDF,0xBF,0x7F,0x80, // w
0xFF,0x81,0x00,0x76,0x76,0x7E,0xFF,0xFF, // e
0xFF,0x80,0x00,0x7F,0x7F,0x7F,0xFF,0xFF, // l
0xFF,0xC3,0x81,0x7E,0x7E,0x7E,0xBD,0xFF, // c
0xFF,0xC3,0x81,0x7E,0x7E,0x7E,0x81,0xC3, // o
0xFF,0x00,0x01,0xFB,0xF7,0xFB,0x01,0x00, // m
0xFF,0x81,0x00,0x76,0x76,0x7E,0xFF,0xFF, // e
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
unsigned char cot[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//--------- Chuyển đổi từ nối tiếp sang song song --------
void convert(unsigned char data_out)
{
unsigned char i,tg;
for(i=0;i<=7;i++)
{
tg = data_out;
tg = tg&0x80;
if(tg == 0x80)
DATA = 1;
else
DATA = 0;
data_out *= 2;
sck = 1;
sck = 0;
}
}
//-------------- xóa ma trận -------------
void clear()
{
convert(0xff);
convert(0xff);
convert(0xff);
}
//--------------- Chương trình chính ----------------
void main()
{
while(1)
{
for(m=0;m<80;m++)
{
for(k=0;k<3;k++)
for(n=m;n<=7+m;n++)
{
convert(hang[n]);
convert(hang[n+8]);
convert(hang[n+16]);
P2 = cot[n-m];
strobe = 1;
strobe = 0;
delay(500);
clear();
}
}
}
}