-Sử dụng PIC 16F877A
-Phần mềm biên dịch CCS.Bài toán 1: Điều khiển Led không dùng phím bấm
Code:
#include "16f877a.h"
#use delay(clock=20M)
#fuses NOWDT,HS
#include "math.h"
int i;
int8 m,a,b=0,c,d=0,e,f=0,g,h=0;
void main()
{
set_tris_d(0x00); // Dat cong D lam cong ra
output_d(0x00); // Tat het cac led
while(true)
{
// Sang roi tat
output_d(0xff);
delay_ms(1000);
output_d(0x00);
delay_ms(1000);
// Sang led tu phai qua trai
m=00000001;
for(i=1;i<=7;i++)
{
output_d(m);
delay_ms(1000);
m=m<<1;
}
output_d(0xff);
delay_ms(1000);
// Sang dan led tu phai qua fai
for(i=0;i<7;i++)
{
a= pow(2,i)+b;
b=a;
output_d(a);
delay_ms(1000);
}
output_d(0xff);
delay_ms(1000);
// Sang led tu phai qua trai
m=10000000;
for(i=0;i<7;i++)
{
output_d(m);
delay_ms(1000);
m=m>>1;
}
output_d(0xff);
delay_ms(1000);
// Sang dan led tu trai qua phai
for(i=7;i>=0;i--)
{
c=pow(2,i)+d;
d=c;
output_d(a);
delay_ms(1000);
}
// Sang led tu ngoai vao trong
output_d(pow(2,7)+pow(2,0));
delay_ms(1000);
for(i=0;i<=2;i++)
{
e= pow(2,6-i)+pow(2,i+1)+f;
f=e;
output_d(pow(2,7)+pow(2,0)+e);
delay_ms(1000);
}
// Sang led tu trong ra ngoai
output_d(pow(2,4)+pow(2,3));
delay_ms(1000);
for(i=0;i<=2;i++)
{
g=pow(2,5+i)+pow(2,2-i)+h;
h=g;
output_d(pow(2,4)+pow(2,3)+g);
delay_ms(1000);
}
}
}