컴퓨터 지식 네트워크 - 컴퓨터 설치 - L298N을 통해 DC 모터를 제어하기 위한 51 마이크로 컨트롤러용 C 소스 프로그램을 찾고 있습니다.

L298N을 통해 DC 모터를 제어하기 위한 51 마이크로 컨트롤러용 C 소스 프로그램을 찾고 있습니다.

#include

#define uchar unsigned char

#define uint unsigned int

uint t;

p>

p>

uint flag1,flag1s;/*flag1=1이면 섀시가 왼쪽으로 회전하고, flag1&flag2=1이면 섀시가 오른쪽으로 회전합니다*/

uint flag2;/* 중지 플래그*/

uint flag3,flag3s;/*flag3=1일 때 오른쪽 팔이 올라가고, flag3&flag2=1일 때 오른쪽 팔이 내려갑니다*/

uint flag4 ,flag4s;/* flag4=1일 때 왼쪽 팔이 올라가고, flag4&flag2=1일 때 왼쪽 팔이 내려갑니다*/

uint flag5;/*flag5=1일 때 자동 시연*/

//신호등 제어

sbit hong=P3^0;

sbit huang=P3^1;

sbit lv=P3 ^2;

//왼쪽 팔 제어(zb1이 0이면 올리고, zb2가 1이면 올리고, 그렇지 않으면 내립니다.)

sbit zb1=P2^0 //P2= 0x02 왼팔 올리기

sbit zb2=P2^1; //P2=0x01 왼팔 내리기

//오른팔 제어(yb1이 0이고 yb2일 때 올리기) 1이면 내려놓음)

sbit yb1=P2^2; //P2=0x08 오른쪽 팔 올리기

sbit yb2=P2^3; 오른쪽 팔 올리기

/ /로봇 섀시 제어(dp1이 0이면 좌회전, dp2가 1이면 좌회전, 그렇지 않으면 우회전)

sbit dp1=P2^4 / /P2=0x20 섀시 좌회전

sbit dp2=P2^5; //P2=0x10 섀시 우회전

//태양광 섀시 제어(tdp1이 0일 때 좌회전, tdp2 1, 그렇지 않으면 오른쪽으로 회전)

sbit tdp1=P2^6; //P2=0x80 Solar 섀시가 왼쪽으로 회전

sbit tdp2=P2^7 //P2=0x40 Solar 섀시가 오른쪽으로 회전합니다

//원격 제어

sbit yk1=P1^0;//원격 제어 1

sbit yk2=P1^1;//원격 제어 2

sbit yk3=P1^2;/ /원격 제어 3

sbit yk4=P1^3;//원격 제어 4

sbit yk5= P1^4;//원격 제어 5

void init() ;

void Delay(uint);

void zidong();

voidkeyscan();

/**** ************************* 주요 기능*** ********************* ****/

void main()

{

init();

while(1)

{

zidong();

keycan();

if(flag5==1)

zidong() ;

if(flag1==1)

P2=0x20;//섀시 좌회전

그렇지 않으면

>

P2=0x00;

if(flag1s==1)

P2=0x10;//섀시가 우회전합니다

else

P2=0x00;

if(flag3==1)

P2=0x08;//오른팔 올리기

else

P2=0x00;

if(flag3s==1)

P2=0x04;//오른팔을 넣으세요

else

P2=0x00;

if(flag4==1)

P2=0x02;//왼쪽 팔 올리기

else

P2=0x00;

if(flag4s==1)

P2=0x01;//왼쪽 팔을 넣으세요

else

P2 =0x00;

}

}

/******************** ******** ****초기화 기능****************************/

void init()

{

flag1=0;

flag1s=0;

flag2=0;

flag3=0;

flag3s=0;

flag4=0;

flag4s=0;

flag5=0;

TMOD=0x11;//타이머 0을 작업 모드로 설정

TH0=(65536-10000)/256;

TL0=(65536-10000 )%256;

TH1=(65536-20000)/256;

TL1=(65536-20000)%256;

EA=1;/ /총 인터럽트 활성화

ET0=1;//타이머 0 인터럽트 활성화

ET1=1;

TR0=1;//타이머 0 시작

p>

TR1=1;

}

/************************ *****타이머 1을 사용하고, 태양광 섀시의 회전을 제어하세요**************************/

void time0() 인터럽트 1//태양 기지 타이밍, 5분마다 한 번씩 전송

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

t++;

if(t==6000)

{ t=0;

P2=0x80;//Solar 섀시가 우회전합니다.

Delay(1);

P2=0x00;

}

}

/**** ********************* 키보드 스캔 기능************ ************* *****/

void 키 스캔()

{

if(yk1== 1&yk2==0)

{

지연1(1);

if(yk1==1&yk2==0)

>

flag1=1;

}

else flag1=0;

if(yk2==1&yk1==0&yk3==0&yk4==0 )

{

지연1(1);

if(yk2==1&yk1==0&yk3==0&yk4==0)

flag2=1;

flag1=0;

flag3=0;

flag4=0;

flag5=0; /0으로 모두 지우기

flag1s=0;

flag3s=0;

flag4s=0;

}

if(yk3==1&yk2==0)

{

지연1(1);

if(yk3==1&yk2==0)

{

flag3=1;

}

else flag3=0;

}

if(yk4==1&yk2==0)

{

지연1(1);

if(yk4==1&yk2==0 )

{

flag4=1;

}

else flag4=0;

}

if(yk5==1)

{

지연1(1);

if(yk5==1)

{

플래그5=1;

}

else 플래그5=0;

}

if (yk1==1&yk2==1)

{

지연1(1);

if(yk1==1&yk2==1)

{

flag1s=1;

}

else flag1s=0; > if(yk3==1&yk2==1)

{

지연1(1);

if(yk3==1&yk2==1)

{

flag3s=1;

}

else flag3s=0;

}

if(yk4==1&yk2==1)

{

지연1(1);

if(yk4==1&yk2==1)< / p>

{

flag4s=1

}

<

p> else flag4s=0;

}

}

/********************* *** ******** 자동 데모 기능******************************/

void zidong ()

{

while(1)

{

P3=0xfd;//노란색 불빛은 on

P2=0x08;//오른팔을 올리세요

Delay(66);

P2=0x00; //북쪽으로

지연(200);

P2=0x04;//오른팔을 넣으세요

지연(54);

P2=0x00;

P3=0xfe;/ /빨간불 켜짐

P2=0x02;//왼쪽 팔 올리기

Delay(52);

P2 =0x00;

Delay(200);

P2=0x01;//왼팔을 넣으세요

Delay(50);

P2=0x00;

P2=0x20;//섀시가 왼쪽으로 회전합니다.

지연(260);

P2=0x00;

Delay(800);

P2=0x08; //오른팔을 들어올립니다.

Delay(66);

P2=0x00; 북쪽

지연(200);

P2=0x04;//오른팔을 넣으세요

지연(54);

P2 =0x00;

P3=0xfb; //녹색 표시등이 켜졌습니다.

P2=0x02;//왼쪽 팔 올리기

Delay(52);

P2=0x00;

Delay(200);

P2=0x01;//왼팔을 넣으세요

Delay(50 );

P2=0x00;

Delay(500);

P2=0x20;//섀시가 왼쪽으로 회전합니다

Delay( 260);

P2=0x00;

Delay(500);

P3=0xfb;//노란색 표시등이 켜져 있습니다.

P2=0x08;//오른팔을 올리세요

지연(66)

P2=0x00; //북쪽으로

지연(200) ;

P2=0x04;//오른팔을 넣으세요

Delay(54);

P2=0x00;

P3= 0xfe;//빨간색 표시등 켜짐

P2=0x02;//왼쪽 팔 올리기

Delay(52);

P2=0x00;

지연(200);

P2=0x01;//왼팔 넣기

지연(50);

P2=0x00;

지연(500);

P2=0x10;//섀시가 우회전합니다

지연(250);

P2=0x00;

지연(500);

P2=0x08;//오른쪽 팔 이동

지연(66);

P2=0x00; //북쪽

지연(200);

P2=0x04;//오른팔을 넣으세요

Delay(54);

P2=0x00;

P3=0xfb;//녹색 표시등은 on//서쪽으로

P2=0x02;//왼쪽 팔 올리기

Delay(52);

P2=0x00;

Delay(200 );

P2=0x01;//왼팔을 넣으세요

Delay(50);

P2=0x00;

지연( 500);

P2=0x10;//섀시가 우회전합니다.

지연(250);

P2=0x00;

지연(500);

P3=0xfd;//노란색 표시등이 켜짐

P2=0x08;//오른팔을 들어 올리세요

Delay(66);

P2=0x00; //북쪽으로

Delay(200);

P2=0x04;//오른쪽으로 놓으세요 arm

지연(54 );

P2=0x00;

P3=0xfe;//빨간색 표시등 켜짐

P2=0x02 ;//왼쪽 팔 올리기

지연(52);

P2=0x00;

지연(200);

P2= 0x01;//왼팔 넣기

지연(50);

P2=0x00;

P2=0x00;

P2= 0x10;//섀시를 오른쪽으로 돌립니다.

지연(250);

P2=0x00;

지연(800);

P2=0x08;//오른쪽 팔 올리기

지연(66);

P2=0x00; //북쪽

지연(200);

P2=0x04;//오른쪽 팔 넣기

Delay(54);

P2=0x00;

P3=0xfb;//green 불 켜짐

P2=0x02 ;//왼쪽 팔 올리기

지연(52);

P2=0x00;

지연( 200);

P2= 0x01;//왼팔 넣기

지연(50);

P2=0x00;

지연 (500);

P2 =0x10;//섀시가 우회전합니다.

지연(250);

P2=0x00;

P3=0xfb;//노란색 표시등 켜짐

P2=0x08; //오른쪽 팔 올리기

Delay(66);

P2=0x00; 북쪽을 향해

Delay(200) ;

P2=0x04;//오른팔을 넣어

Delay(54);

P2=0x00;

P3=0xfe ;//빨간불 켜짐

P2=0x02;//왼쪽 팔 올리기

Delay(52);

P2=0x00;

지연(200);

P2=0x01;//왼팔을 넣으세요

지연(50);

P2=0x00;

Delay(500);

P2=0x20;//섀시가 왼쪽으로 회전합니다

Delay(260);

P2=0x00;

P2=0x08;//오른팔을 들어 올리세요

Delay(66);

P2=0x00; //북쪽으로

지연(200);

P2=0x04;//오른팔을 넣어

지연(54 );

P2=0x00;

P3=0xfb;//녹색불이 켜집니다

P2=0x02;//왼팔 들어올리기

p>

지연( 52);

P2=0x00;

지연(200);

P2=0x01;//왼쪽 팔을 넣어

지연(50);

P2=0x00;

지연(500);

P2=0x20;//섀시 회전 왼쪽

지연(260);

P2=0x00;

지연(5);

}

}

/******************************** 1초 지연 기능******** ***************** ************/

무효 지연(단위 z)

{

uint x,y;

for(x=z*62;x>0;x--) //z가 100일 때 1초 지연

for(y=20;y>0;y-- );

}

上篇: 계피, 스타 아니스, 후추를 대량으로 판매할 수 있나요? 下篇: 우한 지원자: Zhou Heiya의 회사는 어떻습니까? 회사의 경영, 직원 개발 및 보수는 어떻습니까?
관련 내용