PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   PIC - Thiết kế và Ứng dụng (http://www.picvietnam.com/forum/forumdisplay.php?f=23)
-   -   Hiển thị ma trận LED (http://www.picvietnam.com/forum/showthread.php?t=4166)

nguyenductu2310 25-05-2009 09:40 AM

Hiển thị ma trận LED
 
2 Attachment(s)
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

Lmd
 
[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

Them chut xiu nua
 
[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

không biết code điên hay proteus 7.4 điên
 
1 Attachment(s)
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=tungtot_vl;26081]
Trích:

Nguyên văn bởi nguyenductu2310 (Post 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

Trích:

Nguyên văn bởi manhdungmta (Post 38010)
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

Trích:

Nguyên văn bởi xungba22 (Post 38042)
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

Trích:

Nguyên văn bởi DCP (Post 40516)
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

Trích:

Nguyên văn bởi nguyenductu2310 (Post 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
}
}
}

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

p18f4550 khong hien thi ky tu tren led 8x8 ai biet sua dum
 
#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;
}


Múi giờ GMT. Hiện tại là 04:49 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam