大神求解`单片机程序修改
时间:10-02
整理:3721RD
点击:
求救啊``大神来帮忙
帮我改下这个程序``使单片机输出驱动电机正转的时候 一个输出脚高电平 一个输出脚低电平 反转两个引脚输出电平相反
我要用这个程序来运行L298N电机驱动模块
单片机是89c51rc
``感谢 感谢 `毕业设计``希望帮帮忙``
/************************************************************
功能:开机系统进入自动模式,此时系统会根据环境光线控制窗帘的打开和闭合
按一下切换按键,系统进入手动模式,此时需手动按下打开和关闭按键,
手动时可以停止在任意位置。
当完全打开或关闭时,对应指示灯会闪烁。
**************************************************************/
#include<reg52.h>
#include<intrins.h>
#include<absacc.h> //头文件
#define uc unsigned char
#define ui unsigned int
sbit in_go = P1^3;
sbit in_back = P1^2;//手动前进后退按键
sbit out_go = P1^4;
sbit out_back = P1^5;//电机控制输出
sbit limit_go = P3^7;
sbit limit_back = P3^6;//前进后退限位开关
sbit led_go = P3^5;
sbit led_back = P3^2;//前进后退限位指示灯
sbit light = P1^0;//光线传感器
sbit change = P1^1;//手动自动切换按键(默认自动)
sbit led_zhishi = P1^7;
sbit buzz = P1^6;
bit bdata flag1,flag2,change_flag,flag_shan,flag_shan1,flag_shan2;
uc m,n,shan;
void delay(ui x)//延时函数
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void work()//工作函数
{
if(change==0)//判断切换是否按下
{
buzz=1;
delay(50);
if(change==0)
change_flag=~change_flag;//手动,自动切换
buzz=0;
while(!change);//释放
}
led_zhishi=change_flag;
if(change_flag==0)//自动模式
{
if(light==0)//夜间(无光)时关闭窗帘
{
delay(50);
if(light==0)
{
if((limit_go==0)&&(flag_shan==0))
{
out_go=1;
out_back=1;
led_go=1;
for(shan=0;shan<6;shan++)
{
led_go=~led_go;
buzz=~led_go;
delay(500);
}
flag_shan=1;
}
else if(limit_go==1)
{
out_go=1;
out_back=0;
led_back=1;
led_go=0;
flag_shan=0;
}
}
}
else if(light==1)//白天(有光)时打开窗帘
{
delay(50);
if(light==1)
{
if((limit_back==0)&&(flag_shan==0))
{
out_go=1;
out_back=1;
led_back=1;
for(shan=0;shan<6;shan++)
{
led_back=~led_back;
buzz=~led_back;
delay(500);
}
flag_shan=1;
}
else if(limit_back==1)
{
out_go=0;
out_back=1;
led_back=0;
led_go=1;
flag_shan=0;
}
}
}
}
else if(change_flag==1)//手动模式
{
if((in_go==0)&&(limit_go==1))//关闭是否按下
{
buzz=1;
delay(50);
if((in_go==0)&&(limit_go==1))
{
out_go=1;
out_back=~out_back;//按一下打开,再按一下,停止
buzz=0;
led_back=1;
led_go=out_back;
flag_shan1=0;
}
while(!in_go);//释放
}
else if((in_back==0)&&(limit_back==1))//打开是否按下
{
buzz=1;
delay(50);
if((in_back==0)&&(limit_back==1))
{
out_back=1;
out_go=~out_go;//按一下关闭,再按一下,停止
buzz=0;
led_go=1;
led_back=out_go;
flag_shan2=0;
}
while(!in_back);//按键释放
}
if((limit_go==0)&&(flag_shan1==0))
{
delay(5);
if((limit_go==0)&&(flag_shan1==0))
{
out_back=1;
led_go=1;
for(shan=0;shan<6;shan++)
{
led_go=~led_go;
buzz=~led_go;
delay(500);
}
flag_shan1=1;
}
}
if((limit_back==0)&&(flag_shan2==0))
{
delay(5);
if((limit_back==0)&&(flag_shan2==0))
{
out_go=1;
led_back=1;
for(shan=0;shan<6;shan++)
{
led_back=~led_back;
buzz=~led_back;
delay(500);
}
flag_shan2=1;
}
}
}
}
void main()//主函数
{
light=0;
buzz=0;
while(1)//进入死循环
{
work();//调用工作函数
}
}
帮我改下这个程序``使单片机输出驱动电机正转的时候 一个输出脚高电平 一个输出脚低电平 反转两个引脚输出电平相反
我要用这个程序来运行L298N电机驱动模块
单片机是89c51rc
``感谢 感谢 `毕业设计``希望帮帮忙``
/************************************************************
功能:开机系统进入自动模式,此时系统会根据环境光线控制窗帘的打开和闭合
按一下切换按键,系统进入手动模式,此时需手动按下打开和关闭按键,
手动时可以停止在任意位置。
当完全打开或关闭时,对应指示灯会闪烁。
**************************************************************/
#include<reg52.h>
#include<intrins.h>
#include<absacc.h> //头文件
#define uc unsigned char
#define ui unsigned int
sbit in_go = P1^3;
sbit in_back = P1^2;//手动前进后退按键
sbit out_go = P1^4;
sbit out_back = P1^5;//电机控制输出
sbit limit_go = P3^7;
sbit limit_back = P3^6;//前进后退限位开关
sbit led_go = P3^5;
sbit led_back = P3^2;//前进后退限位指示灯
sbit light = P1^0;//光线传感器
sbit change = P1^1;//手动自动切换按键(默认自动)
sbit led_zhishi = P1^7;
sbit buzz = P1^6;
bit bdata flag1,flag2,change_flag,flag_shan,flag_shan1,flag_shan2;
uc m,n,shan;
void delay(ui x)//延时函数
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<110;j++);
}
void work()//工作函数
{
if(change==0)//判断切换是否按下
{
buzz=1;
delay(50);
if(change==0)
change_flag=~change_flag;//手动,自动切换
buzz=0;
while(!change);//释放
}
led_zhishi=change_flag;
if(change_flag==0)//自动模式
{
if(light==0)//夜间(无光)时关闭窗帘
{
delay(50);
if(light==0)
{
if((limit_go==0)&&(flag_shan==0))
{
out_go=1;
out_back=1;
led_go=1;
for(shan=0;shan<6;shan++)
{
led_go=~led_go;
buzz=~led_go;
delay(500);
}
flag_shan=1;
}
else if(limit_go==1)
{
out_go=1;
out_back=0;
led_back=1;
led_go=0;
flag_shan=0;
}
}
}
else if(light==1)//白天(有光)时打开窗帘
{
delay(50);
if(light==1)
{
if((limit_back==0)&&(flag_shan==0))
{
out_go=1;
out_back=1;
led_back=1;
for(shan=0;shan<6;shan++)
{
led_back=~led_back;
buzz=~led_back;
delay(500);
}
flag_shan=1;
}
else if(limit_back==1)
{
out_go=0;
out_back=1;
led_back=0;
led_go=1;
flag_shan=0;
}
}
}
}
else if(change_flag==1)//手动模式
{
if((in_go==0)&&(limit_go==1))//关闭是否按下
{
buzz=1;
delay(50);
if((in_go==0)&&(limit_go==1))
{
out_go=1;
out_back=~out_back;//按一下打开,再按一下,停止
buzz=0;
led_back=1;
led_go=out_back;
flag_shan1=0;
}
while(!in_go);//释放
}
else if((in_back==0)&&(limit_back==1))//打开是否按下
{
buzz=1;
delay(50);
if((in_back==0)&&(limit_back==1))
{
out_back=1;
out_go=~out_go;//按一下关闭,再按一下,停止
buzz=0;
led_go=1;
led_back=out_go;
flag_shan2=0;
}
while(!in_back);//按键释放
}
if((limit_go==0)&&(flag_shan1==0))
{
delay(5);
if((limit_go==0)&&(flag_shan1==0))
{
out_back=1;
led_go=1;
for(shan=0;shan<6;shan++)
{
led_go=~led_go;
buzz=~led_go;
delay(500);
}
flag_shan1=1;
}
}
if((limit_back==0)&&(flag_shan2==0))
{
delay(5);
if((limit_back==0)&&(flag_shan2==0))
{
out_go=1;
led_back=1;
for(shan=0;shan<6;shan++)
{
led_back=~led_back;
buzz=~led_back;
delay(500);
}
flag_shan2=1;
}
}
}
}
void main()//主函数
{
light=0;
buzz=0;
while(1)//进入死循环
{
work();//调用工作函数
}
}