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

2019-04-09 10:07

第4 章 软件设计

4.2 功能模块程序

4.2.1 定义变量及主程序

#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 main() {

TMOD=0x01;

L=R=D=S=K=K1=G=G1=0; LED=1; Delay_1ms(2000);

//延时,减少传感器误差;

TH0=(65536-10000)/256; TL0=(65536-10000)%6;

//主函数

L=R=D=S=K=K1=G=G1=0; LED=0; P2 |= 0x0F; L=1; Flag=Flag1=0; ET0=1;

TR0=1; {

while(1)

K1=K;

G1=G;

-15-

华北理工大学轻工学院

}

LED=0; Scan();

LED=0; }

4.2.2 驱动子程序

正转子程序

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执行一拍

}

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执行一

-16-

第4 章 软件设计

}

}

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位清零

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

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

beat=beats;

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

} }

-17-

华北理工大学轻工学院

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执行一

} beats++;

}

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

手动正转程序

-18-

第4 章 软件设计

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--) {

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

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

-19-


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

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

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

马上注册会员

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