为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

自动开关门系统

2017-12-05 7页 doc 18KB 19阅读

用户头像

is_314871

暂无简介

举报
自动开关门系统自动开关门系统 #include #define uchar unsigned char #define uint unsigned int sbit CP1=P1^0; // 左电机脉冲 sbit DIR1=P1^1; // 左电机方向 0 为开门 1为关门 sbit CP2=P1^2; // 右电机脉冲 sbit DIR2=P1^3; // 右电机方向 0 为开门 1为关门 sbit ADS=P3^2; // 传感器输入的检测人的端子 bit int0_flag=0; //中断0标志位 uchar position...
自动开关门系统
自动开关门系统 #include #define uchar unsigned char #define uint unsigned int sbit CP1=P1^0; // 左电机脉冲 sbit DIR1=P1^1; // 左电机方向 0 为开门 1为关门 sbit CP2=P1^2; // 右电机脉冲 sbit DIR2=P1^3; // 右电机方向 0 为开门 1为关门 sbit ADS=P3^2; // 传感器输入的检测人的端子 bit int0_flag=0; //中断0标志位 uchar position; //位置变量,以步数计 共2000步 //=====================子函数申明=======================// bit contrl(bit diret,uint step); void del2ms(uint time1) ; /****************************************** 主程序 *******************************************/ void main() { uchar int_close; IP=0x01; //INT0高优先级 IE=0X81; //INT0开中断,CUP开中断 TCON=0x04; //INT0边沿触发 position=0; //默认门关闭 while (1) { if (int0_flag==1) //检测到人 { int0_flag=0; //标志位清0 contrl(0,2000); //门全打开 int0_flag=0; //标志位清0 wait: while(ADS==0); //如果门前还有人则等待 int_close=contrl(1,2000); //门开始关闭 if(int_close==0) { int0_flag=0; //标志位清0 contrl(0,2000-position); //门全打开 goto wait; } } } } void service_int0() interrupt 0 using 2 //外部中断0 用第二组寄存器 { int0_flag=1; } /****************************************** 步进电机控制 diret为方向 step为步数 *******************************************/ bit contrl(bit diret,uint step) { uint k; CP1=1; //脉冲置高电平 CP2=1; //脉冲置高电平 DIR1=diret; //运行方向输出 DIR2=diret; //运行方向输出 if(step>11) //所走步数大于11步时采用加速--匀速 --减速 走 { for(k=5;k>0;k--) //加速 { CP1=0; CP2=0; del2ms(2*k); //延时时间逐步减少 则加速 CP1=1; CP2=1; del2ms(2*k); if(diret==0) //开门 位置步数加 { position++; } else //关门 位置步数减 { position--; if(int0_flag==1) return 0; //返回0 表示又有人 关门失败 } } for(k=0;k<(step-5-5);k++) //匀速 { CP1=0; CP2=0; del2ms(1); CP1=1; CP2=1; del2ms(1); if(diret==0) //开门 位置步数加 { position++; } else //关门 位置步数减 { position--; if(int0_flag==1) return 0; } } for(k=1;k<6;k++) //减速 { CP1=0; CP2=0; del2ms(2*k); //延时时间逐步增加 则减速 CP1=1; CP2=1; del2ms(2*k); if(diret==0) //开门 位置步数加 { position++; } else //关门 位置步数减 { position--; if(int0_flag==1) return 0; } } } else //当所走步数小于等于11步时采用匀速 走 { for(k=0;k
/
本文档为【自动开关门系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索