微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大神求解`单片机程序修改

大神求解`单片机程序修改

时间: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();//调用工作函数
        }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top