|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
12-12-2008, 12:00 AM | #5 |
Đệ tử 1 túi
Tham gia ngày: Oct 2007
Bài gửi: 15
: |
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); } } thay đổi nội dung bởi: namqn, 12-12-2008 lúc 12:05 AM. |
|
|