PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 27-07-2009, 11:01 PM   #1
Huynh Thanh San
Nhập môn đệ tử
 
Huynh Thanh San's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 8
:
Wink Mong Các Pro Help dùm mình việc Quang báo

Code:
===================================================================
Doan chuong trinh cua em nhu sau : 
#include <16f877a.h>
#use delay(clock=20000000)
#define hang PORTD
#define cot PORTB
#define Cot1 PORTC
#byte PORTD =0x08
#byte PORTB =0x06
#byte PORTC =0x07
#byte trisc =0x87
#byte trisb =0x86
#byte trisd =0x88
const unsigned char chuA[]={   0b00010000, //BitRB4
0b00011000,0b00010100,0b00011100,0b00010010,0b00011010,0b00010110,0b00011110,
                                 0b00100000, //BitRB5
0b00101000,0b00100100,0b00101100,0b00100010,0b00101010,0b00100110,0b00101110,
                                     0b01000000, //BitRB6
0b01001000,0b01000100,0b01001100,0b01000010,0b01001010,0b01000110,0b01001110,
                                       0b10000000, //BitRB7
0b10001000,0b10000100,0b10001100,0b10000010,0b10001010,0b10000110,0b10001110};
const unsigned char font[]={251,224,219,255,192,247,247,207,255,231,219,219,195,255,195,251,251,199,255,192,247,247,207,255,255,255,255,217,182,182,205,255,231,219,219,195,255,195,
251,251,199,255,239,87,87,135,255,255,255,129,126,126,129,255,241,110,110,129,255,254,14,246,248,255,231,235,237,0,239,255,110,110,110,145,255,125,0,127,
255,29,110,118,121,255,125,0,127,255,29,110,118,121,255,110,110,110,145,255,255,63,63,255,255,255,255,255,255,255,255,255};
void Display(unsigned char timer1,unsigned char k) {
unsigned char i,j,m;
set_tris_d(0);
set_tris_b(0);
set_tris_c(0);
for(i=0;i<timer1;i++)
 {
 m = 0;
 for(j=0;j<=20;j++)
  {
 Cot = chuA[j];
 Cot1 = chuA[j+32];
 hang  = 0xff;
    if(j>=k)
    {
hang = font[m];
m ++;
}
}
}
}
void main()
{
while(true){
unsigned char k=33,m=0;
while(true)
{
Display(33,k); 
k=k-1;
if(k==0)
{
while(true)
{
Display(1000,k); 
for(m=0;m<=20;m++)
{
font[m]=font[m+1];
hang  = 0xff;
}
}
}
}
}
}

===============================================================
File Kèm Theo
File Type: rar H T San.rar (55.7 KB, 147 lần tải)
__________________
THS

thay đổi nội dung bởi: Huynh Thanh San, 07-11-2009 lúc 08:37 AM. Lý do: Bạn nhớ đưa code vào thẻ code
Huynh Thanh San vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-07-2009, 01:40 AM   #2
phamminhtuan
Super Moderator
 
phamminhtuan's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 150
:
Bạn dùng chỉ mục trong mảng bị vượt ra ngoài phạm vi của mảng mà bạn có:
Code:
Cot = chuA[j];
 Cot1 = chuA[j+32];
Trong khi chuA có size là 32, bạn đưa index vào = j+32 luôn lớn hơn 32

Code:
hang = font[m];
với mảng font không thể vượt quá 1000 trong khi hàm Display(1000,k); có thể làm cho m đạt 1000.

Chừng đó thôi thì chương trình của bạn chạy hoàn toàn sai rồi
phamminhtuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-09-2009, 08:54 AM   #3
nhamdtk4
Đệ tử 3 túi
 
nhamdtk4's Avatar
 
Tham gia ngày: Feb 2009
Bài gửi: 47
:
Đây là sơ đồ mạch bằng Proteus 7.5sp3 (chỉ để mô phỏng ai bảo thiếu j thì mình... chịu thua).
Code thế nào có lẽ là bạn phải tự viết, nhưng viết theo hướng sau:
- Quét LED matrix chắc ko phải nói nhiều, bạn nhìn trong sơ đồ nha các chân 6 của 74138 đều được nối lên Vcc, 3 chân input của 8 con quét cột được nối vào 3 chân đầu tiên của portc, 3 chân input của con điều khiển 8 con kia được nối vào 3 chân tiếp theo đương nhiên là vẫn ở portc (như trong sơ đồ).
- Vậy thế làm thế nào để trong mỗi lần gọi hàm quét cột chỉ có một cột được nối xuống mass và gọi hàm quét cột lần tiếp theo thì chỉ cột tiếp theo được nối mass chứ ko phải cột nào khác: Bạn chỉ cần cho portc=0 trong lần gọi hàm quét cột đầu tiên và cứ tăng portc lên đến khi portc==63 thì portc phải nhận giá trị ban đầu (portc=0) là được.
- Tại sao lại thế là vì: Khỉ portc=0 thì 3 chân input của con 74138 điều khiển sẽ bằng 0 => con 74138 quét cột của matrix đầu tiên được chọn (tức là chỉ có output của con đó thay đổitrạng thái logic) mà vì portc=0 nên cũng chỉ có chân y0 của con đó =0 => chỉ có cột 1/64 của matrix sáng mà thôi khi tăng portc lên 1 đơn vị thì cột thứ 2 sáng.
Cứ làm như vậy đến khi portc=8 thì con 74138 điều khiển matrix 8x8 thứ 2 được chọn và khỉ đó vì input của nó =0 nên chỉ có chân y0 của nó bằng =0 => chỉ có cột 9/64 sáng. Cứ như vậy đến khi kết thúc quá trình.
Bạn hãy viết code theo hướng đó có vấn đề j thì mọi người sẽ giúp, chứ ko nên xin xỏ.
File Kèm Theo
File Type: zip LEDmatrix_138_16F.zip (21.4 KB, 181 lần tải)
nhamdtk4 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-09-2009, 10:50 AM   #4
vanthien
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 1
:
có gì nho giup tôi nha thoai ne sao thoai vô dien dàn 9 ko được trả lời dùm đi nha có gì giúp minh nha sang
vanthien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-10-2009, 10:39 AM   #5
aladin_09
Đệ tử 1 túi
 
Tham gia ngày: Dec 2008
Bài gửi: 14
:
Trích:
Nguyên văn bởi Huynh Thanh San View Post
mình có làm một mạch quang báo nhưng giải hoài mà kg ra Mạch dùng VXL PIC 16F877A , hiển thị LED Matrix 8x8 (với số lượng là 8 con), sử dụng quét cột là IC 74138 (số lượng là 9 con) 8 con xuất ra Led và 1 con điều khiển 8 con kia . nhưng không biết kết nối sao cả với lại chương trình thì ra sao , với 4 led matrix thì mình biết còn hơn 4 thì bó chân , zỳ zậy mong các sư huynh Pro help giùm cho (mong các Pro bỏ chút ít thời gian thiết kế trên Proteus và viết code dùm để tiểu đệ học theo). Chân thành cảm ơn các Pro trước nhá.
Bạn dùng cách này cũng được, nhưng mở rộng ra nhiều thì hơi khó.
Bạn thử tìm hiểu 74HC595 và ULN 2803 xem sao? 2 con này có thêm phần hút dòng và chống nhiễu rất tốt.
Chúc thành công!
aladin_09 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2009, 10:38 AM   #6
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Trích:
Nguyên văn bởi aladin_09 View Post
Bạn dùng cách này cũng được, nhưng mở rộng ra nhiều thì hơi khó.
Bạn thử tìm hiểu 74HC595 và ULN 2803 xem sao? 2 con này có thêm phần hút dòng và chống nhiễu rất tốt.
Chúc thành công!
nên kết hợp con 595 + ULN2803 = con TPIC6B595 . Mạch gọn + bớt phần rủi ro về IC
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


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:57 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