zoukankan      html  css  js  c++  java
  • 简易直流电机启动、停止、正反转三者相互制约控制系统的项目工程

    #include<reg52.h>//包含52单片机内部寄存器头文件
    #define uchar unsigned char // 自定义uchar为unsigned char(即无符号字符型数据,数据范围:0到255。)
    #define int int//自定义int为int(即有符号整数型数据,数据范围:-32768到32767。)
    sbit M1=P1^6;//位定义直流电机M1端
    sbit M2=P1^7;//位定义直流电机M2端
    sbit K1=P3^7;//位定义启动按键K1
    sbit K2=P3^6;//位定义停止按键K2
    sbit K3=P3^5;//位定义正转按键K3 
    sbit K4=P3^4;//位定义反正按键K4 
    uchar qidongflag,tingzhiflag,zhengzhuanflag,fanzhuanflag;//声明启动标志位变量、停止标志位变量、正转标志位变量、反转标志位变量、
    int Value;//声明数值变量
    //int ge ,shi,bai,qian;//声明数值变量个位变量、数值变量十位变量、数值变量百位变量、数值变量千位变量、
    //uchar qitingflag;
    //unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码数字0~9字码表,低电平点亮数码管段码数字0~9。
    uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x38,0x77,0x71,} ; //共阴数码管段码数字0~9、字符O、字符S、字符L、字符R、无显示等字符字码表,高电平点亮数码管段码数字0~9。
      void delay(int z)//延时程序
    {
       int x,y;
       for(x=z;x>0;x--)
        for(y=110;y>0;y--);
     }
      void ShuMaGuanDisplayValue(int Value)//数码管显示数值函数
    {  
    //   qian=Value/1000;//数值变量个位变量值
    //   bai=Value%1000/100;//数值变量十位变量值
    //   shi=Value%100/10;//数值变量百位变量值
    //   ge=Value%10;//数值变量千位变量值
      
       P2=0xfe;//数码管千位显示位
       P0=table[10];//数码管千位数值显示
       delay(2);//延时
    
       P2=0xfd;//数码管百位显示位
       P0=table[10];//数码管百位数值显示
       delay(2);//延时
    
       P2=0xfb;//数码管十位显示位
       P0=table[10];//数码管十位数值显示
       delay(2);//延时
       
       P2=0xf7;//数码管个位显示位
       P0=table[Value];//数码管个位数值显示
       delay(2);//延时
     }
      void zhengzhuanhanshu()//正转函数
    {
       M1=1;//直流电机M1端置1
       M2=0;//直流电机M2端置0
      }
      void fanzhuanhanshu()//反转函数
    {
       M1=0;//直流电机M1端置0
       M2=1;//直流电机M2端置1
      }
      void KeyScan()//按键扫描函数
    {
       if(K1==0)//是否按下启动按键K1
     {
        delay(5);//消除抖动
    //  ShuMaGuanDisplayValue(Value);//延时
        if(K1==0) //再次判断是否按下启动按键K1
      {
         delay(5);//消除抖动
         qidongflag=1;//启动标志位变量置1
         while(!K1);//等待启动键K1复位(断开)
    //   while(!K1)//等待启动按键K1复位(断开)
    //   ShuMaGuanDisplayValue(Value);//延时
        }
      }
       if(qidongflag==1)//判断启动标志位变量是否为1
     {         
        if(K3==0)//是否按下正转按键K3
      {
         delay(5);//消除抖动
    //   ShuMaGuanDisplayValue(Value);//延时
         if(K3==0)//再次判断是否按下正转按键K3
        {
          delay(5);//消除抖动
          zhengzhuanflag=1;//正转标志位变量置1
          fanzhuanflag=0;//反转标志位变量置0
          while(!K3);//等待正转按键K3复位(断开)
    //    while(!K3)//等待正转按键K3复位(断开)
    //    ShuMaGuanDisplayValue(Value);//延时
         }
       }
         if(K4==0)//是否按下反转按键K4
       {
          delay(5);//消除抖动
    //    ShuMaGuanDisplayValue(Value);//延时
          if(K4==0)//再次判断是否按下反转按键K4
         {
           delay(5);//消除抖动
           zhengzhuanflag=0;//正转标志位变量置0
           fanzhuanflag=1;//反转标志位变量置1
           while(!K4);//等待反转按键K4复位(断开)
    //     while(!K4)//等待反转按键K4复位(断开)
    //     ShuMaGuanDisplayValue(Value);//延时 
          }
       }
        if(K2==0)//是否按下停止键K2
      {
         delay(5);//消除抖动
    //   ShuMaGuanDisplayValue(Value);//延时
         if(K2==0)//再次判断是否按下停止键K2
        {
          delay(5);//消除抖动
          tingzhiflag=1;//停止标志位变量置1
          qidongflag=0;//启动标志位变量置0
          zhengzhuanflag=0;//正转标志位变量置0
          fanzhuanflag=0;//反转标志位变量置0
          M1=1;//直流电机M1端置1
          M2=1;//直流电机M2端置1  
          while(!K2);//等待停止键K2复位(断开)
    //    while(!K2)//等待停止键K2复位(断开)
    //    ShuMaGuanDisplayValue(Value);//延时 
         }
        }
       }
      }
      void main()//主函数
    {        
       while(1)//死循环
     {
        KeyScan();//按键扫描函数
        if(qidongflag==1&&zhengzhuanflag==0&&fanzhuanflag==0)//判断启动标志位变量是否为1和正转标志位变量是否为0和反转标志位变量是否为0
        ShuMaGuanDisplayValue(0);//数码管显示字符O,表示启动信号。
        if(tingzhiflag==1&&qidongflag==0&&zhengzhuanflag==0&&fanzhuanflag==0)//判断停止标志位变量是否为1和启动标志位变量是否为0和正转标志位变量是否为0和反转标志位变量是否为0
        ShuMaGuanDisplayValue(5);//数码管显示字符S,表示停止信号。
        if(zhengzhuanflag==1&&fanzhuanflag==0)//判断正转标志位变量是否为1和反转标志位变量是否为0
      {
         zhengzhuanhanshu();//正转
         ShuMaGuanDisplayValue(11);//数码管显示字符L,表示正转。
       }
        if(zhengzhuanflag==0&&fanzhuanflag==1)//判断正转标志位变量是否为0和反转标志位变量是否为1
      {
         fanzhuanhanshu();//反转
         ShuMaGuanDisplayValue(12);//数码管显示字符R,表示右转。
       }
      }
     }

  • 相关阅读:
    【基础算法】最长连续不重复子序列
    【python----发轫之始】【简单生活小助手】
    【python----发轫之始】【基础知识总结】
    【转】C#接口知识
    SaltStack漏洞导致的挖矿排查思路
    CVE-2020-2551复现过程
    远程调试docker构建的weblogic
    GOF23-工厂模式
    GOF23-单列模式
    VU TPS QPS RT 计算公式
  • 原文地址:https://www.cnblogs.com/AChenWeiqiangA/p/12441350.html
Copyright © 2011-2022 走看看