![]() |
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 } } } |
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
|
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, |
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 |
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.... |
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 đỡ!
|
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 |
lam on ban goi cho minh file .hẽ duoc kg minh xuat ra sao chay kg duoc
|
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...
|
Sao không ai giúp em vậy?
|
[QUOTE=tungtot_vl;26081]
Trích:
|
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
|
không ai giúp em vậy ,cho em ý kiến đi
|
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 |
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. |
hay quá :d, cám ơn các bác nhìu nhìu :x
|
dạo này ít cao thủ chỉ dẩn quá,tí ý kiến cũng không có
|
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.
|
Trích:
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 |
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.
|
Trích:
|
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 |
sao không có bác nào giúp vậy?
|
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é. |
Trích:
|
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.
|
ý bạn là sao vậy?
bạn muốn xem hình gì ? |
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 |
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); |
Trích:
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... |
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