找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4590|回复: 2
收起左侧

单片机热释电红外自动门Proteus仿真程序

[复制链接]
ID:259898 发表于 2020-4-28 15:33 | 显示全部楼层 |阅读模式
话不多,直接看图,本设计是模拟自动门效果,用电机显示
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
捕获.PNG

单片机源程序如下:
  1. #include <reg51.h>



  2. sbit led=P0^0;//指示灯信号
  3. sbit k1=P1^2;//按键信号
  4. sbit k2=P1^3;//按键信号
  5. sbit IN1=P3^0;
  6. sbit IN2=P3^1;
  7. unsigned char flag,n;

  8. void delay(char x);   //延时程序
  9. void  motor_1(float a);
  10. void  motor_2(float a);
  11. void zhengzhuan();       
  12. void fanzhuan();   



  13. void key_process()

  14. {
  15.     if(k1==0)  
  16.          {
  17.                  delay(100); //延时100MS,按键必须延时消抖
  18.                 while(!k1);
  19.                  
  20. //    led=~led;
  21.      flag=1;
  22.                  zhengzhuan();//当有人时,正转
  23.          }
  24.                  
  25.          if(k2==0)  //没人时, 反转
  26.          {
  27.                  delay(100);
  28.                  while(!k2);
  29.                  flag=0;
  30.                  fanzhuan();
  31.          }
  32.                  
  33. }


  34. void delay(char x)//延时程序
  35. {                          
  36.    char i;
  37.    while(x--)
  38.    {
  39.      for(i=0; i<120; i++);
  40.    }
  41. }




  42. void  motor_1(float a)//a即想要转的圈数  //反转
  43. {
  44.    unsigned char b;
  45.    unsigned int  c;
  46.    for (c=0; c<8*64*a; c++)  
  47.     {
  48.       for (b=0; b<8; b++)
  49.         {
  50.          
  51.                                         IN2=1;
  52.                                         IN1=0;
  53.          delay(1);
  54.          }
  55.     }
  56. }



  57. void  motor_2(float a)//a即想要转的圈数  //正转
  58. {
  59.    unsigned char b;
  60.    unsigned int  c;
  61.    for (c=0; c<8*64*a; c++)
  62.     {
  63.       for (b=0; b<8; b++)
  64.         {
  65.                  IN2=0;
  66.                                         IN1=1;
  67.          delay(1);
  68.                                        
  69.          }
  70.     }
  71. }


  72. void Timer0() interrupt 1
  73. {
  74.         TH0  = 0x3c; //每中断都要重装载,大概50MS中断一次,十进制的15536,65536-15536=50000
  75.         TL0  = 0xb0;        
  76.   if(flag)  //表示有人灯亮
  77.         {
  78.                 led=0;
  79.         }
  80.         else    //表示没人
  81.         {
  82.                 led=1;
  83.         }
  84.        
  85. }         


  86. void zhengzhuan()    //正转
  87. {
  88.        
  89.        motor_2(0.04); //转1圈(可以改动)         
  90.        delay(1);
  91.              P3=0XFF;                //防止电机发热
  92. }


  93. void fanzhuan()    //正转
  94. {
  95.        
  96.        motor_1(0.04); //转1圈(可以改动)         
  97.        delay(1);
  98.              P3=0XFF;                //防止电机发热
  99. }




  100. void intial()
  101. {
  102.        
  103.   TMOD = 0x11;//16位计数器
  104.         TH0  = 0x3c;
  105.         TL0  = 0xb0;        
  106.         ET0  = 1;  
  107.         TR0  = 1;
  108.         EA=1;
  109. }

  110. void main()//主程序
  111. {   

  112.          intial();
  113.             
  114.         while(1)
  115.         {
  116.                
  117.            key_process() ; //按键处理
  118.   
  119.                
  120.         }
  121. }
复制代码

所有资料51hei提供下载:
热释电红外自动门.rar (281.86 KB, 下载次数: 149)

评分

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

查看全部评分

回复

使用道具 举报

ID:736860 发表于 2020-4-29 19:16 | 显示全部楼层
想问一下楼主,这个是什么
BP9AEAI346W`144WXX69~(L.png
回复

使用道具 举报

ID:729107 发表于 2020-5-11 07:07 来自手机 | 显示全部楼层
仿真没成功
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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