View Single Post
Old 22-01-2013, 02:28 PM   #1
messi2410
Nhập môn đệ tử
 
Tham gia ngày: Oct 2012
Bài gửi: 2
:
Thiết kế máy tính cá nhân dùng PIC 16f877a

E đang thực hiên thiết kế máy tính cá nhân dùng VĐK PIC 16f877a, e có code sau nhưng không hiểu sao chạy mô phỏng thì không được, khi nhấn các nút bấm thì không thấy kết quả hiển thị trên LCD,chỉ thấy hiện những ký tự khó hiểu.Đây là đoạn code nhờ các bác kiểm tra giúp:

#include <16f877a.h>
#use delay(clock=20M)
#include <def_877a.h>
#include <lcd_4bit.c>
#include <math.h>


#bit cot1=portB.4
#bit cot2=portB.5
#bit cot3=portB.6
#bit cot4=portB.7

#bit hang1=portB.0
#bit hang2=portB.1
#bit hang3=portB.2
#bit hang4=portB.3
long kq,kq1,kq2,ok,pt,j;

//------------------------------------------------------------------------
//--------------------------Chuong trinh con-----------------------------
//------------------------------------------------------------------------


int8 const tit0[]={"*DO AN HTN*"};
int8 const tit1[]={"-T-T-V-"};
int8 tit2[15];
int8 tit3[15];
int8 i;

void write_line1(long kq,pt){
lcd_putcmd(clear_scr);
lcd_putcmd(line_1);
i=0;j=kq;
while (j!=0)
{
if (j%10) tit2=1;
else tit2=0;
j=j/10;
i++;
}
for (j=i-1;j>=0;j--) lcd_putchar(tit2[j]);
if (pt==1) lcd_putchar('+');
else
if (pt==2) lcd_putchar('-');
else
if (pt==3) lcd_putchar('x');
else
if (pt==4) lcd_putchar(':');
}
void write_line2(long kq){
lcd_putcmd(line_2);
i=0;j=kq;
while (j!=0)
{
tit2=j%10;
j=j/10;
i++;
}
for (j=i-1;j>=0;j--) lcd_putchar(tit2[j]);
}

#int_RB // Chuong trinh ngat Port B
void RB_isr(void){
long kq=0, kq1=0, kq2=0;
if(hang1==1){
if(cot1==1){
if (ok==0)
{ kq1=kq1*10+7;write_line2(kq1); }
else {kq2=kq2*10+7;write_line1(kq1,pt);write_line2(kq2) ; }
}
else if(cot2==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+8;write_line2(kq1);}
else {kq2=kq2*10+8;write_line1(kq1,pt);write_line2(kq2) ;}
}
else if(cot3==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+9;write_line2(kq1);}
else {kq2=kq2*10+9;write_line1(kq1,pt);write_line2(kq2) ;}
}
else if(cot4==1){lcd_putcmd(clear_scr);
if (ok==0)
{
pt=4;
ok=1;
}
else
{
switch (pt)
{
case 1: kq=(kq1+kq2); kq1=kq; break;
case 2: kq=kq1-kq2; kq1=kq; break;
case 3: kq=kq1*kq2; kq1=kq; break;
case 4: kq=kq1/kq2; kq1=kq; break;
}
pt=4;
}
write_line1(kq1,pt);
}
}
else if(hang2==1){
if(cot1==1){

if (ok==0)
{ kq1=kq1*10+4;write_line2(kq1);}
else {kq2=kq2*10+4;write_line2(kq1);}
}
else if(cot2==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+5;write_line2(kq1);}
else {kq2=kq2*10+5;write_line1(kq1,pt);write_line2(kq2) ;}
}
else if(cot3==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+6;write_line2(kq1);}
else {kq2=kq2*10+6;write_line1(kq1,pt);write_line2(kq2) ;}
}
else if(cot4==1){lcd_putcmd(clear_scr);
if (ok==0)
{
pt=3;
ok=1;
}
else
{
switch (pt)
{
case 1: kq=(kq1+kq2); kq1=kq; break;
case 2: kq=kq1-kq2; kq1=kq; break;
case 3: kq=kq1*kq2; kq1=kq; break;
case 4: kq=kq1/kq2; kq1=kq; break;
}
pt=3;
}
write_line1(kq1,pt);
}
}
else if(hang3==1){
if(cot1==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+1;write_line2(kq1);}
else {kq2=kq2*10+1;write_line1(kq1,pt);write_line2(kq1) ;}
}
else if(cot2==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+2;write_line2(kq1);}
else {kq2=kq2*10+2;write_line1(kq1,pt);write_line2(kq1) ;}
}
else if(cot3==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+3;write_line2(kq1);}
else {kq2=kq2*10+3;write_line1(kq1,pt);write_line2(kq1) ;}
}
else if(cot4==1){
lcd_putcmd(clear_scr);
if (ok==0)
{
pt=2;
ok=1;
}
else
{
switch (pt)
{
case 1: kq=(kq1+kq2); kq1=kq; break;
case 2: kq=kq1-kq2; kq1=kq; break;
case 3: kq=kq1*kq2; kq1=kq; break;
case 4: kq=kq1/kq2; kq1=kq; break;
}
pt=2;
}
write_line1(kq1,pt);
}
}
else if(hang4==1){
if(cot1==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=0;write_line2(kq1);}
else {kq2=0;write_line1(kq1,pt);write_line2(kq1);}
}
else if(cot2==1){lcd_putcmd(clear_scr);
if (ok==0)
{ kq1=kq1*10+0;write_line2(kq1);}
else {kq2=kq2*10+0;write_line1(kq1,pt);write_line2(kq1) ;}
}
else if(cot3==1){lcd_putcmd(clear_scr);
if (ok==0) kq=kq1;
else
{
switch (pt)
{
case 1: kq=(kq1+kq2); kq1=kq; break;
case 2: kq=kq1-kq2; kq1=kq; break;
case 3: kq=kq1*kq2; kq1=kq; break;
case 4: kq=kq1/kq2; kq1=kq; break;
}
}
kq1=0;kq2=0;pt=0;ok=0;
write_line2(kq);
}
else if(cot4==1){lcd_putcmd(clear_scr);
if (ok==0)
{
pt=2;
ok=1;
}
else
{
switch (pt)
{
case 1: kq=(kq1+kq2); kq1=kq; break;
case 2: kq=kq1-kq2; kq1=kq; break;
case 3: kq=kq1*kq2; kq1=kq; break;
case 4: kq=kq1/kq2; kq1=kq; break;
}
pt=1;
}
write_line1(kq1,pt);
}
}
}
//------------------------------------------------------------------------
/*------------------------Chuong trinh chinh-------------------------------*/
//------------------------------------------------------------------------
void main(){
lcd_init();
enable_interrupts(INT_RB);
//cho phép ngắt (GLOBAL);

trisb=0xF0;

while(tit0!=0){
lcd_putchar(tit0);
i++;
delay_ms(70);
}
lcd_putcmd(line_2);
i=0;ok=0;pt=0;

while(tit1!=0){
lcd_putchar(tit1);
i++;
delay_ms(70);
}
delay_ms(2000);
write_line1(1000,1);delay_ms(2000);
lcd_putcmd(clear_scr);

enable_interrupts(GLOBAL);
while(1){
//quet hang
hang4=0; hang1=1; delay_ms(10);
//Xuat tin hieu 1 ra hang 1, 0 ra hang 4 de do hang,
hang1=0; hang2=1; delay_ms(10);
//Xuat tin hieu 1 ra hang 2, 0 ra hang 1 de do hang
hang2=0; hang3=1; delay_ms(10);
//Xuat tin hieu 1 ra hang 3, 0 ra hang 2 de do hang
hang3=0; hang4=1; delay_ms(10);
//Xuat tin hieu 1 ra hang 4, 0 ra hang 3 de do hang
}
}


Bác nào có code chuẩn của cái này thì cho e xin tham khảo được ko.
messi2410 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn