Ðăng Nhập

View Full Version : Hiển thị ma trận LED


nguyenductu2310
25-05-2009, 09:40 AM
Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng:

#include <16f877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT
#device 16f877a*=16 adc=8
#use delay(clock=20000000)
int8 y,i;
int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110};
int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110};
int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001};
int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111};

void sen595(int8 x)
{
#bit fla=x.7;
output_high(PIN_B0);
for (i=0;i<8;i++)
{
if (fla==1)
output_high(PIN_B1); //Dich 1 bit vao 74HC595
else output_low(PIN_B1);
output_low(PIN_B0); //Tao xung Clock
output_high(PIN_B0); //tao xung Clock
x = x<<1; //Dich trai 1 bit cua Data
}
output_low(PIN_B2); //Chot 8 bit cho dau ra
output_high(PIN_B2); //Chot 8 bit cho dau ra
}

void main()
{
set_tris_b(0x00);
while(1)
{
for (y=0;y<7;y++)
{
sen595(Cot1[y]); //Gui ky tu C
sen595(Cot2[y]); //Gui ky tu I
sen595(Cot3[y]); //Gui ky tu P
output_d(Dong[y]);
delay_ms(50); //Tao thoi gian tre
}
}
}

nguyenductu2310
25-05-2009, 01:47 PM
Các cao thủ đâu hít rùi ấy nhỉ? em tìm hoài mà ko thấy ai hết trơn. hichic

namqn
25-05-2009, 02:33 PM
Nếu code của bạn chạy đúng khi chạy chậm thì khi chạy nhanh nó vẫn đúng thôi, nhưng Proteus có thể sẽ không thể hiện đúng nếu bạn quét quá nhanh (không phải vì thuật toán sai, mà chỉ là hiệu ứng hoạt nghiệm).

Để thử nghiệm code với thời gian quét thực, hãy dùng mạch thực.

Thân,

tungtot_vl
25-05-2009, 03:18 PM
[QUOTE=nguyenductu2310;26064]Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng:

#include <16f877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT
#device 16f877a*=16 adc=8
#use delay(clock=20000000)
int8 y,i;
int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110};
int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110};
int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001};
int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111};

void sen595(int8 x)
{
#bit fla=x.7;
output_high(PIN_B0);
for (i=0;i<8;i++)
{
if (fla==1)
output_high(PIN_B1); //Dich 1 bit vao 74HC595
else output_low(PIN_B1);
output_low(PIN_B0); //Tao xung Clock
output_high(PIN_B0); //tao xung Clock
x = x<<1; //Dich trai 1 bit cua Data
}
output_low(PIN_B2); //Chot 8 bit cho dau ra
output_high(PIN_B2); //Chot 8 bit cho dau ra
}

void main()
{
set_tris_b(0x00);
while(1)
{
for (y=0;y<7;y++)
{
sen595(Cot1[y]); //Gui ky tu C
sen595(Cot2[y]); //Gui ky tu I
sen595(Cot3[y]); //Gui ky tu P
output_d(Dong[y]);
delay_ms(50); //Tao thoi gian tre
}
}
}[/QUOTE

cái này bạn viết xem cũng được đấy.
đã chạy đúng rồi nhưng delay lớn quá làm chữ hơi giật
thêm vào đoạn này nhé
delay_ms(8); //Tao thoi gian tre
output_d(0xff);
chúc vui

nguyenductu2310
25-05-2009, 05:01 PM
Cảm ơn đại ca nha! Thêm đoạn code vào chạy ổn lắm. Đúng yêu cầu lun!
Phù...! hết đau đầu mấy ngày rùi....

vanluong2003
12-06-2009, 10:26 AM
Xin chào các bạn. Tôi có 1 bảng led matran đa sắc trong nhà. Muốn thay đổi nội dung trực tiếp vào con 8515L ( bảng điện tử không có cổng com kết nối) thì dùng phần mềm gì để nạp dữ liệu mới vào? . Rất mong mọi người giúp đỡ!

Huynh Thanh San
20-11-2009, 03:51 AM
[QUOTE=tungtot_vl;26081][QUOTE=nguyenductu2310;26064]Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng:

#include <16f877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT
#device 16f877a*=16 adc=8
#use delay(clock=20000000)
int8 y,i;
int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110};
int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110};
int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001};
int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111};

void sen595(int8 x)
{
#bit fla=x.7;
output_high(PIN_B0);
for (i=0;i<8;i++)
{
if (fla==1)
output_high(PIN_B1); //Dich 1 bit vao 74HC595
else output_low(PIN_B1);
output_low(PIN_B0); //Tao xung Clock
output_high(PIN_B0); //tao xung Clock
x = x<<1; //Dich trai 1 bit cua Data
}
output_low(PIN_B2); //Chot 8 bit cho dau ra
output_high(PIN_B2); //Chot 8 bit cho dau ra
}

void main()
{
set_tris_b(0x00);
while(1)
{
for (y=0;y<7;y++)
{
sen595(Cot1[y]); //Gui ky tu C
delay_ms(8);
output_d(255);
sen595(Cot2[y]); //Gui ky tu I
delay_ms(8);
output_d(255);
sen595(Cot3[y]); //Gui ky tu P
output_d(Dong[y]);
delay_ms(8);
output_d(255);

}
}
}[/QUOTE


==========================================
Voi code zay bay gio muon cho 3 cai chu cip chay thi sao ha ban , nen them zy zo them

tinhanh85
31-05-2010, 10:01 PM
lam on ban goi cho minh file .hẽ duoc kg minh xuat ra sao chay kg duoc

HAI1817
05-06-2010, 03:05 PM
các anh chị giúp em code này với,khi em nối hai chân bên proteus thì led thứ 2,4 bên phải qua nó không chạy.ngắt ra thì nó chạy nếu như code em sai sửa như thế nào...

HAI1817
14-06-2010, 07:07 PM
Sao không ai giúp em vậy?

manhdktd
14-07-2010, 11:47 PM
[QUOTE=nguyenductu2310;26064]Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng:

#include <16f877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT
#device 16f877a*=16 adc=8
#use delay(clock=20000000)
int8 y,i;
int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110};
int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110};
int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001};
int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111};

void sen595(int8 x)
{
#bit fla=x.7;
output_high(PIN_B0);
for (i=0;i<8;i++)
{
if (fla==1)
output_high(PIN_B1); //Dich 1 bit vao 74HC595
else output_low(PIN_B1);
output_low(PIN_B0); //Tao xung Clock
output_high(PIN_B0); //tao xung Clock
x = x<<1; //Dich trai 1 bit cua Data
}
output_low(PIN_B2); //Chot 8 bit cho dau ra
output_high(PIN_B2); //Chot 8 bit cho dau ra
}

void main()
{
set_tris_b(0x00);
while(1)
{
for (y=0;y<7;y++)
{
sen595(Cot1[y]); //Gui ky tu C
sen595(Cot2[y]); //Gui ky tu I
sen595(Cot3[y]); //Gui ky tu P
output_d(Dong[y]);
delay_ms(50); //Tao thoi gian tre
}
}
}[/QUOTE

cái này bạn viết xem cũng được đấy.
đã chạy đúng rồi nhưng delay lớn quá làm chữ hơi giật
thêm vào đoạn này nhé
delay_ms(8); //Tao thoi gian tre
output_d(0xff);
chúc vui
cái này muốn chạy thì làm thế nào hả bấc.

phandinhdao3230
30-07-2010, 03:42 PM
Các cao thủ vừa rồi kiếm được nhiều nên rủ nhau đi nghỉ mát hết rồi

HAI1817
05-08-2010, 03:53 PM
không ai giúp em vậy ,cho em ý kiến đi

HAI1817
05-08-2010, 03:55 PM
cái này muốn dịch chữ phải làm sao
#include <16f877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT
#device 16f877a*=16 adc=8
#use delay(clock=20000000)
int8 y,i;
int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110};
int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110};
int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001};
int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111};

void sen595(int8 x)
{
#bit fla=x.7;
output_high(PIN_B0);
for (i=0;i<8;i++)
{
if (fla==1)
output_high(PIN_B1); //Dich 1 bit vao 74HC595
else output_low(PIN_B1);
output_low(PIN_B0); //Tao xung Clock
output_high(PIN_B0); //tao xung Clock
x = x<<1; //Dich trai 1 bit cua Data
}
output_low(PIN_B2); //Chot 8 bit cho dau ra
output_high(PIN_B2); //Chot 8 bit cho dau ra
}

void main()
{
set_tris_b(0x00);
while(1)
{
for (y=0;y<7;y++)
{
sen595(Cot1[y]); //Gui ky tu C
sen595(Cot2[y]); //Gui ky tu I
sen595(Cot3[y]); //Gui ky tu P
output_d(Dong[y]);
delay_ms(50); //Tao thoi gian tre
}
}
}[/QUOTE

cái này bạn viết xem cũng được đấy.
đã chạy đúng rồi nhưng delay lớn quá làm chữ hơi giật
thêm vào đoạn này nhé
delay_ms(8); //Tao thoi gian tre
output_d(0xff);
chúc vui

manhdktd
05-08-2010, 04:13 PM
CHẠY tử trên xuống dưới và ngược lại thì dịch hàng.
còn chạy từ trái sang phải thì vẫn đang nghĩ cách.
mình có 1 điều là nếu dùng 595 thì độ dài chữ sẽ chỉ dài bằng độ dài của matran led .nhưng khi nhìn thấy biển quảng cáo ở ngoài đường thì độ dài chữ là lớn hơn.vẫn hắc mắc chỗ đó,mong mọi người giải đáp.
bác nào làm được chữ chạy trái phải rồi thì mong chỉ bảo.

namnq_hut
06-08-2010, 01:59 AM
hay quá :d, cám ơn các bác nhìu nhìu :x

HAI1817
11-08-2010, 11:11 AM
dạo này ít cao thủ chỉ dẩn quá,tí ý kiến cũng không có

manhdungmta
15-08-2010, 04:54 AM
matran led tôi đã làm rồi. cách của tôi là dùng ngắt để dịch chữ. khi cho hiển thị bạn nên quét luôn toàn bộ chuỗi chữ đó. như vậy dù chuỗi dài hay ngắn thì nó đều hiển thị giống nhau.

pic_13
15-08-2010, 09:11 PM
matran led tôi đã làm rồi. cách của tôi là dùng ngắt để dịch chữ. khi cho hiển thị bạn nên quét luôn toàn bộ chuỗi chữ đó. như vậy dù chuỗi dài hay ngắn thì nó đều hiển thị giống nhau.

chưa hiểu ý bạn nói lắm ,bạn có thể giải thích rõ hơn không
chẳng hạn tôi định quét 3 led matrix 8x8 dòng chữ ''Toi ghet em'' từ trái qua phải thì làm thế nào để cho nó chạy lần lượt .với một led 8x8 thì mình làm nó chạy rồi còn khi ghép nhiều led lại thì hiện tại vẫn bó tay.
pác nào làm ơn chỉ em với. thanks

xungba22
17-08-2010, 12:31 AM
muốn độ dài chữ lớn hơn thì dùng led đơn kết nối thành led matran, thế là chữ dài thôi.

pic_13
17-08-2010, 10:36 AM
muốn độ dài chữ lớn hơn thì dùng led đơn kết nối thành led matran, thế là chữ dài thôi.

pác nói vắn tắt quá em không hiểu ,pác nói rõ hơn đi.

DCP
23-11-2010, 10:04 AM
có bác nào viết ams không ,xem giúp em cái ct này chút.
không biết sao mà nó chả chịu chạy gì cả.
;chuong trinh dieu khien 4led8x8
;voi cac hang duoc noi vao nhau va du lieu duoc
;gui vao cac cot thong qua cac ic 74595.
LIST P=16F84A
INCLUDE P16F84A.INC
CBLOCK 0X0C
DELAY1,DELAY2,DEMBIT,DEMTB,DEMLAP,DL1,DL2,DL3,DL4, DL5,DL6,DL7,DL8
DL9,DL10,DL11,DL12,DL13,DL14,DL15,DL16,DL17,DL18,D L19,DL20,DL21,DL22
DL23,DL24,DL25,DL26,DL27,DL28,DL29,DL30,DL31,DL32, RAM
ENDC
#DEFINE DATA PORTA,0
#DEFINE CLOCK PORTA,1
#DEFINE CHOTB PORTA,2
#DEFINE CLEAR PORTA,3
ORG 0X00
MAIN BSF STATUS,5
MOVLW B'10000'
MOVWF TRISA
CLRW
MOVWF TRISB
BCF STATUS,5
CLRW
MOVWF PORTA
MOVWF PORTB
MOVWF DEMBIT
MOVWF DEMTB
MOVWF DEMLAP
START
MOVLW 0XFF
MOVWF DL1
MOVWF DL2
MOVWF DL3
MOVWF DL4
MOVWF DL5
MOVWF DL6
MOVWF DL7
MOVWF DL8
MOVWF DL9
MOVWF DL10
MOVWF DL11
MOVWF DL12
MOVWF DL13
MOVWF DL14
MOVWF DL15
MOVWF DL16
MOVWF DL17
MOVWF DL18
MOVWF DL19
MOVWF DL20
MOVWF DL21
MOVWF DL22
MOVWF DL23
MOVWF DL24
MOVWF DL25
MOVWF DL26
MOVWF DL27
MOVWF DL28
MOVWF DL29
MOVWF DL30
MOVWF DL31
MOVWF DL32
START1 MOVLW D'100'
MOVWF DEMLAP
CALL HIEU_UNG
INCF DEMTB
MOVF DEMTB,W
CALL TABLE
MOVWF DL32
XORLW D'10'
BTFSC STATUS,Z
GOTO START
START2 DECFSZ DEMLAP
GOTO START3
GOTO START1
START3 CALL QUET_DL
GOTO START2
QUET_DL CALL XOA
MOVF DL32,W
CALL SUAT_BIT
MOVF DL31,W
CALL SUAT_BIT
MOVF DL30,W
CALL SUAT_BIT
MOVF DL29,W
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG1
CALL DELAY
CALL XOA
MOVF DL28,W
CALL SUAT_BIT
MOVF DL27,W
CALL SUAT_BIT
MOVF DL26,W
CALL SUAT_BIT
MOVF DL25
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG2
CALL DELAY
CALL XOA
MOVF DL24,W
CALL SUAT_BIT
MOVF DL23,W
CALL SUAT_BIT
MOVF DL22,W
CALL SUAT_BIT
MOVF DL21,W
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG3
CALL DELAY
CALL XOA
MOVF DL20,W
CALL SUAT_BIT
MOVF DL19,W
CALL SUAT_BIT
MOVF DL18,W
CALL SUAT_BIT
MOVF DL17,W
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG4
CALL DELAY
CALL XOA
MOVF DL16,W
CALL SUAT_BIT
MOVF DL15,W
CALL SUAT_BIT
MOVF DL14,W
CALL SUAT_BIT
MOVF DL13,W
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG5
CALL DELAY
CALL XOA
MOVF DL12,W
CALL SUAT_BIT
MOVF DL11,W
CALL SUAT_BIT
MOVF DL10,W
CALL SUAT_BIT
MOVF DL9,W
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG6
CALL DELAY
CALL XOA
MOVF DL8,W
CALL SUAT_BIT
MOVF DL7,W
CALL SUAT_BIT
MOVF DL6,W
CALL SUAT_BIT
MOVF DL5,W
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG7
CALL DELAY
CALL XOA
MOVF DL4,W
CALL SUAT_BIT
MOVF DL3,W
CALL SUAT_BIT
MOVF DL2,W
CALL SUAT_BIT
MOVF DL1,W
CALL SUAT_BIT
CALL CHOT
CALL QUET_HANG8
CALL DELAY
RETURN
QUET_HANG1
MOVLW B'00000001'
MOVWF PORTB
RETURN
QUET_HANG2 MOVLW B'00000010'
MOVWF PORTB
RETURN
QUET_HANG3 MOVLW B'00000100'
MOVWF PORTB
RETURN
QUET_HANG4 MOVLW B'00001000'
MOVWF PORTB
RETURN
QUET_HANG5 MOVLW B'00010000'
MOVWF PORTB
RETURN
QUET_HANG6 MOVLW B'00100000'
MOVWF PORTB
RETURN
QUET_HANG7 MOVLW B'01000000'
MOVWF PORTB
RETURN
QUET_HANG8 MOVLW B'10000000'
MOVWF PORTB
RETURN
SUAT_BIT
MOVWF RAM
MOVLW D'8'
MOVWF DEMBIT
LOOP BCF DATA
BTFSC RAM,7
BSF DATA
BSF CLOCK
NOP
BCF CLOCK
RLF RAM,1
DECFSZ DEMBIT
GOTO LOOP
RETURN
XOA BCF CLEAR
NOP
BSF CLEAR
RETURN
CHOT BSF CHOTB
NOP
BCF CHOTB
RETURN
HIEU_UNG MOVF DL2,W
MOVWF DL1
MOVF DL3,W
MOVWF DL2
MOVF DL4,W
MOVWF DL3
MOVF DL5,W
MOVWF DL4
MOVF DL6,W
MOVWF DL5
MOVF DL7,W
MOVWF DL6
MOVF DL8,W
MOVWF DL7
MOVF DL9,W
MOVWF DL8
MOVF DL10,W
MOVWF DL9
MOVF DL11,W
MOVWF DL10
MOVF DL12,W
MOVWF DL11
MOVF DL13,W
MOVWF DL12
MOVF DL14,W
MOVWF DL13
MOVF DL15,W
MOVWF DL14
MOVF DL16,W
MOVWF DL15
MOVF DL17,W
MOVWF DL16
MOVF DL18,W
MOVWF DL17
MOVF DL19,W
MOVWF DL18
MOVF DL20,W
MOVWF DL19
MOVF DL21,W
MOVWF DL20
MOVF DL22,W
MOVWF DL21
MOVF DL23,W
MOVWF DL22
MOVF DL24,W
MOVWF DL23
MOVF DL25,W
MOVWF DL24
MOVF DL26,W
MOVWF DL25
MOVF DL27,W
MOVWF DL26
MOVF DL28,W
MOVWF DL27
MOVF DL29,W
MOVWF DL28
MOVF DL30,W
MOVWF DL29
MOVF DL31,W
MOVWF DL30
MOVF DL32,W
MOVWF DL31
RETURN
DELAY
CLRF DELAY1
MOVLW D'1'
MOVWF DELAY2
LOOP1 DECFSZ DELAY1
GOTO LOOP1
DECFSZ DELAY2
GOTO LOOP1
RETURN
TABLE ADDWF PCL
RETLW 0X00
RETLW B'10000001'
RETLW B'01111110'
RETLW B'01111110'
RETLW B'10111101'
RETLW B'11111111'
RETLW B'11111111'
RETLW B'10000000'
RETLW B'01111111'
RETLW B'01111111'
RETLW B'10000000'
RETLW B'11111111'
RETLW B'11111111'
RETLW B'00000000'
RETLW B'11111011'
RETLW B'11101111'
RETLW B'00000000'
RETLW B'11111111'
RETLW B'11111111'
RETLW B'10000001'
RETLW B'01111110'
RETLW B'01011110'
RETLW B'00011101'
RETLW B'11111111'
RETLW B'11111111'
RETLW B'11111111'
RETLW D'10'
END

DCP
24-11-2010, 08:45 AM
sao không có bác nào giúp vậy?

DCP
01-12-2010, 11:00 PM
không biết các cao thủ trong diễn đàn đi đâu hết rồi vậy?
hay tại thấy em GÀ quá?
xin các anh giúp đỡ nhé.

hoathanlq
09-12-2010, 05:13 PM
không biết các cao thủ trong diễn đàn đi đâu hết rồi vậy?
hay tại thấy em GÀ quá?
xin các anh giúp đỡ nhé.
ASM nhìn hoa hết cả mắt...:(

anhxuan_k53
14-12-2010, 01:32 PM
nếu là pic16f84nthif sao các bác? nhân tiện cho em hỏi: muốn chuyền đoạn code đó đang viết trên mplab sang proteus để xem hình thì ntn? mong các giúp zới.

DCP
14-12-2010, 09:57 PM
ý bạn là sao vậy?
bạn muốn xem hình gì ?

phuongkaka
04-04-2013, 09:51 PM
minh moi hoc pic 18f4550 phai viet chuong trinh dieu khien led ma tran chay chu ai biet thi giup minh voi
cam on nhieu

phuongkaka
04-04-2013, 10:24 PM
m viet ct cho c18 dung p18f4550 led ma tran bao loi ai biet sua dum minh voi
#include <p18f4550.h>
#fuse NOWDT,HS,PUT,NOPROTECT
#device 18f4550 *=16 adc=8
#use delay(clock=20000000)
int8 y,i;
int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110};
int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110};
int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001};
int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111};

void sen595(int8 x)
{
#bit fla=x.7;
output_high(PIN_B0);
for (i=0;i<8;i++)
{
if (fla==1)
output_high(PIN_B1); //Dich 1 bit vao 74HC595
else output_low(PIN_B1);
output_low(PIN_B0); //Tao xung Clock
output_high(PIN_B0); //tao xung Clock
x = x<<1; //Dich trai 1 bit cua Data
}
output_low(PIN_B2); //Chot 8 bit cho dau ra
output_high(PIN_B2); //Chot 8 bit cho dau ra
}

void main()
{
set_tris_b(0x00);
while(1)
{
for (y=0;y<7;y++)
{
sen595(Cot1[y]); //Gui ky tu C
sen595(Cot2[y]); //Gui ky tu I
sen595(Cot3[y]); //Gui ky tu P
output_d(Dong[y]);
delay_ms(50); //Tao thoi gian tre
}
}
}
delay_ms(8); //Tao thoi gian tre
output_d(0xff);

pstin
07-04-2013, 12:02 PM
Em đang làm thử mạch hiển thị LED matrix, không hiểu tại sao khi cho nháy LED với thời gian chậm để kiểm tra thì LED báo đúng. Còn khi rút ngắn delay time, LED hiển thị không đúng như lúc chạy chậm. Các đại ca giúp em với!!! Please, em tìm lỗi mấy ngày rùi mà không được.
Đây là code của chương trình và mạch mô phỏng:

#include <16f877a.h>
#fuses NOWDT,HS,PUT,NOPROTECT
#device 16f877a*=16 adc=8
#use delay(clock=20000000)
int8 y,i;
int8 Cot1[]={0b00001110, 0b00010001, 0b00000001, 0b00000001, 0b00000001, 0b00010001, 0b00001110};
int8 Cot2[]={0b00001110, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00001110};
int8 Cot3[]={0b00001111, 0b00010001, 0b00010001, 0b00001111, 0b00000001, 0b00000001, 0b00000001};
int8 Dong[]={0b11111110, 0b11111101, 0b11111011, 0b11110111, 0b11101111, 0b11011111, 0b10111111};

void sen595(int8 x)
{
#bit fla=x.7;
output_high(PIN_B0);
for (i=0;i<8;i++)
{
if (fla==1)
output_high(PIN_B1); //Dich 1 bit vao 74HC595
else output_low(PIN_B1);
output_low(PIN_B0); //Tao xung Clock
output_high(PIN_B0); //tao xung Clock
x = x<<1; //Dich trai 1 bit cua Data
}
output_low(PIN_B2); //Chot 8 bit cho dau ra
output_high(PIN_B2); //Chot 8 bit cho dau ra
}

void main()
{
set_tris_b(0x00);
while(1)
{
for (y=0;y<7;y++)
{
sen595(Cot1[y]); //Gui ky tu C
sen595(Cot2[y]); //Gui ky tu I
sen595(Cot3[y]); //Gui ky tu P
output_d(Dong[y]);
delay_ms(50); //Tao thoi gian tre
}
}
}

Nếu chạy chậm là đúng thì ok rồi!..
Chạy nhanh led trong protues đa phần là sai,..hiển thị tùm lum hết..
Bạn làm mạch thật là ok...

phuongkaka
22-04-2013, 08:40 PM
#include<p18f4550.h>
#include<Delays.h>
void write74595();

void main()
{ ADCON1=0xFFFF;TRISA=0;TRISB=0;TRISD=0;TRISC=0;TRIS E=0;
PORTA=0;PORTB=0;PORTC=0;PORTD=0;PORTE=0;
while(1)
{ int i,j=0xff;
unsigned long int a=0X00, b=0Xff;
for(i=0;i<32;i++)
{
a=a<<1;
PORTD=0X07,0XDB,0XDD,0XDB,0X07;//CHU A
write74595(a,a>>8,a>>16,a>>24);
Delay10KTCYx(10);

b=b<<1;
PORTD=0XFF,0XFF,0XEE,0XDE,0X80,0XFE,0XFE,0XFF ;//SO1
write74595(b,b>>8,b>>16,b>>24);
Delay10KTCYx(10);

a=a<<1;
PORTD=0XFF,0XFF,0XD8,0XB6,0XB6,0XB6,0XCE,0XFF ;//SO2
write74595(a,a>>8,a>>16,a>>24);
Delay10KTCYx(10);

a=a<<1;
PORTD=0XFF,0XFF,0XDD,0XB6,0XB6,0XB6,0XC9,0XFF ; //SO3
write74595(a,a>>8,a>>16,a>>24);
Delay10KTCYx(10);

a=a<<1;
PORTD=0XFF,0XFF,0XE3,0XDB,0XBB,0XFB,0X80,0XFF ;//SO4
write74595(a,a>>8,a>>16,a>>24);
Delay10KTCYx(10);


}
}

}
void write74595(unsigned char a,unsigned char b,unsigned char c,unsigned char d)
{ unsigned char k;
for(k=0;k<8;k++)
{
PORTEbits.RE0=d;
PORTEbits.RE1=1;
Delay10TCYx(1);
PORTEbits.RE1=0;
d=(d>>1);
}

for(k=0;k<8;k++)
{
PORTEbits.RE0=c;
PORTEbits.RE1=1;
Delay10TCYx(1);
PORTEbits.RE1=0;
c=(c>>1);
}

for(k=0;k<8;k++)
{
PORTEbits.RE0=b;
PORTEbits.RE1=1;
Delay10TCYx(1);
PORTEbits.RE1=0;
b=(b>>1);
}

for(k=0;k<8;k++)
{
PORTEbits.RE0=a;
PORTEbits.RE1=1;
Delay10TCYx(1);
PORTEbits.RE1=0;
a=(a>>1);
}
PORTEbits.RE2=0;
PORTEbits.RE2=1;
Delay10TCYx(1);
PORTEbits.RE2=0;
}