毕设--基于单片机的感应自动门控制器的设计(8)

2019-04-09 10:07

附 录 一

附录一 电路图

-30-

附 录 二 附录二 单片机程序

#include sbit L=P1^0; sbit S=P1^1; sbit K=P1^2; sbit G=P1^3; bit Flag; bit Flag1; bit R; bit D;

//接受传感器信号 //手动、自动切换 //开门 //关门

//运行标志位 //中断标志位

//正转 //反转 //存储开门信号 //存储关门信号

bit K1; bit G1;

sbit LED=P1^6; //指示灯

unsigned long beats = 0; void delay(unsigned int cnt); void Delay_1ms(unsigned int);

//0.01ms延时

//1ms延时函数 //正转程序

快速-慢速

void qudong1(unsigned long angle) {

unsigned char buf; unsigned char step = 0;

unsigned char code RUN2[8] = { 0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08 };

//步进电机节拍对应 正转

beats = (angle * 4076) / 360; //计算需要的节拍数,4096拍对应一圈 while (beats--) {

if(beats>509&&S==1)

{

buf = P2 & 0xF0; //用buf暂存P1口的高4位,而低4位清零 buf |= RUN2[step]; //buf低4位改为相应的节拍代码值 P2 = buf; //修改后完毕后的值送回到P1口 step++; //步进节拍递增

step &= 0x07; //用“与”方式实现到8归零 delay(150); //延时2ms,即2ms执行一拍

-31-

附 录 二

}

if(beats<=509&&S==1) {

buf = P2 & 0xF0; //用buf暂存P1口的高4位,而低4位清零

buf |= RUN2[step]; //buf低4位改为相应的节拍代码值 P2 = buf; //修改后完毕后的值送回到P1口 step++; //步进节拍递增

step &= 0x07; //用“与”方式实现到8归零 delay(250); //延时2ms,即2ms执行一

}

}

P2 |= 0x0F; //关闭电机所有的相 }

void qudong2(unsigned long angle) //反转程序 快速-慢速 {

unsigned char buf; unsigned char step = 0;

unsigned char code RUN1[8] = { 0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09 };

//步进电机节拍对应 反转

beats = (angle * 4076) / 360; //计算需要的节拍数,4096拍对应一圈 Flag1=1;

while (beats--)

if(beats>509&&S==1) {

{

buf = P2 & 0xF0; //用buf暂存P1口的高4位,而低4位清零 buf |= RUN1[step]; //buf低4位改为相应的节拍代码值 P2 = buf; //修改后完毕后的值送回到P1口 step++; //步进节拍递增

step &= 0x07; //用“与”方式实现到8归零 delay(150); //延时2ms,即2ms执行一拍

}

if(beats<=509&&S==1)

{

buf = P2 & 0xF0; //用buf暂存P1口的高4位,而低4位清零

-32-

附 录 二 buf |= RUN1[step]; //buf低4位改为相应的节拍代码值 P2 = buf; //修改后完毕后的值送回到P1口 step++; //步进节拍递增

step &= 0x07; //用“与”方式实现到8归零

beat=beats;

delay(250); //延时2ms,即2ms执行一拍

} }

P2 |= 0x0F; //关闭电机所有的相 }

void qudong3(unsigned long angle) {

unsigned char buf; unsigned char step = 0;

unsigned char code RUN2[8] = { 0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08 };

//步进电机节拍对应 正转

//半正转程序

快速-慢速

while (beats<=3057) {

if(beats>509&&S==1)

{

buf = P2 & 0xF0; //用buf暂存P1口的高4位,而低4位清零 buf |= RUN2[step]; //buf低4位改为相应的节拍代码值 P2 = buf; //修改后完毕后的值送回到P1口 step++; //步进节拍递增

step &= 0x07; //用“与”方式实现到8归零 delay(150); //延时2ms,即2ms执行一拍

}

if(beats<=509&&S==1) {

buf = P2 & 0xF0; //用buf暂存P1口的高4位,而低4位清零

buf |= RUN2[step]; //buf低4位改为相应的节拍代码值 P2 = buf; //修改后完毕后的值送回到P1口 step++; //步进节拍递增

step &= 0x07; //用“与”方式实现到8归零 delay(250); //延时2ms,即2ms执行一

-33-

附 录 二

} beats++;

}

P2 |= 0x0F; //关闭电机所有的相 }

void qudong4(unsigned long angle) {

unsigned char buf; unsigned char step = 0; unsigned long bs = 0;

unsigned char code RUN2[8] = { 0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08 };

//步进电机节拍对应 正转

//手动正转程序

bs = (angle * 4076) / 360; //计算需要的节拍数,4096拍对应一圈 while (bs--) {

buf = P2 & 0xF0; //用buf暂存P1口的高4位,而低4位清零 buf |= RUN2[step]; //buf低4位改为相应的节拍代码值 P2 = buf; //修改后完毕后的值送回到P1口 step++; //步进节拍递增

step &= 0x07; //用“与”方式实现到8归零 delay(150); //延时2ms,即2ms执行一拍 }

P2 |= 0x0F; //关闭电机所有的相 }

void qudong5(unsigned long angle) //手动反转程序 {

unsigned char buf; unsigned char step = 0; unsigned long bs = 0;

unsigned char code RUN1[8] = { 0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09 };

//步进电机节拍对应 反转

bs = (angle * 4076) / 360; //计算需要的节拍数,4096拍对应一圈 while (bs--)

-34-


毕设--基于单片机的感应自动门控制器的设计(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高三模拟考试作文:和而不同(4篇)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: