PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC > Những câu hỏi thường gặp

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Những câu hỏi thường gặp Những lỗi cơ bản thường gặp khi làm việc với PIC hoặc những vấn đề cơ bản nhất thường được hỏi trong những năm qua

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 20-11-2012, 02:08 PM   #1
helione197
Đệ tử 1 túi
 
Tham gia ngày: Nov 2011
Bài gửi: 12
:
Mạch testboard có vấn đề-Mọi người cứu em với !!!

Mọi người cứu em trương hợp này với.
Đây là đoạn code em lập trình khi test trên proteus thì ok mà mắc trên testboard thì số cứ nhảy lung tung mặc dù mình không nhấn phím nào cả. Em cũng đã tháo phần phím ma trận ra khỏi con VĐK(Chỉ kết nối với LCD) mà số vẫn cứ nhảy. Theo như code thì dến phần "Nhap so thu 1" nó phải đứng để mình nhập số vậy mà nó nhảy đâu ra 3 số bất kì rồi chạy đến hết chưong trình. Thế là sao vậy mọi người !!!!

Đây là đoạn code+ mạch nguyên lý(em làm trên con PIC6F877A)

#include <16F877A.h>
#include <def_877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=10000000)
#include <lcd_lib_4bit.c>
#use fast_io(b)
#use fast_io(d)

int tram,chuc,donvi;
int sttphim=0;
int16 duty1=0;
int16 duty2=0;
int16 x,y1,y2,y3,a,b,i;
int16 p=0,y=0;
int1 bienthuan=0;
int1 biennghich=0;
int1 flag,chieu,o;
void checkphim(b);
void nhaptocdo();

void tinhtoan_hienthi(int16 x) // thuc hien tach so va dua ra hien thi
{
tram = x / 100 + 0x30; // tách so hàng tram
x = x % 100; // chia lay phan du
chuc = x / 10 + 0x30; // tách lay phan chuc
donvi = x % 10 + 0x30; // phan don vi

if (chieu==1)
{
lcd_putchar(tram);
lcd_putchar(chuc);
lcd_putchar(donvi);
lcd_putcmd(0xc0);
lcd_putchar(" Quay Thuan ");
}
else
{
lcd_putchar(tram);
lcd_putchar(chuc);
lcd_putchar(donvi);
lcd_putcmd(0xc0);
lcd_putchar(" Quay Nghich ");
}

}
void loichao()
{
lcd_putcmd(0x80);
lcd_putchar(" HCMUS-FETEL");
delay_ms(2500);
lcd_putcmd(0x80);
lcd_putchar(" ");

lcd_putcmd(0x80);
lcd_putchar(" DK toc do");
lcd_putcmd(0xc0);
lcd_putchar(" Dong co ");
delay_ms(2500);
lcd_putcmd(0x80);
lcd_putchar(" ");
lcd_putcmd(0xc0);
lcd_putchar(" ");
}
void checkphim(b)
{
switch(b)
{
case 1:{sttphim=1;break;}
case 2:{sttphim=2;break;}
case 3:{sttphim=3;break;}
case 4:{sttphim=12;break;}
case 5:{sttphim=4;break;}
case 6:{sttphim=5;break;}
case 7:{sttphim=6;break;}
case 8:{sttphim=13;break;}
case 9:{sttphim=7;break;}
case 10:{sttphim=8;break;}
case 11:{sttphim=9;break;}
case 12:{sttphim=14;break;}
case 13:{sttphim=10;break;}
case 14:{sttphim=0;break;}
case 15:{sttphim=11;break;}
case 16:{sttphim=15;break;}
}
}
void quetphim()
{
a=0;
flag=0;
int n[4]={0b11101111,0b11011111,0b10111111,0b01111111};
while(flag==0)
{
for(i=0;i<4;i++) //i la cot
{
delay_ms(100);
output_b(n[i]);
if(!bit_test(portb,3))
{
delay_ms(10);
a=0*4+i+1;
checkphim(a);
flag=1;

}
else if(!bit_test(portb,2))
{
delay_ms(10);
a=1*4+i+1;
checkphim(a);
flag=1;

}
else if(!bit_test(portb,1))
{
delay_ms(10);
a=2*4+i+1;
checkphim(a);
flag=1;

}
else if(!bit_test(portb,0))
{
delay_ms(10);
a=3*4+i+1;
checkphim(a);
flag=1;

}

}

}
}
void nhaptocdo()
{
lcd_putcmd(0x80);
lcd_putchar(" Nhap toc do ");
lcd_putcmd(0xc0);
lcd_putchar(" Max la 620 ");
delay_ms(2500);
lcd_putcmd(0x80);
lcd_putchar(" ");
lcd_putcmd(0xc0);
lcd_putchar(" ");

do
{
clear:
lcd_putcmd(0x80);
lcd_putchar(" ");
lcd_putcmd(0xc0);
lcd_putchar(" ");
//nhap hang tram
do
{
lcd_putcmd(0x80);
lcd_putchar(" Nhap so thu 1 ");
quetphim();
if(sttphim==13) { y=100;goto run;}
if(sttphim==14) { y=500;goto run;}
if(sttphim==12) goto clear; //nhap sai nhap lai
y1=sttphim;
}
while(sttphim==10||sttphim==11||sttphim==15);


//nhaphangchuc
do
{
lcd_putcmd(0x80);
lcd_putchar(" Nhap so thu 2 ");
quetphim();
if(sttphim==13) { y=100;goto run;}
else if(sttphim==14) { y=500;goto run;}
else if(sttphim==12) goto clear; //nhap sai nhap lai
y2=sttphim;
}
while(sttphim==10||sttphim==11||sttphim==15);


//nhaphangdv
do
{
lcd_putcmd(0x80);
lcd_putchar(" Nhap so thu 3 ");
quetphim();
if(sttphim==13) { y=100;goto run;}
else if(sttphim==14) { y=500;goto run;}
else if(sttphim==12) goto clear; //nhap sai nhap lai
y3=sttphim;
}
while(sttphim==10||sttphim==11||sttphim==15);

y=100*y1+10*y2+y3;
}
while(y>620);
run:
p=y; //luu gia tri p dk dong co
lcd_putcmd(0x80);
lcd_putchar("Td da nhap: "); //Xuat toc do da nhap
lcd_putcmd(0x8c);

y1= y/100 + 0x30; // tách so hàng tram
y=y%100;
y2=y/10 + 0x30; // tách lay phan chuc
y3=y%10 + 0x30; // phan don vi
lcd_putchar(y1);
lcd_putchar(y2);
lcd_putchar(y3);

delay_ms(2500); //xac nhan lan cuoi truoc khi chay
lcd_putcmd(0x80);
lcd_putchar("Nhap lai: CLEAR ");
lcd_putcmd(0xc0);
lcd_putchar("Bo qua:Phim khac");
quetphim();
if(sttphim==12) goto clear;

}

void main()
{
set_tris_b(0xf); //khoi tao port B la port nhap
set_tris_d(0x00);
lcd_putcmd(0x80);
lcd_init();
delay_ms(50);
setup_ccp1(CCP_PWM); //khoi tao bo PWM1
setup_ccp2(CCP_PWM); //khoi tao bo PWM2

setup_timer_2(T2_div_by_16,154,1); //tao chu ky xung 1ms
//(1/clock)*4*t2div*(period+1)
//(1/10e6)*4*16*(154+1)=1e-3=1ms

set_pwm1_duty(duty1); //gia tri duty cua PWM duoc tinh
set_pwm2_duty(duty2); //theo cong thuc duty1*t2div/clock
//khoi tao duty=0 ->tat dong co
// loichao();
nhaptocdo();
lcd_putcmd(0x80);
lcd_putchar(" ");
lcd_putcmd(0xc0);
lcd_putchar(" ");
delay_ms(500);
lcd_putcmd(0x80);
lcd_putchar("Chon chieu quay ");

top:
quetphim();
if(sttphim!=10&&sttphim!=11&&sttphim!=15)
goto top;

if (sttphim==10) //neu nhan phim FO : chay thuan
{
duty1=0;
duty2=0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(1000); //delay 1s de giam quan tinh dc
bienthuan=1;
biennghich=0;
o=1;
goto next;
}

if (sttphim==11) //neu nhan phim RE : chay nghich
{
duty1=0;
duty2=0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
delay_ms(1000); //delay 1s de giam quan tinh dc
bienthuan=0;
biennghich=1;
o=1;
goto next;
}

next:
if (sttphim==15) //neu nhan phim OFF
{
duty1=0;
duty2=0;
set_pwm1_duty(duty1); //cho duty cua 2 bo PMW=0 de
set_pwm2_duty(duty2); //tat dong co
bienthuan=0;
biennghich=0;
o=0;
}
if (bienthuan)
{
duty2=0;
chieu=1;
duty1=p;
set_pwm1_duty(duty1); //cho dco chay thuan
set_pwm2_duty(duty2);
}
if (biennghich)
{
duty1=0;
chieu=0;
duty2=p;
set_pwm1_duty(duty1); //cho dco chay nghich
set_pwm2_duty(duty2);
}

if(o==0)
{
lcd_putcmd(0x80);
lcd_putchar(" ");
lcd_putcmd(0xc0);
lcd_putchar(" ");
lcd_putcmd(0x80);
lcd_putchar(" Toc do: 0 ");
lcd_putcmd(0xc0);
lcd_putchar(" ");
goto top;
}
else
{
lcd_putcmd(0x80);
lcd_putchar(" ");
lcd_putcmd(0x80);
lcd_putchar("Toc do:");
lcd_putcmd(0x8b);
tinhtoan_hienthi(p);
goto top;
}
}
File Kèm Theo
File Type: rar Code+nguyenly.rar (30.1 KB, 5 lần tải)
helione197 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam