標(biāo)題:
求幫助本人小白 幫忙整合兩個(gè)程序或?qū)懸粋(gè)
[打印本頁(yè)]
作者:
939474643
時(shí)間:
2014-3-24 11:38
標(biāo)題:
求幫助本人小白 幫忙整合兩個(gè)程序或?qū)懸粋(gè)
控制直流電機(jī)和舵機(jī)的電機(jī)驅(qū)動(dòng)模塊是L298N
程序一
#include <reg52.h>
sbit out = P1^0; //舵機(jī)信號(hào)線
sbit K1 = P1^4;
sbit K2 = P1^5;
sbit K3 = P1^6;
char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個(gè)字節(jié)
/**********************************************************
us延時(shí)子函數(shù) (500us)
**********************************************************/
void delayus(unsigned char x)
{
unsigned char i;
while (x--)
{
for (i = 0; i < 58; i++)
;
}
}
/**********************************************************
歸中子函數(shù) (0度)
**********************************************************/
void Prog0(void)
{
unsigned char m;
for(m=0; m<30; m++)
{
out = 1;
delayus(3); //延時(shí)1.5ms
out = 0;
delayus(37); //延時(shí)18.5ms
}
}
/**********************************************************
逆時(shí)針轉(zhuǎn)動(dòng)子函數(shù) 1ms
**********************************************************/
void Prog1(void)
{
unsigned char m;
for(m=0; m<40; m++)
{
out = 1; //延時(shí)1ms
delayus(2);
out = 0;
delayus(38); //延時(shí)19ms
}
}
/**********************************************************
順時(shí)針轉(zhuǎn)動(dòng)子函數(shù) 2ms
**********************************************************/
void Prog2(void)
{
unsigned char m;
for(m=0; m<40; m++)
{
out = 1;
delayus(4); //延時(shí)2ms
out = 0;
delayus(36); //延時(shí)18ms
}
}
/**********************************************************
主函數(shù)
**********************************************************/
void main(void)
{
P1 = 0xf0;
Prog0(); //0度位置
while(1)
{
if(K1 == 0)
{
delayus(40); //延時(shí)20ms
if(K1 == 0)
Prog0(); //返回0度位置
}
else
if(K2 == 0)
{
delayus(40); //延時(shí)20ms
if(K2 == 0)
Prog1(); //逆時(shí)針轉(zhuǎn)動(dòng)
}
else
if(K3 == 0)
{
delayus(40); //延時(shí)20ms
if(K3 == 0)
Prog2(); //順時(shí)針轉(zhuǎn)動(dòng)
}
}
}
程序二
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
sbit k5=P3^4;
sbit IN1=P2^0;
sbit IN2=P2^1;
sbit EN=P2^2;
uchar num=0, show_num=1, gao_num=1, di_num=3, num1;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90
};
void delay(uint x) //延時(shí)函數(shù)
{ uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void keyscan()
{
if(k1==0) // 正轉(zhuǎn)
{ delay(10);
if(k1==0)
{
IN1=0; IN2=1; num1=1;
while(!k1);
}
}
if(k2==0) // 反轉(zhuǎn)
{ delay(10);
if(k2==0)
{
IN1=1; IN2=0; num1=0;
while(!k2);
}
}
if(k3==0) // 加速
{ delay(10);
if(k3==0)
{ num++;
if(num==4)
num=3;
while(!k3);
}
}
if(k4==0) //減速
{ delay(10);
if(k4==0)
{ if(num!=0)
num--;
else
num=0;
while(!k4);
}
}
if(k5==0) // 停止
{ delay(10);
if(k5==0)
{
IN1=1; IN2=1;
while(!k5);
}
}
}
void display()
{
P2=0xfe; //第一個(gè)數(shù)碼管顯示正轉(zhuǎn)(1)還是反轉(zhuǎn)(0)
P0=table[num] ;
delay(5);
P2=0xfd; //第二位數(shù)碼管顯示速度標(biāo)志
P0=table[show_num];
delay(5);
P2=0xfb; // 顯示0
P0=table[0];
delay(5);
P2=0xf7; // 顯示0
P0=table[0];
delay(5);
}
void dispose() //根據(jù)速度標(biāo)記進(jìn)行數(shù)據(jù)處理
{
switch (num)
{
case 0:
show_num=1;
gao_num=1;
di_num=3;
break;
case 1:
show_num=2;
gao_num=2;
di_num=2;
break;
case 2:
show_num=3;
gao_num=3;
di_num=1;
break;
case 3:
show_num=4;
gao_num=4;
di_num=0;
break;
}
}
void qudong() //控制電機(jī)程序
{
uchar x;
if(num1==1) //正轉(zhuǎn)占空比調(diào)節(jié)
{if(di_num!=0)
{
for(x=0;x<=di_num; x++)
{ IN1=0; //PWM低電平輸出
display(); //顯示函數(shù)延時(shí)
}
}
for(x=0;x<=gao_num;x++ )
{ IN1=1;
display(); //PWM高電平輸出
}
}
if(num1==0) //反轉(zhuǎn)占空比調(diào)節(jié)
{if(di_num!=0)
{
for(x=0;x<=di_num; x++)
{ IN2=0;
display();
}
}
for(x=0;x<=gao_num;x++ )
{ IN2=1;
display();
}
}
}
void main ()
{
while(1)
{ EN=1;
keyscan();
dispose();
qudong();
}
}
作者:
939474643
時(shí)間:
2014-3-24 12:49
求大神幫忙啊
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1