Hiện tại mình có làm 1 đồ án với đề tài là điều khiển động cơ bằng máy tính qua giao diện Visual Basic 6. Nội dung như sau:
Phần cứng gồm:
+ 2 con led 7 đoạn để hiển thị tốc độ động cơ
+ 6 nút nhấn gồm có: bắt đầu, ON/OFF, nhanh dần, chậm dần, quay thuận và quay nghịch
giao diện VB cũng có 6 command button như 6 nút nhấn trên, chỉ thêm 1 command button là Cài đặt động cơ, nút này cho phép nhập tốc độ động cơ và sau đó hiển thị tốc độ trên led 7 đoạn.
Dưới đây là code C của mình, hok biết sai chổ nào mà nó hok nhận giữ liệu từ máy tính cũng như nút nhấn. Sơ đồ nguyên lý mình kèm theo ở dưới luôn:
file sơ đồ nguyên lý: Free Cloud Storage - MediaFire
Phần cứng gồm:
+ 2 con led 7 đoạn để hiển thị tốc độ động cơ
+ 6 nút nhấn gồm có: bắt đầu, ON/OFF, nhanh dần, chậm dần, quay thuận và quay nghịch
giao diện VB cũng có 6 command button như 6 nút nhấn trên, chỉ thêm 1 command button là Cài đặt động cơ, nút này cho phép nhập tốc độ động cơ và sau đó hiển thị tốc độ trên led 7 đoạn.
Dưới đây là code C của mình, hok biết sai chổ nào mà nó hok nhận giữ liệu từ máy tính cũng như nút nhấn. Sơ đồ nguyên lý mình kèm theo ở dưới luôn:
#include <16f877a.h>
#fuses hs,nowdt,noprotect,nolvp,put // cau hinh cho Pc
#use delay (clock=4000000)
#use RS232(baud = 9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte portb = 0x6
#byte portc = 0x7
#byte portd = 0x8
#byte porte = 0x9
#byte timer11 = 0xE
#byte timer1h = 0xF
#byte t1con = 0x10
#byte intcon =0x0b
#bit congat=intcon.2
#bit p0 = t1con.0
#bit p1 = t1con.1
#bit p2 = t1con.2
#bit p3 = t1con.3
#bit p4 = t1con.4
#bit p5 = t1con.5
#bit b0 = portb.0
#bit b1 = portb.1
#bit b2 = portb.2
#bit b3 = portb.3
#bit b4 = portb.4
#bit b5 = portb.5
#bit c0 = portc.0
#bit c1 = portc.1
#bit c2 = portc.2
#bit c3 = portc.3
#bit c4 = portc.4
#bit c5 = portc.5
#bit d1 = portd.1
#bit d2 = portd.2
#bit d3 = portd.3
#bit d4 = portd.4
#bit d5 = portd.5
#bit e1 = porte.1
#bit e2 = porte.2
Int16 value,speed; //KHAI BIEN TOAN CUC
Int8 sansang,Hngan,Htram,Hchuc,HDonVi,x,data,tam,i;
char z;
#Int_rda //data nhan tu rs232 san sang
void ngat1()
{
z = getc();//nhan du lieu z
if(z!='a' && z!='b' && z!='c' && z!='d' && z!='e' && z!='f') // z khac a,b,c..
{
data= z;
if(c3 == 0 && e1 ==0)//kiem tra quay thuan va quay nghich
{
c3 = 1;
e1= 0;
setup_ccp2(ccp_pwm); // xuat xung pwm2 ra chan c1
set_pwm2_duty(x);//x=m,Th=m*gia tri chia tan
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);// cho chan c2 ve muc thap( dong co quay thuan)
setup_timer_2(t2_div_by_4,255,1);
}
if(c3 == 1 && e1 ==0)//kiem tra nut nhan
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
if(c3 == 0 && e1 == 1)
{
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
}
else
{
if(z = 'f')
{
z=0;
sansang = !sansang;
if(sansang ==1)
e2 = 1;
else
{
e2 = 0;
c3 = e1 = 0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x = 10;
while(true);
}
}
}
}
#INT_TIMER0 //ngat timer 0
void ngat()
{
value = (timer1h*256)+(timer11%256);
set_timer0(15280);
timer11 = 0;
timer1h = 0;
p1 = 1;
p2 = 0;
p3 = 0;
p4 = 0;
p5 = 0;
p0 = 1;// ON
congat = 0;
}
Void hienthi();
Void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
ext_int_edge(L_TO_H);//chon cach lay xung canh len
set_tris_b(0b111111);
set_tris_c(0b10000001);
set_tris_d(0);
set_tris_e(0b00);
portb=portc=portd=porte=0;
setup_timer_0(RTCC_DIV_256| RTCC_INTERNAL);//
set_timer0(15280);// delay 50ms
timer11 = 0;
timer1h = 0;
p1 = 1;
p2 = 0;
p3 = 0;
p4 = 0;
p5 = 0;
p0 = 1; // On
value = 0;
sansang = 0;
tam = 1;
speed = 20;
data = 20;
x = 120;
while(1)
{
speed = (value*20)/400;
Hchuc = speed/10;
HDonVi = speed%10;
putc(Hchuc+48);
putc(HDonVi+480);
hienthi();
if(b0==0)
{
do
{}
while(b0==0);
putc('#');
putc('4');
sansang=!sansang;
if(sansang==1)
e2=1;
else
{
e2=0;
c3 = e1 = 0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x =10;
while(true);
}
}
if(sansang==1)
{
if(b1==0 || z=='a')
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x =10;
while(true);
delay_ms(500);
z=0;
c3=1;
e1=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
putc('#');
putc('1');
}
if(b2=0 || z=='b')
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x =10;
while(true);
delay_ms(500);
z=0;
c3=0;
e1=1;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
putc('#');
putc('2');
}
if(b3==0 ||z=='c')
{
z=0;
c3=e1=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
putc('#');
putc('3');
x =10;
}
if(b4==0 ||z=='d')
{
do
{
}
while(b4==0);
delay_ms(500);
if(data>=2)
data=data-1;
z= 0;
}
if(b5==0 || z=='e')
{
do
{
}
while(b5==0);
delay_ms(50);
x =10;
if(data<=34)
data=data+1;
z =0;
}
if(speed>data && x>=1)
{
x=x-1;
if(c3==1 && e1==0)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
if(c3==0 && e1==1)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
}
if(speed<data && x<=254)
{
x=x+1;
if(c3 ==1 &&e1 ==0)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
if(c3 ==0 && e1 ==1)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
}
}
}
}
Void hienthi()
{
For(i=0;i<=2;i++)
{
Int ht[10]={192,249,164,176,153,146,130,248,128,144};
portd=ht[Hchuc];
c5=0;
c4=1;
delay_ms(10);
portd=ht[HDonVi];
c5=1;
c4=0;
delay_ms(10);
}
}
#fuses hs,nowdt,noprotect,nolvp,put // cau hinh cho Pc
#use delay (clock=4000000)
#use RS232(baud = 9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte portb = 0x6
#byte portc = 0x7
#byte portd = 0x8
#byte porte = 0x9
#byte timer11 = 0xE
#byte timer1h = 0xF
#byte t1con = 0x10
#byte intcon =0x0b
#bit congat=intcon.2
#bit p0 = t1con.0
#bit p1 = t1con.1
#bit p2 = t1con.2
#bit p3 = t1con.3
#bit p4 = t1con.4
#bit p5 = t1con.5
#bit b0 = portb.0
#bit b1 = portb.1
#bit b2 = portb.2
#bit b3 = portb.3
#bit b4 = portb.4
#bit b5 = portb.5
#bit c0 = portc.0
#bit c1 = portc.1
#bit c2 = portc.2
#bit c3 = portc.3
#bit c4 = portc.4
#bit c5 = portc.5
#bit d1 = portd.1
#bit d2 = portd.2
#bit d3 = portd.3
#bit d4 = portd.4
#bit d5 = portd.5
#bit e1 = porte.1
#bit e2 = porte.2
Int16 value,speed; //KHAI BIEN TOAN CUC
Int8 sansang,Hngan,Htram,Hchuc,HDonVi,x,data,tam,i;
char z;
#Int_rda //data nhan tu rs232 san sang
void ngat1()
{
z = getc();//nhan du lieu z
if(z!='a' && z!='b' && z!='c' && z!='d' && z!='e' && z!='f') // z khac a,b,c..
{
data= z;
if(c3 == 0 && e1 ==0)//kiem tra quay thuan va quay nghich
{
c3 = 1;
e1= 0;
setup_ccp2(ccp_pwm); // xuat xung pwm2 ra chan c1
set_pwm2_duty(x);//x=m,Th=m*gia tri chia tan
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);// cho chan c2 ve muc thap( dong co quay thuan)
setup_timer_2(t2_div_by_4,255,1);
}
if(c3 == 1 && e1 ==0)//kiem tra nut nhan
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
if(c3 == 0 && e1 == 1)
{
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
}
else
{
if(z = 'f')
{
z=0;
sansang = !sansang;
if(sansang ==1)
e2 = 1;
else
{
e2 = 0;
c3 = e1 = 0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x = 10;
while(true);
}
}
}
}
#INT_TIMER0 //ngat timer 0
void ngat()
{
value = (timer1h*256)+(timer11%256);
set_timer0(15280);
timer11 = 0;
timer1h = 0;
p1 = 1;
p2 = 0;
p3 = 0;
p4 = 0;
p5 = 0;
p0 = 1;// ON
congat = 0;
}
Void hienthi();
Void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
ext_int_edge(L_TO_H);//chon cach lay xung canh len
set_tris_b(0b111111);
set_tris_c(0b10000001);
set_tris_d(0);
set_tris_e(0b00);
portb=portc=portd=porte=0;
setup_timer_0(RTCC_DIV_256| RTCC_INTERNAL);//
set_timer0(15280);// delay 50ms
timer11 = 0;
timer1h = 0;
p1 = 1;
p2 = 0;
p3 = 0;
p4 = 0;
p5 = 0;
p0 = 1; // On
value = 0;
sansang = 0;
tam = 1;
speed = 20;
data = 20;
x = 120;
while(1)
{
speed = (value*20)/400;
Hchuc = speed/10;
HDonVi = speed%10;
putc(Hchuc+48);
putc(HDonVi+480);
hienthi();
if(b0==0)
{
do
{}
while(b0==0);
putc('#');
putc('4');
sansang=!sansang;
if(sansang==1)
e2=1;
else
{
e2=0;
c3 = e1 = 0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x =10;
while(true);
}
}
if(sansang==1)
{
if(b1==0 || z=='a')
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x =10;
while(true);
delay_ms(500);
z=0;
c3=1;
e1=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
putc('#');
putc('1');
}
if(b2=0 || z=='b')
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
x =10;
while(true);
delay_ms(500);
z=0;
c3=0;
e1=1;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
putc('#');
putc('2');
}
if(b3==0 ||z=='c')
{
z=0;
c3=e1=0;
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
putc('#');
putc('3');
x =10;
}
if(b4==0 ||z=='d')
{
do
{
}
while(b4==0);
delay_ms(500);
if(data>=2)
data=data-1;
z= 0;
}
if(b5==0 || z=='e')
{
do
{
}
while(b5==0);
delay_ms(50);
x =10;
if(data<=34)
data=data+1;
z =0;
}
if(speed>data && x>=1)
{
x=x-1;
if(c3==1 && e1==0)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
if(c3==0 && e1==1)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
}
if(speed<data && x<=254)
{
x=x+1;
if(c3 ==1 &&e1 ==0)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(x);
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
if(c3 ==0 && e1 ==1)
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_ccp1(ccp_pwm);
set_pwm1_duty(x);
setup_timer_2(t2_div_by_4,255,1);
while(true);
}
}
}
}
}
Void hienthi()
{
For(i=0;i<=2;i++)
{
Int ht[10]={192,249,164,176,153,146,130,248,128,144};
portd=ht[Hchuc];
c5=0;
c4=1;
delay_ms(10);
portd=ht[HDonVi];
c5=1;
c4=0;
delay_ms(10);
}
}
Comment