找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机窗帘 请问定时怎么加进去?

[复制链接]
跳转到指定楼层
楼主
ID:351315 发表于 2018-6-14 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问定时怎么加进去?    按下一直转怎么回事

  1. #include<reg51.h>                          //头文件
  2. #define uchar unsigned char
  3. #define uint unsigned int         //定义变量
  4. sbit D0   = P2^0;//B键
  5. sbit D1   = P2^1;//D键
  6. sbit D2   = P2^2;//A键
  7. sbit K1=P3^4; //限位开关1
  8. sbit K2=P3^5; //限位开关2
  9. sbit IN1=P1^0;
  10. sbit IN2=P1^1;        //电机输入口
  11. void delay(unsigned int z)//延时函数
  12. {
  13.         unsigned int x,y;
  14.         for(x=z;x>0;x--)
  15.                 for(y=110;y>0;y--);
  16. }
  17. void Timer0Init()
  18. {
  19.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
  20.         
  21.         TH0=0XDC;        //给定时器赋初值,定时1ms
  22.         TL0=0X00;        
  23.         ET0=1;//打开定时器0中断允许
  24.         EA=1;//打开总中断
  25.         TR0=0;                        
  26. }


  27. void run(void)        //正转

  28. {
  29.         IN1=0;
  30.         IN2=1;
  31. }
  32. void stop(void)          //停转
  33. {
  34.          IN1=0;
  35.         IN2=0;
  36. }
  37. void back(void) //反转
  38. {
  39.          IN1=1;
  40.         IN2=0;
  41. }
  42. void main(void)//主函数
  43. {
  44.     uchar flag=0;  //标志位1
  45.         uchar bad=0;   //标志位        2

  46.          P2=0x08;           //P2口清零

  47.         
  48.            while(1)
  49.            {                 
  50.                                     
  51.                   if(D1==1)         //D键按下
  52.                 {        
  53.                                    delay(10);
  54.                                  if(D1==1)
  55.                                 {
  56.                                         bad++;
  57.                                         if(bad==3)
  58.                                         {
  59.                                         bad=0;
  60.                                         }
  61.                                         while(D1);
  62.                         
  63.                                 }
  64.                                                                                                                                                          
  65.                
  66.                         switch(bad)
  67.                         {
  68.                         case 1:                 // 按下一次 1/2
  69.                         
  70.                                 back();
  71.                                 TR0=1;
  72.                                 D1=0;
  73.                                 break;        
  74.                         
  75.                         case 2:                 //按下两次 继续转
  76.                         
  77.                                 back();
  78.                                 D1=0;
  79.                                 break;
  80.                         }         
  81.                 }

  82.                   if(D2==1)         //A键按下
  83.                  {
  84.                             delay(10);
  85.                                  if(D2==1)
  86.                                 {

  87.                                         flag++;
  88.                                         if(flag==3)
  89.                                         {
  90.                                         flag=0;
  91.                                         }
  92.                                         while(D2);
  93.                                 }

  94.                
  95.                         switch(flag)
  96.                         {
  97.                         case 1:                                 //按下一次 1/2
  98.                         
  99.                                 run();
  100.                                 TR0=1;
  101.                                 D2=0;
  102.                                 break;        
  103.                         
  104.                         case 2:                                 //按下两次 继续转
  105.                         
  106.                                 run();
  107.                                 D2=0;
  108.                                 break;
  109.                         }         
  110.                  }
  111.                 if(K1==0||K2==0)   //碰到限位开关
  112.                 {
  113.                 while(K1==0||K2==0)
  114.                 stop();         
  115.                 }
  116.                    if(D0==1)           //B键按下
  117.                            {
  118.                         while(D0==1)
  119.                         {
  120.                                 stop()        ;

  121.                         }

  122.                            }
  123.          
  124.                 }
  125.         }
  126. void Timer0() interrupt 1
  127. {
  128.         static int i=0;
  129.         TH0=0XDC;        //给定时器赋初值,定时10ms
  130.         TL0=0X00;
  131.         i++;
  132.         if(i==1000)
  133.         {
  134.                 i=0;
  135.                 IN1=0;
  136.                 IN2=0;        
  137.                 TR0=0;//关闭定时器
  138.         }        
  139. }         
  140.          
复制代码

                       


评分

参与人数 1黑币 +5 收起 理由
金子。 + 5 赞一个!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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