找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机自动门程序调试问题 求指导。

[复制链接]
跳转到指定楼层
楼主
500黑币
本帖最后由 邓邓邓 于 2020-4-1 11:40 编辑
  1. 我要用AT89C52做一个自动门,前后门分别有一个红外传感用P2.0开关代替,电机选用步进电机分成8步,每走一步检查是否有信号,可使用遥控器遥控开关(用外部中断代替)仿真图如图,程序大体如下。因为没用过C语言,调试花了太多时间。请一位大神帮我调试一下,求指导。若能正常运行优先采纳!非常感谢!
复制代码

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void delay(unsigned int x)                                    //        延迟函数
  6. {
  7. unsigned int i,j;
  8. for(i=x;i>0;i--)
  9. for(j=110;j>0;j--);
  10. }   
  11. void turnRight();          //开门,一步
  12. void turnLeft();           //关门,一步
  13. void init();               //系统初始化函数
  14. void wait();               //等待函数,等待行人走过
  15. void beep();              //喇叭响

  16. sbit PH1=P1^0 ;
  17. sbit PH2=P1^1 ;
  18. sbit I01=P1^2 ;
  19. sbit I11=P1^3 ;
  20. sbit I02=P1^4 ;
  21. sbit I12=P1^5  ;
  22. sbit BeepPort=P3^7;
  23. sbit out=P2^0  ;

  24. uchar ledTable[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  25. uchar flag=0;       //flag为0-7的数

  26. void main()                        
  27. {
  28. EA=0;
  29. EX0=1;
  30. IT0=0;
  31. EX1=1;
  32. IT1=0;
  33. init();
  34. EA=1;
  35. while (1)
  36. {
  37. EX1=0;
  38.   while(out == 0)   //无人,闪烁
  39.      {P0=0x01;
  40.          delay(50);
  41.          P0=0x00;
  42.          delay(50);
  43.          }
  44.          EX1=1;
  45.          if(out ==1)
  46.          {
  47.          delay(1);
  48.          if(out==1)
  49.           {
  50.                 //响,开门
  51.            for(flag=0;flag<8;flag++)
  52.            {
  53.             if(flag ==0)
  54.                   beep();
  55.                   P0=ledTable[flag]; //指示当前门的位置
  56.                   TurnRight();
  57.                   delay(100);
  58.                   }    //结束后flag=8,最后一次for循环多加一个1
  59.                    while(out ==1)
  60.                    {
  61.                    P0=0xff;
  62.                    delay(100);
  63.                    P0=0x00;
  64.                    delay(100);
  65.                    P0=0xff;
  66.                    delay(100);
  67.                    P0=0x00;
  68.                    delay(100);
  69.                    }         //有人,,一直闪烁等待
  70.                    wait();      //等待
  71.                    while(out==1);
  72.                    if(out ==0)  //还是没人,开始关门
  73.                    {
  74.                    delay(2);
  75.                    beep();
  76.                    while((flag>0)&&(out ==0))
  77.                      {
  78.                            if(flag==8)
  79.                             beep();
  80.                                 flag--;  //0-7间flag才能用,要先自剑
  81.                                 P0=ledTable[flag];   //指示当前门的位置
  82.                                 turnLeft();        //每次循环关一步,8步关完
  83.                                 delay(100);
  84.                                 if(out==1)         //每关一步检查热电传感器,检查是否有人
  85.                                  {
  86.                                   beep();
  87.                                   for(;flag<8;flag++)  //  有人从当前位置开始逆向开门,是开特定步数,不是全部都开<8
  88.                                    {
  89.                                     P0=ledTable[flag]; //指示当前位置
  90.                                         turnRight();
  91.                                         delay(100);
  92.                                         }
  93.                                         wait();
  94.                                  continue;   //开门完,等待结束,跳到while循环开始位置
  95.                                    }
  96.                                    if((flag ==0))    //期间一直没人,关门完毕。跳出循环回到程序起始位置
  97.                                          break;
  98.                                                            }
  99.                                                          }
  100.                                                         }
  101.                                                 }
  102.                                         }
  103.                                 }
  104.            
  105.            void int0() interrupt 0          //外部中断0入口作为红外遥控开门按钮
  106.                 {
  107.                 uchar i;
  108.                 beep();
  109.                 P0=0xff;
  110.                 delay(100);
  111.                 P0=0x00;
  112.                 delay(20);
  113.            P0=0xff;
  114.            delay(100);
  115.            P0=0x00;
  116.            delay(20);   //中断响应信号
  117.            i= flag;      //获取当前位置,确定逆向凯特定步数的门
  118.            for (;i<8;i++)
  119.            {P0=ledTable[i];
  120.            turnRight();
  121.            delay(100);
  122.            }
  123.            wait()  ;
  124.            flag=8;   //开门后,门一定全开8步,所以flag=8
  125.            P0=0xf0;
  126.            delay(250);
  127.            delay(250);
  128.            P0=0x00;    //中断完后信号
  129.            }
  130.            void int1()  interrupt 2;           //外部中断1入口,作为遥控关门按钮
  131.         {
  132.            uchar i;
  133.            beep();
  134.            P0=0xff;
  135.            delay(100);
  136.            P0=0x00;
  137.        delay(20);
  138.            P0=0xff;
  139.            delay(100);
  140.            P0=0x00;
  141.            delay(20); //中断响应信号
  142.            i=flag;
  143.            for(;i>0;i--)
  144.           {
  145.             P0=ledTable[i];
  146.                 turnLeft();
  147.                 delay(100);
  148.                 }
  149.                 flag=0 ;  //关门以后,门一定全关8步,所以flag=0
  150.                 P0=0xf0;
  151.                 delay(250);
  152.                 delay(250);
  153.                 P0=0x00;    //中断完成信号
  154.                 beep();
  155.                 }
复制代码


程序.doc

24.5 KB, 下载次数: 4

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

使用道具 举报

沙发
ID:715539 发表于 2020-4-1 08:45 | 只看该作者
使用的KEIL软件编程,用的AT89C52芯片,若能解决追加500黑币。很急。万分感谢各位大佬!!
回复

使用道具 举报

板凳
ID:716703 发表于 2020-4-1 10:22 | 只看该作者
给你提供一个

51单片机的大楼自动门控制系统设计 源程序 电路图.doc

27 KB, 下载次数: 25

回复

使用道具 举报

地板
ID:715539 发表于 2020-4-1 11:10 | 只看该作者

兄弟你给的这个莫得程序和图纸呀。请问能帮我看哈程序不.没用过C语言,江湖救急!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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