cac pac cho hoi cach chong nhiêu cho chan ngat ngoai cua pic
code cua tui
Code:
#include <16f877a.h>
#FUSES HS,NOPROTECT,NOWDT,NOBROWNOUT,NOLVP
#use delay(clock=12000000)
#use rs232(baud=9600,parity=e,xmit=pin_c6,rcv=pin_c7)
#byte d=0x08
#locate i=0xa0
#locate g=0xa1
#locate l=0xa2
#locate p=0xa3
#locate c=0xa4
#locate m=0xa5
#locate n=0xa6
#locate v=0xa7
#locate h=0xa8
#locate f=0xa9
#bit cl=0x18.0
int8 a[21],x,q;
int8 b[21],s;
int32 w;
char r[10]={'0','1','2','3','4','5','6','7','8','9'};
void clock()
{
output_high(pin_c5);
delay_us(4);
output_low(pin_c5);
delay_us(4);
}
void lenh (int8 e)
{
d=e;
output_low(pin_c3);
output_low(pin_c4);
clock();
delay_ms(1);
}
void dulieu (int8 e)
{
d=e;
output_high(pin_c3);
output_low(pin_c4);
clock();
delay_ms(1);
}
void lcdinit()
{
d=0;
output_low(pin_c4);
delay_ms(500);
output_low(pin_c3);
d=0x38;
clock();
lenh(0x01);
lenh(0x0c);
}
int8 kiemtra(int8 a[],int8 t,int8 f)
{
int8 k;
t=0;
if (bit_test(w,f)==1)
t=1;
for (k=0;k<=7;k++)
if(bit_test(a,k)==1)
t=t+1;
return t;
}
void demphat()
{
lenh(0x80);
switch(g)
{
case 1:
lenh(0x01);
g=0;
p=0;
w=0;
dulieu(" DA KET NOI");
putc('s');
break;
case 7:
x=0;
if(n>0&& p==2&&v>l)
{
lenh(0xce);
dulieu(r[s/10]);
dulieu(r[s%10]);
putc(r[s/10]);
delay_ms(1);
putc(r[s%10]);
delay_ms(1);
if(v >=abs(a[n]-a[n-1]))
{
p=3;
v=0;
delay_ms(3000);
}
l=v;
}
if(n==h && p==3)
{
output_high(pin_b2);
output_high(pin_b3);
a[0]=0;
n=0;
g=0;
p=0;
l=0;
lenh(0x80);
dulieu(" HOAN THANH");
putc('h');
}
break;
case 6:
if(n==0)
{
a[0]=f;
g=7;
dulieu(" DA NHAN LENH");
lenh(0xc0);
dulieu("VI TRI");
putc('d');
}
break;
case 5:
if(c<=m)
{
putc(b[c]);
delay_ms(1);
c=c+1;
}
if(c==m+1)
{
g=0;
putc('k');
}
break;
case 4:
if (b[0]==0 && x==0)
g=0;
if(b[0]>0&&x==0)
g=5;
putc('e');
break;
case 3:
g=0;
putc('o');
break;
case 2:
g=0;
putc('z');
break;
default:break;
}
delay_ms(1);
if(g<5 )
output_high(pin_b6);
}
void demthu()
{
q=0;
if(g==0)
{
if(cl==1)
bit_set(w,i);
else
bit_clear(w,i);
q = getc();
if (i==0)
a[0]=q;
if (i<=h&&i>=1)
{
a[i]=q;
i=i+1;
output_high(pin_b6);
}
}
if (c==m+1 && l>=1)
{
if(cl==1)
bit_set(w,b[l-1]);
else
bit_clear(w,b[l-1]);
a[b[l-1]]=getc();
l=l-1;
if(l==0)
{
p=1;
l=0;
}
output_high(pin_b6);
}
}
#priority int_rda,int_ext,int_tbe
#int_global
#int_tbe
void phat()
{ if (input(pin_b5)==1)
demphat();
disable_interrupts(int_tbe);
}
#int_rda
void thu()
{
output_low(pin_b6);
demthu();
if (i==h+1)
output_low(pin_b6);
}
#int_ext
void dongco()
{
if (g==7)
{
x=2;
v=v+1;
output_high(pin_b2);
output_high(pin_b3);
output_low(pin_b7);
if (abs(a[n]-a[n-1])<=50 )
{
if (a[n]>a[n-1])
s=a[n-1]+v;
else
s=a[n-1]-v;
}
else
{
if (a[n]>a[n-1])
if (a[n-1]< v )
s=100+a[n-1]-v;
else
s=a[n-1]-v;
else
if (a[n-1]+v>99)
s=a[n-1]+v-100;
else
s=a[n-1]+v;
}
}
}
void main()
{
int8 j;
i=0;
p=0;
l=0;
n=0;
v=0;
h=0;
a[0]=0;
b[0]=0;
f=0;
x=0;
set_tris_d(0x00);
set_tris_b(0x21);
d=0;
output_low(pin_b6);
output_low(pin_b7);
output_high(pin_b2);
output_high(pin_b3);
g=2;
lcdinit();
ext_int_edge(l_TO_H);
enable_interrupts(global);
enable_interrupts(int_tbe);
enable_interrupts(int_rda);
enable_interrupts(int_ext);
while (true)
{
if (a[0]=='p'||a[0]=='y'||a[0]=='t'||a[0]=='l')
x=1;
if(i==0&&p==0&&a[0]>0)
{
c=kiemtra(a[0],c,0);
if(c%2>0)
g=4;
else
{
if(a[0]=='s')
g=1;
if (x==1)
g=3;
if ((a[0]>'s'||a[0]<'s')&&x==0)
{
g=3;
i=1;
h=a[0];
f=a[h];
p=3;
}
}
a[0]=0;
}
if(g==3&&x==1)
{
switch (q)
{
case 'p':
disable_interrupts(int_ext);
lenh(0xc0);
dulieu("QUAY PHAI");
output_low(pin_b2);
delay_ms(1000);
output_high(pin_b3);
break;
case 't':
disable_interrupts(int_ext);
lenh(0xc0);
dulieu("QUAY TRAI");
output_low(pin_b3);
delay_ms(1000);
output_high(pin_b2);
break;
case 'y':
lenh(0xc0);
dulieu("TIEP TUC ");
output_high(pin_b3);
output_high(pin_b2);
x=0;
enable_interrupts(int_ext);
break;
case 'l':
disable_interrupts(int_ext);
lenh(0xc0);
dulieu("DUNG ");
output_high(pin_b3);
output_high(pin_b2);
break;
}
}
if(i==h+1)
{
l=0;
for(j=1;j<=h;j++)
{
kiemtra(a[j],c,j);
if(c%2!=0)
{
b[l]=j;
l=l+1;
}
}
if(l==0)
{
g=6;
b[0]=0;
}
else
{
m=l-1;
g=4;
}
i=0;
c=0;
}
if (p==1)
{
for (j=0;j<=m;j++)
{
kiemtra(a[b[j]],c,j);
if (c%2!=0)
{
b[l]=j;
l=l+1;
}
}
if(l==0)
{
g=6;
b[0]=0;
}
else
{
m=l-1;
g=4;
}
p=3;
c=0;
}
if (g==7&&n<=h)
{
if(p==3&& n<h)
{
n=n+1;
p=2;
}
if(abs(a[n]-a[n-1])>0&& x==0)
{
if(abs(a[n]-a[n-1])<=50)
{
if(a[n]>a[n-1])
output_low(pin_b2);
else
output_low(pin_b3);
}
else
{
if(a[n]>a[n-1])
output_low(pin_b3);
else
output_low(pin_b2);
}
output_high(pin_b7);
}
}
enable_interrupts(int_tbe);
}
}