PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 16-04-2012, 11:16 PM   #1
lambaotrung
Đệ tử 5 túi
 
Tham gia ngày: Jan 2010
Bài gửi: 96
:
Hướng Dẩn làm LED 8x8, 8x16, 74hc595 và PIC

Chào mọi người Mình cũng là 1 người đang học về VDK PIC, chỉ mới thôi còn rất non.
Cái hôm muốn gởi đến các bạn là cách hiện thị led Matrix 8x16 từ cơ bản đến chạy chữ và hướng phát triển đến tối đa theo kiến thức của Mình biết.
Bắt đầu vào việc thì mình xin cảm ơn bác LongTu trong diễn đàn của PICVIETNAM của chúng ta rất nhiều, Vì anh ấy đã tặng tụy giúp mình rất nhiều kiến thức về VDK, chắc các bạn điều biết đến bác longtu, anh ấy cũng là người viết rất nhiều bài chia sẻ kinh nghiệm về làm modell GPS.

I. Phần giới thiệu và dưa chử lên LED 8x8:
1. Đầu tiền thì mình sẽ giúp các bạn hiểu về LED Matrix 8x8:
Rất để tìm trên goole.
2. Nguyên lý làm việc của ic 74hc595:
Lên google bắm chử “ datasheet 74hc595” là ra hết.
Mình chỉ giởi thiệu về 4 chân cơ bản củ 595.


Chân 14: là chân DATA input dưa dử liệu vào thanh ghi của IC. Tăt nhiên 1 con IC 595 chỉ chứ 1 dc 1bye =8 bit dử liệu.
Chân 11: là chân Shift_clock, khi tạo 1 xung cao thấp ( 1,0) tại chân để đưa dử liệu từ chân 14 vào RAM của 595
Chân 12: là chân Latch_clock, khi tạo 1 xung ( 1,0 ) ở chân này thì nó sẻ đưa 8 bit dử liệu từ RAM ra 8 chân Q.
Chân 10: là chân cho phép xuất hay ko xuất dử liệu “ chân này ta để trống ở trường hợp này.

3. Cách tạo font chử bằng excell:

file đính kèm ở cuối bài.

4. Cách viết chương trình và giải thuật giúp hiễn thị từ 595 sang LED 8x8:
Về đoạn này khi các bạn đã nắm dc nguyên tắc hoạt động của 595 và led ma trix thì chúng tả sẻ dể dàng viết chứ lên led 1 cách dể dàng
a. Việc đầu tiền là các bạn tạo 1 chu kỳ thơi giàn để mình dưa giá trị ra 595, ơ đây mình timer 2 của PIC để định thời quét led.
b. Tạo vòng lập để đưa toàn bộ dử liểu từ mãng hiển thị lên 595 ở đây mảng hiễn thị của mình là char const buffer_mh[8]={…… code PICVIETNAM…};, mãng chúng ta có 8 thành phần vì chúng ta chỉ làm 1 led 8x8 thui.
Vòng lặp chúng ta sẽ viết trong timer2 sẻ viết như sao.
//--------------------------code ------------------//
#int_timer2
void timer2()
{
INT i,y ;
for(i=0;i<8;i++)
{
//------------------- vòng lặp đưa dử liệu vào 595-----//
for(y=0;y<8;y++)
{
DATA=bit_test(buffer_mh[y],i); // đưa giá trị vào 959
SHIFT_CLOCK=1;
SHIFT_CLOCK=0;
}
// khi đã nạp đủ 8 bit vào 595.
LATCH_CLOCK=1; // lúc này chúng ta cho 595 xuất ra 8 chân Q.
LATCH_CLOCK=0;
//-----------------------------------------------------------------//
//--------------- cách quát hàng bằng 595/--------------//
// cách này sẽ giúp tiết kiệm chân cho PIC, cách viết tương tự trên//
for(y=0;y<8;y++)
{
c4=bit_test(~hang[i],y);
c3=1;
c3=0;
}
c5=1;
c5=0;
//----------------------------- END --------------------------------------//

ở chổ này thi mọi người sẻ hiện thị dực ngững gì có trong mãng buffer_mh. Khá là đơn giản hé cách bạn cứ thể tăng dần số led matrix lên thành 2 con 3 con thì 595 củng tăng theo như led. Như vậy code mình sẽ thay đổi thoe số con 595 tăng dần.
//---------------------------------------- CODE ---------------------------------------------------------------
#int_timer2
void timer2()
{
INT i,y ;
INT IC=1 ; // ic=1 ở d6ay9 là chúng ta chỉ dùng 1 con
for(i=0;i<8;i++)
{
//------------------- vòng lặp đưa dử liệu vào 595-----//
for(y=0;y<8*IC;y++) // chú ý chổ này.
{
//-- như vậy các bạn sẻ tăng số IC 595 lên và biến IC củng thay đổi theo--//
//----------------------------------- END ----------------------------------------------------------


II. Làm cho LED chạy chử :
Cũng rất đơn giản cách bạn ah. Ta tạo them 1 biến index và khai báo lại cho mảng buffer_mh của mình như sau

Char const buffer_mh[8][32]={ nội dung phải có 32 thành phần }
Nếu chử nghĩa nhiều quá thi các bạn có thể tăng lên buffer_mh[8][64], ….. tùy nhé.

Quay lại biến index thì chúng ta sẻ tăng hoặc giảm dần biến này tùy thoe mình muốn chạy chữ từ “trái sang phải “ hay từ “phải sang trái”
Cú pháp như sau



//----------------------Code -------------------------//
Int Index=0;

Void main()
{
//------------ Khai bao ngắt,set_tris…..---------------//

While(true)
{
Index++;
Delay_ms(10); // cái này nó quyết định tốc dộ dịch chuyển của chúng ta.
If(index>=32) index=0; // để làm nó chạy đi chạy lại.
}

}
//---------------------------- END -------------------//



Trong phần dưa dử liệu vào 595 chúng ta sẻ viết lại tý như sau:
//--------------------------code ----------------------//
#int_timer2
void timer2()
{
INT i,y ;
Int ic=2; //---------- ở đây ta tăng lên 2 con Led Matrix.
for(i=0;i<8;i++)
{
//------------------- vòng lặp đưa dử liệu vào 595-----//
for(y=0;y<8*ic;y++)
{
DATA=bit_test(buffer_mh[0][index*y],i); // đưa giá trị vào 959
SHIFT_CLOCK=1;
SHIFT_CLOCK=0;

//------------ hoàn thiện các phần còn lại nhé------------------//
//------------------------- END ------------------------------//
• Ghi chú:
Để giúp các bạn dể hiểu hơn mình sẻ đính kèm phần protues mô phỏng của mình lên cho cách bác về tìm hiểu nhé.


Đây là lần đầu tiền mình chia sẻ các bài mình biết có gì sai sốt mong người thông cảm và chỉ bảo thêm.
File Kèm Theo
File Type: rar Matrix_3.rar (71.4 KB, 1635 lần tải)
lambaotrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 11:41 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam