徐刚:基于单片机的自动分拣机控制系统设计
4.3 软件程序设计
本次软件设计的I/O分配如下:
对于步进电机:四相分别接到单片机P1.0,P1.1,P1.2,P1.3口
对于数码管:本文主要利用数码管显示拨码器的拨码值,数码管连接到单片机P0口。 对于蜂鸣器报警模块:本文主要利用蜂鸣器对出错邮件报警提示,蜂鸣器报警时,指示绿灯L1熄灭,出错指示红灯L2亮。蜂鸣器接到单片机P1.7口,指示绿灯接到单片机P2.7,指示红灯接到单片机P2.6。
#include
个数码管 、1个蜂鸣器
#define uchar unsigned char #define uint unsigned int unsigned int i,j;
code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳数码管字段 sbit P00=P0^0; //数码管输入口 sbit P01=P0^1; sbit P02=P0^2; sbit P03=P0^3; sbit P04=P0^4; sbit P05=P0^5; sbit P06=P0^6; sbit P07=P0^7;
sbit P10=P1^0; //步进电机口 sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; sbit P14=P1^4; sbit P15=P1^5; sbit P16=P1^6;
sbit P17=P1^7; //蜂鸣器口 sbit P20=P2^0; //拨码器口 sbit P21=P2^1; sbit P22=P2^2; sbit P23=P2^3;
16
华东交通大学理工学院毕业设计
sbit P24=P2^4;
sbit P26=P2^6; //LED灯口 sbit P27=P2^7;
sbit P32=P3^2; //外部中断0和1 sbit P33=P3^3;
void delay(int t) //延时程序子函数1ms {
int i,j;
for(i=0;i void main() { EA=1; //开中断 EX0=1; IT0=1; while(1) { P16=1;P15=0;P14=1; //选中电机6 P10=0;P11=1;P12=1;P13=0; //电机正转 P27=0; //绿灯L1亮 if(P24==0) //1号邮件 { P0=tab[1]; //数码管显示1 if(S1==0) //光电开关1 P10=1;P11=1;P12=1;P13=1; //电机停转 P32=0; //进入外部中断0 } } if(P23==0) //2号邮件 P0=tab[2]; //数码管显示2 if(S2==0) //光电开关2 { 17 { P16=0;P15=0;P14=0; //选中电机1 { 徐刚:基于单片机的自动分拣机控制系统设计 } P10=1;P11=1;P12=1;P13=1; //电机停转 P32=0; //进入外部中断0 P16=0;P15=0;P14=1; //选中电机2 } if(P22==0) //3号邮件 { P0=tab[3]; //数码管显示3 if(S3==0) //光电开关3 { } if(P21==0) //4号邮件 P0=tab[4]; //数码管显示4 if(S4==0) //光电开关4 { } if(P20==0) //5号邮件 { P0=tab[5]; //数码管显示5 if(S5==0) //光电开关5 { P10=1;P11=1;P12=1;P13=1; //电机停转 } P32=0; //进入外部中断0 P10=1;P11=1;P12=1;P13=1; //电机停转 P32=0; //进入外部中断0 P10=1;P11=1;P12=1;P13=1; //电机停转 P32=0; //进入外部中断0 P16=0;P15=1;P14=0; //选中电机3 } { P16=0;P15=1;P14=1; //选中电机4 } P16=1;P15=0;P14=0; //选中电机5 } if(P24!=0&&P23!=0&&P22!=0&&P21!=0&&P20!=0) 18 华东交通大学理工学院毕业设计 } { } P0=tab[15]; //数码管显示F if(S6==0) //光电开关6 { P27=1;P26=0; //绿灯L1灭,红灯L2亮 P10=1;P11=1;P12=1;P13=1; //电机停转 P17=1; //蜂鸣器报警 } } void exter0() interrupt 0 { while(1) { P10=0;P11=1;P12=1;P13=0; //电机正转 delay(3000); P10=1;P11=1;P12=1;P13=1; //电机停转 delay(500); } P10=1;P11=0;P12=0;P13=1; //电机反转 delay(3000); P10=1;P11=1;P12=1;P13=1; //电机停转 P10=0;P11=1;P12=1;P13=0; //电机正转 if(P16==1&&P15==0&&P14==1) { } break; P16=1;P15=0;P14=1; //选中电机6 } 19 徐刚:基于单片机的自动分拣机控制系统设计 第五章 结 论 通过几个月的努力,在导师蒋英钰的悉心指导下,本人较好地完成了基于单片机控制的自动邮件分拣控制系统的设计。首先,我借此机会在此感谢蒋老师的耐心指导,使我学习到了许多新知识、新方法、新技巧。 本文是通过拨码器模拟邮政编码信息,通过光电传感器检测邮件的到来,产生脉冲信号传输给单片机,继而通过单片机硬件和软件编程控制步进电机分拣动作,已达到自动分拣的功能。 本文设计的单片机自动邮件分拣控制系统主要有以下特点: (1)、能够快速准确地分拣不同区域的邮件; (2)、实现了可视化操作、成本低; (3)、通过单片机控制的步进电机可以准确地执行分拣动作; 路漫漫其修远兮,吾将上下而求索。我深知由于本人思维格局及专业知识有限,取得以上成绩还远远不够,但我一定会在以后的学习过程中不断进取、不断创新,做一名合格的专业人才。 20