Ðăng Nhập

View Full Version : Mong Các Pro Help dùm mình việc Quang báo


Huynh Thanh San
27-07-2009, 11:01 PM
================================================== =================
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,0b0001 1010,0b00010110,0b00011110,
0b00100000, //BitRB5
0b00101000,0b00100100,0b00101100,0b00100010,0b0010 1010,0b00100110,0b00101110,
0b01000000, //BitRB6
0b01001000,0b01000100,0b01001100,0b01000010,0b0100 1010,0b01000110,0b01001110,
0b10000000, //BitRB7
0b10001000,0b10000100,0b10001100,0b10000010,0b1000 1010,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,25 5,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,1 27,
255,29,110,118,121,255,125,0,127,255,29,110,118,12 1,255,110,110,110,145,255,255,63,63,255,255,255,25 5,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;
}
}
}
}
}
}

================================================== =============

phamminhtuan
30-07-2009, 01:40 AM
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ó:

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


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

nhamdtk4
26-09-2009, 08:54 AM
Đâ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ỏ.

vanthien
29-09-2009, 10:50 AM
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

aladin_09
31-10-2009, 10:39 AM
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!

Mr.Bi
21-11-2009, 10:38 AM
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