找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2190|回复: 0
打印 上一主题 下一主题
收起左侧

简易单片机直流电机启动、停止、正反转三者相互制约控制系统的项目工程

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>//包含52单片机内部寄存器头文件
  2. #define uchar unsigned char // 自定义uchar为unsigned char(即无符号字符型数据,数据范围:0到255。)
  3. #define int int//自定义int为int(即有符号整数型数据,数据范围:-32768到32767。)
  4. sbit M1=P1^6;//位定义直流电机M1端
  5. sbit M2=P1^7;//位定义直流电机M2端
  6. sbit K1=P3^7;//位定义启动按键K1
  7. sbit K2=P3^6;//位定义停止按键K2
  8. sbit K3=P3^5;//位定义正转按键K3
  9. sbit K4=P3^4;//位定义反正按键K4
  10. uchar qidongflag,tingzhiflag,zhengzhuanflag,fanzhuanflag;//声明启动标志位变量、停止标志位变量、正转标志位变量、反转标志位变量、
  11. int Value;//声明数值变量
  12. //int ge ,shi,bai,qian;//声明数值变量个位变量、数值变量十位变量、数值变量百位变量、数值变量千位变量、
  13. //uchar qitingflag;
  14. //unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码数字0~9字码表,低电平点亮数码管段码数字0~9。
  15. 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。
  16.   void delay(int z)//延时程序
  17. {
  18.    int x,y;
  19.    for(x=z;x>0;x--)
  20.         for(y=110;y>0;y--);
  21. }
  22.   void ShuMaGuanDisplayValue(int Value)//数码管显示数值函数
  23. {  
  24. //   qian=Value/1000;//数值变量个位变量值
  25. //   bai=Value%1000/100;//数值变量十位变量值
  26. //   shi=Value%100/10;//数值变量百位变量值
  27. //   ge=Value%10;//数值变量千位变量值
  28.   
  29.    P2=0xfe;//数码管千位显示位
  30.    P0=table[10];//数码管千位数值显示
  31.    delay(2);//延时

  32.    P2=0xfd;//数码管百位显示位
  33.    P0=table[10];//数码管百位数值显示
  34.    delay(2);//延时

  35.    P2=0xfb;//数码管十位显示位
  36.    P0=table[10];//数码管十位数值显示
  37.    delay(2);//延时
  38.    
  39.    P2=0xf7;//数码管个位显示位
  40.    P0=table[Value];//数码管个位数值显示
  41.    delay(2);//延时
  42. }
  43.   void zhengzhuanhanshu()//正转函数
  44. {
  45.    M1=1;//直流电机M1端置1
  46.    M2=0;//直流电机M2端置0
  47.   }
  48.   void fanzhuanhanshu()//反转函数
  49. {
  50.    M1=0;//直流电机M1端置0
  51.    M2=1;//直流电机M2端置1
  52.   }
  53.   void KeyScan()//按键扫描函数
  54. {
  55.    if(K1==0)//是否按下启动按键K1
  56. {
  57.     delay(5);//消除抖动
  58. //  ShuMaGuanDisplayValue(Value);//延时
  59.     if(K1==0) //再次判断是否按下启动按键K1
  60.   {
  61.      delay(5);//消除抖动
  62.      qidongflag=1;//启动标志位变量置1
  63.      while(!K1);//等待启动键K1复位(断开)
  64. //   while(!K1)//等待启动按键K1复位(断开)
  65. //   ShuMaGuanDisplayValue(Value);//延时
  66.     }
  67.   }
  68.    if(qidongflag==1)//判断启动标志位变量是否为1
  69. {         
  70.     if(K3==0)//是否按下正转按键K3
  71.   {
  72.      delay(5);//消除抖动
  73. //   ShuMaGuanDisplayValue(Value);//延时
  74.      if(K3==0)//再次判断是否按下正转按键K3
  75.     {
  76.       delay(5);//消除抖动
  77.       zhengzhuanflag=1;//正转标志位变量置1
  78.       fanzhuanflag=0;//反转标志位变量置0
  79.       while(!K3);//等待正转按键K3复位(断开)
  80. //    while(!K3)//等待正转按键K3复位(断开)
  81. //    ShuMaGuanDisplayValue(Value);//延时
  82.      }
  83.    }
  84.      if(K4==0)//是否按下反转按键K4
  85.    {
  86.       delay(5);//消除抖动
  87. //    ShuMaGuanDisplayValue(Value);//延时
  88.       if(K4==0)//再次判断是否按下反转按键K4
  89.      {
  90.        delay(5);//消除抖动
  91.        zhengzhuanflag=0;//正转标志位变量置0
  92.        fanzhuanflag=1;//反转标志位变量置1
  93.        while(!K4);//等待反转按键K4复位(断开)
  94. //     while(!K4)//等待反转按键K4复位(断开)
  95. //     ShuMaGuanDisplayValue(Value);//延时
  96.       }
  97.    }
  98.     if(K2==0)//是否按下停止键K2
  99.   {
  100.      delay(5);//消除抖动
  101. //   ShuMaGuanDisplayValue(Value);//延时
  102.      if(K2==0)//再次判断是否按下停止键K2
  103.     {
  104.       delay(5);//消除抖动
  105.       tingzhiflag=1;//停止标志位变量置1
  106.       qidongflag=0;//启动标志位变量置0
  107.       zhengzhuanflag=0;//正转标志位变量置0
  108.       fanzhuanflag=0;//反转标志位变量置0
  109.       M1=1;//直流电机M1端置1
  110.       M2=1;//直流电机M2端置1  
  111.       while(!K2);//等待停止键K2复位(断开)
  112. //    while(!K2)//等待停止键K2复位(断开)
  113. //    ShuMaGuanDisplayValue(Value);//延时
  114.      }
  115.     }
  116.    }
  117.   }
  118.   void main()//主函数
  119. {        
  120.    while(1)//死循环
  121. {
  122.     KeyScan();//按键扫描函数
  123.     if(qidongflag==1&&zhengzhuanflag==0&&fanzhuanflag==0)//判断启动标志位变量是否为1和正转标志位变量是否为0和反转标志位变量是否为0
  124.     ShuMaGuanDisplayValue(0);//数码管显示字符O,表示启动信号。
  125.     if(tingzhiflag==1&&qidongflag==0&&zhengzhuanflag==0&&fanzhuanflag==0)//判断停止标志位变量是否为1和启动标志位变量是否为0和正转标志位变量是否为0和反转标志位变量是否为0
  126.     ShuMaGuanDisplayValue(5);//数码管显示字符S,表示停止信号。
  127.     if(zhengzhuanflag==1&&fanzhuanflag==0)//判断正转标志位变量是否为1和反转标志位变量是否为0
  128.   {
  129.      zhengzhuanhanshu();//正转
  130.      ShuMaGuanDisplayValue(11);//数码管显示字符L,表示正转。
  131.    }
  132.     if(zhengzhuanflag==0&&fanzhuanflag==1)//判断正转标志位变量是否为0和反转标志位变量是否为1
  133.   {
  134.      fanzhuanhanshu();//反转
  135.      ShuMaGuanDisplayValue(12);//数码管显示字符R,表示右转。
  136.    }
  137.   }
  138. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表