Đặc điểm lớn nhất của “Quang báo dùng Led Ma Trận” là có thể nhập trực tiếp từ bàn phím những ký tự mà mình mong muốn, việc này ở các hình thức quang báo khác không có, cái hay của nó l
Trang 1ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KỸ THUẬT MÁY TÍNH
2008 - 2009
Trang 2Mục lục
Mục lục trang 3 Giới thiệu về đồ án trang 4
Phần I: Các linh kiện được sử dụng trang 5
IC AT89C52 trang 6
IC 82C55A trang 7
IC 74HC373 trang 8
IC 74HC138 trang 9
IC 6264 (Ram 8Kx8bit) trang 10
Phần II: Thiết kế và thi công mạch trang 11 Mạch vi điều khiển AT89C52 trang 12 Mạch chốt 74HC373 và chọn chip 74HC138 trang 13 Mạch Ram 6264 và 82C55A trang 14 Mạch khuếch đại (amplifier) và bàn phím 4x4 trang 15 Mạch nguồn và khối hiển thị trang 16
Phần III: Các lệnh tiêu biểu trong Keil C và chương trình mẫu trang 17 Lưu đồ giải thuật trang 18 Các lệnh tiêu biểu trong Keil C trang 19 Lập trình sử dụng RAM trong Keil C trang 21 Các nguyên lý cơ bản về quét led và bàn phím trang 23 Chương trình mẫu trang 25
Phần IV: Sản phNm thu được, ưu và khuyết điểm trang 37
Sơ đồ bàn phím trang 38 Hướng dẫn sử dụng matrixled trang 39
Ưu điểm và khuyết điểm sản phNm trang 41
Sơ đồ mạch trang 42
Trang 3Giới thiệu về đồ án:
Hiện nay trong đời sống thì quảng cáo bằng hình thức quang báo không còn mới mẽ gì Nó có thể được sử dụng để quảng cáo tên nhãn hiệu sản phNm, tên của một công ty hay tên của một cửa hàng nào đó
Trong đó có quang báo dùng Led Ma Trận, dù quang báo dùng Led Ma
Trận chiếm không nhiều nhưng nó cũng đóng góp một phần vào việc tuyên
truyền, quảng cáo hay thông tin đến người tiêu dùng nói riêng và cả nước nói
chung Đặc điểm lớn nhất của “Quang báo dùng Led Ma Trận” là có thể nhập
trực tiếp từ bàn phím những ký tự mà mình mong muốn, việc này ở các hình thức quang báo khác không có, cái hay của nó là thông tin được cập nhật bất cứ lúc nào, có thể hiện thị nhanh nhất các thông tin mới nhất để mọi người nắm bắt
Trong đồ án này, dù quy mô không lớn nhưng tính chất đặc biệt của Led
Ma Trận không mất Để hiểu sâu hơn về đề tài, xin xem tiếp phần sau:
Trang 4PH Ầ N I:
Trang 5
IC AT89C52
Sơ đồ chân
Đặc điểm
AT89C52 là một IC họ MSC-51, các IC họ này có đặc điểm chung như sau:
• 4KB EPROM bên trong, ở đây chúng ta sử dụng AT89C52 có 8KB EPROM
• 128 byte RAM nội
• 4 Port I/O (input/output), mỗi port 8bit
• Giao tiếp nối tiếp
• 64 KB vùng nhớ mã ngoài
• 64 KB vùng nhớ dữ liệu ngoài
• Xử lý Boolen (hoạt động trên bit đơn)
• 210 vị trí nhớ có thể định vị bit
• 4us cho hoạt động nhân hay chia
AT89C52 có 32 port I/O rất thuận tiện việc quét led hiển thị, nhưng trong đồ án này, chúng ta sử dụng thêm IC Ram 6264 để lưu trữ tạm thời dữ liệu được nhập từ bàn phím Công việc này lấy đi 14 chân I/O của vi xử lý vì thế không đủ port để quét led, ta phải sử dụng với IC chọn chip kèm IC mở port để thực hiện việc quet led hiển thị này
Trang 6dữ liệu D7-D0 Bảng trạng thái của 82C55A:
IC 82C55A có 3 Port I/O là Port A, Port B, Port C mỗi Port 8 bit Các Port này được điều khiển là nhập hay xuất thông qua thanh ghi điều (control register) khiển do Microprocessor (AT89C52) gửi đến từ trước Port hay thanh ghi điều khiển được chọn qua 2 bit A1-A0 Người lập trình phải điền khiển các bit này từ Microprocessor (AT89C52)
Trang 8IC 74HC138
Sơ đồ chân
Đặc điểm
74HC138 là IC giải mã 3 - 8 gồm 3 ngõ vào địa chỉ (A1, A2, A3) có trọng số nhị phân
và 8 ngõ ra tích cực mức thấp Y0-Y7, 3 ngõ vào cho phép E1, E2 tích cực thấp và E3 tích cực cao Bảng trạng thái 74HC138:
Trang 9Dễ dàng mở rộng bởi chân chọn chip tích cực thấp CE1, một chân chọn chip tích cực cao CE2 và một chân OE tích cực thấp Tín hiệu cho phép ghi tích cực mức thấp WE điều khiển việc đọc/ghi của bộ nhớ
IC có 8 ngõ vào/ra của bus dữ liệu được dùng chung là I/O0 – I/O7
RAM thường được dùng trong các hệ thống điều khiển tự động để lưu trữ dữ liệu tạm thời.Bộ nhớ Ram có 2 loại là SRAM và DRAM:
• SRAM còn gọi là Static Ram hay Ram tĩnh Đây là loại Ram lưu trữ dữ liệu đến khi nào nguồn không còn SRAM thực chất là những flip flop (FF), trong mỗi
FF là một phần tử nhớ đại diện cho 1 bit
• DRAM còn gọi là Dynamic Ram hay Ram động Loại ram này phải luôn được làm “tươi” tức là phải nạp dữ liệu cho Ram trong 1 khoảng thời gian nhất định, nếu không Ram sẽ bị mất dữ liệu Trong khi làm “tươi” Ram ô nhớ đó không được phép truy xuất
Trang 10PH Ầ N II:
Trang 11MẠCH VI ĐIỀU KHIỂN AT89C52
Sơ đồ mạch
Mô tả
Mạch này gồm 2 mạch nhỏ là tạo xung và reset Khi cấp nguồn điện áp trên R34 (chân
9 của AT89C52) lên mức cai 5V (=Vcc), sau đó sẽ xuống mức 0V do tụ C8 bắt đầu nạp Nếu
ta ấn phím reset (JP2) thì áp trên R34 sẽ tăng gần = Vcc nhờ cầu phân áp R33 và R34 ghim một mức áp cố định (+5V)
Vì sử dụng Ram ngoài nên P2 và P0 đóng vai trò là các bus địa chỉ, P3 thì sử dụng các chân RD\, WR\ để điểu khiển chế độ hoạt động của RAM và 82C55A
P1 để quét và nhận bàn phím ma trận 4*4 (16 phím)
Ở đây ra sử dụng Ram 6264 chỉ có 13 bit địa chỉ, P2 P0 có 16 bit, ta dùng 3 bit còn lại
để điều khiển IC giải mã chọn chip
Trang 12MẠCH CHỐT 74HC373
& CHỌN CHIP 74HC138
Sơ đồ mạch
Mô tả
74HC138 là IC dùng chọn chip Ram, hay 8255 Ở đây chúng ta sử dụng 1 IC Ram
6264 với 3 IC 82C55A tổng cộng là 4 chip CE cho Ram, CS1-CS3 cho các IC 8255 A, B và
C là các ngõ điều khiển được nối với AT89C52
74HC373 là IC chốt dùng chốt địa chỉ khi sử dụng ram, ta nối các đầu vào với P0 của AT89C52 để chốt khi P0 là bus địa chỉ, và giữ các địa chỉ này cho Ram hoạt động khi P0 chuyển từ bus địa chỉ sang bus dữ liệu Đồng thời chốt 2 bit A1, A0 để sử dụng và điều khiển 82C55A
Các đầu ra A0-A7 được nối với các đầu vào dữ liệu của Ram 6264 và A1-A0 nối với A1-A0 của 82C55A Chân LE là chân xung để chọn chốt hay không chốt, chân này nối với chân xung ALE của AT89C52 để nó tự điều khiển khi được cấp lệnh
Trang 1382C55A được sử dụng và truy xuất như 1 RAM ngoại, nó có bus địa chỉ là A1-A0, bus dữ liệu là D0-D7 và bus điều khiển là chân đọc RD\, ghi WR\, chọn chip CS\.
Trang 14MẠCH KHUẾC ĐẠI (AMPLIFIER)
Theo K2: ta có –Vcc + IcRc + Vce + Vled = 0
SPEED UP: tăng tốc chạy chương trình SPEED DOWN: giảm tốc chạy chương trình
10 phím còn lại nhập chữ, số và các dấu, mỗi phím có thể nhập đc 5 ký tự
Còn 1 phím trống
Trang 15Để có thể hiển thị ta ghép 6 khối Led với nhau trên cùng 1 hàng, như vậy ta có 6 khối cột và 2 khối hàng
Trên cùng 1 khối cột ta nối âm với âm, vậy ta có 6 khối cột âm, mỗi khối 8 bit Trên cùng 1 khối hàng ta nối dương với dương, vậy ta có 2 khối hàng dương, mỗi khối 8 bit.6 khối cột âm nối với 6 port của 2 IC 8255, 2 khối hàng dương nối với 2 port của 8255 thứ 3
Sơ đồ chân của khối matrix led MI08 (8x8):
Trang 16PH Ầ N III:
TRONG KEIL C
Trang 17LƯU ĐỒ GIẢI THUẬT
BEGIN
NHẬP PHÍM
CÓ PHÍM?
PHÍM
KÝ TỰ
NẠP RAM
HIỂN THN
NO
YES
END
Trang 18CÁC LỆNH TIÊU BIỂU
TRONG KEIL C
Khai báo biến:
Bit x; kiểu dữ liệu 1 bit
Char data; kiểu dữ liệu 8 bit có dấu, bit đầu là dấu -127 … 128
Unsigned char x; kiểu dữ liệu 8 bit không dấu 0 … 255
Int x; kiểu dữ liệu 16 bit có dấu
Unsigned int x; kiểu dữ liệu 16 bit không dấu
Trang 19#define A 2000: A=2000 trong suốt chương trình
#define ouput_port P3: khi sử dụng output_port xem như sử dụng P3
Sbit P1^0 = P: khi ta sử dụng biến “P” thì xem như đang sử dụng P1^0
#type unsigned char tByte:
Khi sử dụng tByte xem chương trình sẽ hiểu là unsigned char
Trang 20LẬP TRÌNH SỬ DỤNG RAM/ROM
TRONG KEIL C
Cách 1 :Vào Target, chọn Memory Model là Large , khi đó mọi biến bạn khai báo đều được lưu trữ trong RAM ngoài.Cách này đơn giản nhưng có nhược điểm là không quản lý được biến, compiler sẽ tự định địa chỉ cho biến của bạn
Cách 2 :Chọn Memory Model là small Khi đó , biến nào khai báo ở dạng xdata thì sẽ hiểu là RAM ngoài
VD : unsigned char xdata Dulieu[10];
cách này thường được sử dụng rộng rãi, tuy nhiên RAM của bạn phải bắt đầu từ địa chỉ 0x0000
Cách 3 : Nếu vùng địa chỉ của RAM không bắt đầu từ 0x0000 , chẳng hạn bạn sử dụng mạch giải mã để đặt địa chỉ cho RAM bắt đầu từ 0x8000 , khi đó ta có thể sử dụng thư viện "absacc.h" ,ví dụ khai báo như sau :
}
Lúc lấy giá trị ra, bạn có thể gọi : x=XBYTE[address];
Trang 21thông tin với RAM ngoài sẽ được VĐK thực hiện bằng lệnh movx, các xung ALE,RD,WR sẽ họat động theo nhịp clock để trao đổi với RAM
Đọc
1- CPU phát địa chỉ ra bus địa chỉ Bộ nhớ nhận được địa chỉ này, sẵn sàng phát byte
dữ liệu ra bus dữ liệu, nhưng vì /OE chưa tích cực nên các chân Di (D1, D2, , Dm) của bộ nhớ vẫn còn ở trạng thái Hi-Z (tổng trở cao)
2- CPU kích hoạt tín hiệu /RD (/RD nối tới chân /OE của bộ nhớ) -> /OE tích cực ->
bộ nhớ xuất dữ liệu ra bus dữ liệu
3- CPU cất (copy) dữ liệu từ bus dữ liệu vào thanh ghi
4- CPU bỏ kích hoạt /RD -> /OE trở lại mức ko tích cực -> ngõ ra bộ nhớ trở lại trạng thái Hi-Z
Ghi
1- CPU phát địa chỉ ra bus địa chỉ
2- CPU phát dữ liệu từ thanh ghi ra bus dữ liệu
3- CPU kích hoạt /WR (/WR nối tới /WE của bộ nhớ) -> /WE tích cực -> bộ nhớ ghi
dữ liệu ở bus dữ liệu vào ô nhớ có địa chỉ chỉ định bởi bus địa chỉ
4- CPU bỏ kích hoạt /WR -> /WE trở lại mức ko tích cực
Đối với 8051
Chân /PSEN thường được nối tới chân /OE của ROM ngoài chứa chương trình Khi
8051 đọc chương trình, thì chân /PSEN sẽ được kích hoạt (giống như tín hiệu /RD nói trên)
Chân /RD và /WR thường nối tới /OE và /WE của RAM ngoài
/CE là chân chọn chip (giống như /CS) Trong 1 hệ vi xử lý có nhiều thiết bị (bộ nhớ hay I/O) sử dụng chung bus dữ liệu, tại 1 thời điểm chỉ có tối đa 1 thiết bị được giao tiếp với bus dữ liệu thôi (nếu có nhiều hơn 1, thì sẽ xảy ra tranh chấp bus) Mạch giải mã địa chỉ sẽ điều khiển các chân /CE (hay /CS) của các thiết bị này để chỉ định thiết bị nào được giao tiếp với bus dữ liệu /CE của thiết bị nào ở mức tích cực thì thiết bị ấy được phép giao tiếp với bus dữ liệu, còn không thì các đường dữ liệu Di của thiết bị sẽ ở trạng thái Hi-Z
Ram 6264 có 8192 ô nhớ 8 bit, ta dùng 700 ô nhớ đầu chứa bảng mã, còn 7492 ô nhớ, mỗi chữ cái chiếm 14 ô nhớ Vậy ta có thể ghi được 7492/14 = 535 ký tự
**)Đối với 82C55A thì cách sử dụng cũng như RAM và ROM ngoài, chỉ khác là 82C55A chỉ có 4 địa chỉ của port A, B, C và Control registor
Trang 22CÁC NGUYÊN LÝ CƠ BẢN VỀ QUÉT LED VÀ BÀN PHÍM
Đề tài của chúng ta là “Ma trận led nhập từ bàn phím”, như vậy 2 thiết bị không thể thiếu là bàn phím và led ma trận
Ma trận bàn phím 4x4
(Cấu tạo chung cho các thiết bị matrix)
Cách hoạt động của bàn phím là khi ta cấp Vcc 5V cho đầu “A” và bấm phím thứ 1 thì
đo được ở đầu 1 là 5V, tương tự cho các phím khác Như vậy để nhận được 16 phím thì ta phải cấp Vcc lần lượt cho 4 đầu “A, B, C, D” hay ngược lại lần lượt cho “1, 2, 3, 4” Điều chú ý ở đây là phải cấp lần lượt chứ không thể cấp 1 lúc 4 đầu đều là VCC, như thế sẽ không thể phân biệt được các hàng hay các cột Hay ngược lại chúng ta có thể cấp 0V cho đầu “A” còn tất cả các đầu kia đều là “5V”, như vậy khi phím 1 được ấn thì cả 2 đầu “A” và “1” đều
đo được là 0V, các đầu còn lại vẫn 5V
Nếu “A, B, C, D, 1, 2, 3, 4” lần lượt nối với P3.0 – P3.7 của AT89C52 thì ta có thể làm như sau:
Ta đặt P3.0 = 1(A=1), các chân kia =0, khi ấn phím nào trên hàng A thì cột đó sẽ = 1,
ta chia thành 4 trường hợp Sau đó P3.0 = 0 và P3.1 =1, ta lại có 4 trường hợp, sau 4 lần cho
A B C D ta có 16 trường hợp
Còn 1 phương pháp khác được gọi là dịch bit Đầu tiên ta set P1 = 00000001 (hay
11111110 cũng được) sau đó dịch 1 bit thành 00000010 > 00000100 > 00001000 với điều
Trang 23(Cấu tạo tương tự như ma trận bàn phím được nói ở trên)
Muốn đèn nào sáng ta cấp Vcc 5V cho hàng anot chứa đèn đó (1-8) và 0V cho cột catot chứa đèn đó (9-16) Nhưng để hiện chữ chúng ta không thể cấp từng cái như thế được Nguyên lý để hiện chữ trên ma trận led là chúng ta quét từng cột hay từng hàng, quét cột hay hàng là tùy mỗi người Ở đây ta sẽ xét quét cột:
Đầu tiên chúng ta phải bảng mã hóa các chữ, bảng này chúng ta có thể vẽ ra trên giấy rồi tính Ví dụ chữ A cột đầu tiên là 000111100 = 0x1C (tính từ 1 > 8) Ta phải cấp P1=0x1C
Sau đó P2.0 (cột số 9) bằng 0, tiếp theo cấp dữ liệu cột thứ 2 (P) rồi cho cột thứ 2 = 0,
cứ như thế ta sẽ có được chữ A Theo hiện tượng lưu ảnh ở mắt người ta sẽ thấy được chữ A, thời gian sáng của mỗi cột thường là 1ms – 5ms tùy mỗi người, nhanh quá sẽ không kịp sáng
và không thấy gì, chậm quá thì không đủ tần số, chúng ta sẽ thấy chớp chớp
Chú ý là khi 1 cột = 0 thì các cột kia phải = 1 nếu không thì dữ liệu của cột này sẽ được đưa vào cho tất cả các cột, khi đó không thấy được chữ mà chỉ thấy nó sáng 1 kiểu
Trang 24unsigned char phim,phim_temp,dau1=0,dau2=0;
unsigned int ramadd,kytu,rac;
Trang 28case 0xE7: phim = 1 ;break;
Trang 29case 0xED: phim = 31;break;
case 0x7D: phim = 60;if(kytu!=350&run == 0)d=~d;break;
//1101 1110 phim 12 danh dau
case 0xEE: phim = 51;break;
//1110 0111 phim 13 speed down
case 0xDE: phim = 46;break;
k++;
if(k == 5) {k=0; kytu = (phim-1)*8;}
else { kytu += 8;}
ramadd -= 16;
Trang 30dinhphim();
} }
else {
Trang 31unsigned int chip_port,tren=pc1,duoi=pb1;
unsigned char y,cot;
chip_port = 0x6000;//chip3 port 1
while(chip_port != 0x2000)
{
for (y=0;y<3;y++) {
for(cot=1;cot>0;cot<<=1) {
//0x6000>0x6001>0x6002>6003;0x4000>0x4001>0x4002>0x4003 }
chip_port=chip_port - 0x2003;
//0x6003 - 0x2003 = 0x4000;0x4003 - 0x2003 = 0x2000 }
}
void hienchucuoi(void)
{
unsigned int tren=pc1,duoi=pb1;
unsigned char cot;
Trang 32case 51: if(speed !=0)speed ;h=0;break;
case 52: if(speed !=6)speed++;h=0;break;
default: break;
} }
} if(rac > ramadd) rac = begin - 96 ; else rac += 2;
}
void dinhphimcuoi(void)
Trang 33case 1 : if(kytu == 0||kytu == 48||kytu == 96||kytu == 176||kytu == 256||kytu == 320 )
{dau1=8 ;napdau();}
break; //1 case 6 :
if(kytu == 0||kytu == 48||kytu == 96||kytu == 176||kytu == 256||kytu == 320 )
{dau1=16;napdau();}
break; //2 case 11:
if(kytu == 0||kytu == 48||kytu == 96||kytu == 176||kytu == 256||kytu == 320 )
{dau1=24;napdau();}
break; //3 case 16:
if(kytu == 0||kytu == 48||kytu == 96||kytu == 176||kytu == 256||kytu == 320 )
{dau1=32;napdau();}
break; //4 case 21:
if(kytu == 0||kytu == 48||kytu == 96||kytu == 176||kytu == 256||kytu == 320 )
{dau1=40;napdau();}
break; //5 case 26:
if(kytu==0||kytu==48||kytu==176)
{dau2=48;napdau();}
break; //6 case 31:
if(kytu==176||kytu==256)
{dau2=56;napdau();}
break; //7
Trang 34{dau2=64;napdau();}
break; //8 case 41: if(kytu == 40)
{dau2=72;napdau();}
break; //9 case 46: if(dau1!=0)
{dau1=0;napdau();}
else {dau2=0;napdau();}
break; //0 default: rac=ramadd;hienchucuoi();break;
} }
Trang 35{
delay_434us();
} }
}
Trang 36PH Ầ N IV:
Trang 37DAU
Trang 38gì thì phím kế tiếp sẽ được coi là một ký tự mới
Một phím khi được nhấn nhiều lần các ký tự sẽ lần lượt hiện như đã nói Sau khi hiện
ký tự thứ 5, nếu ta ấn tiếp tục thì sẽ quay lại ký tự đầu tiên
Phím “DEL” là xóa ký tự cuối cùng, “SPACE” là thêm 1 khoảng trắng sau ký tự cuối cùng Khi ấn 2 phím này được ấn cũng có 0.5s không thao tác
Phím “RUN/STOP” để chạy hay đoạn chương trình mình vừa nhập hay dừng đoạn chương trình đang chạy và trở về hiển thị chữ nhằm thay đổi 1 phần nội dung nếu muốn Trước khi bắt đầu chạy chương trình và sau khi dừng trở về chương trình cũ sẽ có một khoảng thời gian là 1s ma trận led không hiển thị
Phím “SPEED DOWN” và “SPEED UP” là 2 phím chức năng có tác dụng tăng giảm tốc độ chạy của chương trình khi đang chạy, 2 phím này chỉ hoạt động khi chạy chương trình Có 7 cấp tốc độ, khi ấn chạy chương trình thì mặc định là cấp thứ 4, muốn thay đổi tốc
độ thì ấn 1 trong 2 phím này Khi 1 trong 2 phím được ấn thì tốc độ được thay đổi nhưng chúng ta phải chờ 1s sau để có thể tiếp tục thay đổi tốc độ, 1 giây này nếu có phím tốc độ thì
sẽ không có hiệu lực, chỉ có hiệu lực với phím “RUN/STOP” khi ta muốn thoát khỏi chương trình