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)
-   -   Help Sửa lỗi code led ma trận 16f877a & 74595 &uln2803 (http://www.picvietnam.com/forum/showthread.php?t=31372)

bapnuong0201 01-12-2012 04:46 PM

Help Sửa lỗi code led ma trận 16f877a & 74595 &uln2803
 
Mấy anh ơi giúp giùm em cái đoạn code nay với cai này em lấy trên mạng về mô phỏng thì được như khi vào thực tế thi led chỉ sáng nhấm nháy ma không chạy dduocj chữ.Nó bị zay là co thể do nguyen nhan nao zay mấy anh,nếu anh nào biết thì sửa giúp em hen,Em cảm ơn mấy anh nhiều
#include <16f877a.h>
#include <font5x7.c>
#use delay(clock=20m)
#fuses NOWDT,NOPUT,HS,NOPROTECT,NOLVP,NODEBUG,NOBROWNOUT
#byte Port_B = 0x06 // Dinh nghia thanh ghi Port B
#byte Port_C = 0x07 // Dinh nghia thanh ghi Port C
#byte TRIS_B = 0x86 // Dinh nghia thanh ghi Tris B
#byte TRIS_C = 0x87 // Dinh nghia thanh ghi Tris B

#byte led_data = Port_B
#bit data = Port_C.4 // Dinh nghia chan data la pin C.4
#bit clock = Port_C.5 // Dinh nghia chan data la pin C.5
#bit latch = Port_C.6 // Dinh nghia chan data la pin C.6

char led[32];//4led matran
char font_buffer[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//
unsigned char string1[]="KHOA DIEN DIEN TU DAI HOC SPKT";
char dem_ngat, addr, leng, ky_tu, vi_tri;

// Chuong trinh con day du lieu vao 595
// ULN 2803 dem dau ra dao nen day vao 1bit 0 va 31bit 1
void HC595(char cot){
char i;
for(i=0;i<cot;i++){ //DUA CAC BIT 0 VAO` TRUOC
data=1 ; // Dua bit 0 vao 595
clock=1; // Tao 1 xung o chan Clock de Dua du lieu vao 595
clock=0;
}
data=0; // Dua bit 0 vao vi tri cot can hien thi
clock=1;
clock=0;
for(i=(cot+1);i<=31;i++){
data=1; //Tiep tu dua bit 0 vao 595 cho du 32bit
clock=1;
clock=0;
}
latch=1; // Tao 1 xung o chan Latch de day du lieu ra cac cong va chot
latch=0;
}

#int_timer0 // Khai bao su dung timer 0
// Chuong trinh ngat Timer0
void Scan(void){
set_timer0(6); //cai dat gia tri ban dau cho timer0
if((++dem_ngat)==2){
led_data=0xFF;
HC595(addr);
led_data=led[addr];
addr++;
if(addr>=32) addr=0;
dem_ngat=0;
}
}
// Chuong trinh con lay do dai chuoi ky tu
void leng_string(void){
leng=0;
while((string1[leng])!='\0') // Chay tu dau cho toi khi ket thuc chuoi
leng++;
}
// Chuong trinh con Copy font chu vao bo dem
void copy_font(void){
char j;
for(j=0;j<=4;j++)
font_buffer[j]=font[(string1[ky_tu]-32)].b[j]; // Copy ma font (5byte) tu ky tu can hien thi vao bo dem font_buffer
font_buffer[j]=0xff;
}
// Chuong trinh con cho chu chay tu phai sang trai
void kieu_1(void){
char j;
for(j=31;j>0;j--)
led[j]=led[j-1];
if(vi_tri>5){
vi_tri=0;
copy_font();
ky_tu++;
}
else{
led[0]=font_buffer[vi_tri];
vi_tri++;
}
}
// Chuong trinh chinh
void main(){
int i;
TRIS_B=0x00; TRIS_C=0x00;
Port_B=0x00; Port_C=0x00;

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); //tan so timer0 = precase/16
set_timer0(6); //dat gia tri ban dau cho RTC
enable_interrupts(global);//cho phep ngat toan cuc
enable_interrupts(int_rtcc);

leng_string(); // Lay do dai
ky_tu=0;
while(true){
for (i=0;i<=31;i++) led[i]=0xff;
while(ky_tu<=leng){
kieu_1();
delay_ms(50);
}
}
}

vb_bk 02-12-2012 07:31 PM

mọi người cho em hỏi luôn ạ..có thể đặt vòng lặp for() trong phần code xử lý ngắt timer0 được không ạ. e làm mãi không được, không biết lỗi do gì nữa..hix

sipeogit 07-01-2014 11:15 AM

có ai vào giúp không ạ


Múi giờ GMT. Hiện tại là 05:18 PM.

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