硬件设计
链接:https://pan.baidu.com/s/1aGwRBnZnbbwHAE15vE7l5g
提取码:yi1q
代码设计
///*************************************************************************
///*************************************************************************
#include<reg52.h> ///包含头文件
#include<MAIN.h>
#include<lcd1602.h>
//#define uint unsigned int
//#define uchar unsigned char
//#define ulong unsigned long
sbit zheng = P1^0;
sbit fan = P1^1;
sbit ting = P1^2;
sbit jia = P1^3;
sbit jian = P1^4;
sbit clear = P1^5;
sbit bee = P1^6;
sbit pingzi = P1^7;
sbit PWM1 = P2^0;
sbit PWM2 = P2^1;
sbit ena = P2^2;
sbit max = P2^3;
uint bottle=0;
uint box=0;
uint zhuansu[4]={0,0,0,0};
uint PZ[4]={0,0,0,0};
uchar str1[16]="bottle:00 box:00";
uchar str2[16]="speed:0000 ";
uchar time;
uchar count;
ulong zhuan;
flag=1;
///*************************************************************************
/// MAIN函数
///功能:
///*************************************************************************
void main()
{
timer_init();
LCD_Init();
ena=0;
bee=0;
max=1;
while(1)
{
cleardate();
zhengz();
fanz();
tingz();
jias();
jians();
LCD();
pingshu();
}
}
///*************************************************************************
/// 延时函数
///功能:
///*************************************************************************
void delay1(uint z)// 延时程序,zms.
{
uint x,y;
for(y=z;x>0;x--)
for(y=110;y>0;y--);
}
///*************************************************************************
/// 数据计算函数
///功能:
///*************************************************************************
void chuli()
{
zhuan=count*500/20;
zhuansu[0]=(count*10/1000); //转换转速的千位
zhuansu[1]=(zhuan/100%10); //转换转速的百位
zhuansu[2]=(zhuan/10%10); //转换转速的十位
zhuansu[3]=(zhuan%10); //转换转速的个位
PZ[0]= (bottle/10%10); //瓶数十位
PZ[1]= (bottle%10);//瓶数个位
PZ[2]= (box/10%10);// 箱数十位
PZ[3]= (box%10); // 箱数个位
}
///*************************************************************************
/// 清除数据函数
///功能:
///*************************************************************************
void cleardate()
{
if(clear==0)
{
delay1(2);
if(clear==0)
{
LCD_Clear();
LCD_Init();
bottle=0;
box=0;
chuli();
}
}
}
///*************************************************************************
/// LCD显示函数
///功能:
///*************************************************************************void
void LCD()
{
LCD_Manifest(1,7,PZ[0]);
LCD_Manifest(1,8,PZ[1]);
LCD_Manifest(1,14,PZ[2]);
LCD_Manifest(1,15,PZ[3]);
LCD_Manifest(2,6,zhuansu[0]);
LCD_Manifest(2,7,zhuansu[1]);
LCD_Manifest(2,8,zhuansu[2]);
LCD_Manifest(2,9,zhuansu[3]);
}
///*************************************************************************
/// 蜂鸣器控制函数
///功能:
///*************************************************************************
void beebee()
{
bee=0;
delay(100);
bee=1;
delay(100);
bee=0;
}
//*************************************************************************
/// rs485发送
///功能:
///*************************************************************************
void rs485send(uchar date) //rs485发送
{
SBUF=date;
while(!TI);
TI=0;
}
void rs485open() //包装机rs485开启指令
{
rs485send((uchar)0xAA);
delay1(100);
rs485send((uchar)0x33);
delay1(100);
rs485send((uchar)0xDD);
delay1(100);
}
void rs485stop() //包装机rs485停止指令
{
rs485send((uchar)0xAA);
delay1(100);
rs485send((uchar)0x55);
delay1(100);
rs485send((uchar)0xFF);
delay1(100);
}
///*************************************************************************
///流水线控制
///功能:流水线瓶子数量测量,箱数测量及包装机控制
///*************************************************************************
void pingshu()
{
if(pingzi==1)
{
delay1(2);
if(pingzi==1)
{
bottle+=1;
if(bottle>51)
{
ulong i;
beebee();
bottle=1;
if(box<=99) {box+=1;}
else box=0;
delay1(100);
rs485open();
for(i=0;i<1000;i++)
{delay1(200);}
rs485stop();
}
chuli();
}
while(!pingzi);
}
}