微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机 液体点滴控制

单片机 液体点滴控制

时间:11-24 来源:互联网 点击:
//==============================200700821=================//

//====================从机滴速测量========================//
#include
//====================数据类型定义========================//
#defineUchar unsigned char
#define Uint unsigned int
//====================常量定义============================//
Uchar t;
Uchar p;
Uchar m;
int time; //ms为单位

//=====================LCD1602变量定义====================//
char xdata Lcd1602CmdPort _at_ 0xf9fc;//E=1 RS=0 RW=0 写命令
char xdata Lcd1602WdataPort _at_ 0xf9fd; //E=1 RS=1 RW=0 写
char xdata Lcd1602StatusPort _at_ 0xf9fe; //E=1 RS=0 RW=1
#define Busy0x80 // 忙判别位
static unsigned char ucLcdPosX; //当前显示指针
static unsigned char ucLcdPosY;
//=====================LCD1602函数定义====================//
extern void LcdWriteData( char dataW ); //LCD写数据
extern void LcdWriteCommand( Uchar CMD,Uchar AttribC ); //LCD写命令
extern void LcdReset( void );
extern void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
void disp_v(void); //显示速度函数
//=====================延时函数定义=======================//
extern void Delay1000Ms(void);
extern void Delay400Ms(void);
extern void Delay5Ms(void);
void delay(Uint m);
//======================滴速变量定义======================//
Uchar set_v; //设定的速度
Uchar real_v; //实际速度
//======================中断初始化函数定义================//
void int_init(void);
//=======================步进电机变量定义=================//
Uchar code FFW[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};
Uchar code REV[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};
sbit K1 = P1^7; //A
sbit K2 = P1^6; //B
sbit K3 = P1^5; //C
sbit K4 = P1^4; //D
//=======================步进电机函数定义=================//
void motor_ffw(void);//正转
void motor_rev(void);//反转
void control(void); //调节滴速
//===================LCD1602函数说明======================//

/*=======================================================
显示光标定位4行
=======================================================*/

void LocateXY( char posx,char posy) {

Uchar temp;

temp = posx & 0xf;
posy &= 0x03;
switch ( posy)
{
case 0:;
break;
case 1:temp |= 0x40;
break;
default:;
}
temp |= 0x80;
LcdWriteCommand(temp,0);
}
/*=======================================================
按指定位置显示数出一个字符
=======================================================*/
void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {

LocateXY( x, y );// 定位显示地址
LcdWriteData( Wdata );// 写字符
}

/*=======================================================
初始化程序, 必须按照产品资料介绍的初始化过程进行
=======================================================*/
void LcdReset( void ) {

LcdWriteCommand( 0x38, 0);// 显示模式设置(不检测忙信号)
Delay5Ms();
LcdWriteCommand( 0x38, 0);// 共三次
Delay5Ms();
LcdWriteCommand( 0x38, 0);
Delay5Ms();

LcdWriteCommand( 0x38, 1);// 显示模式设置(以后均检测忙信号 参数--"1")
LcdWriteCommand( 0x08, 1);// 显示关闭
LcdWriteCommand( 0x01, 1);// 显示清屏
LcdWriteCommand( 0x06, 1);// 显示光标移动设置
LcdWriteCommand( 0x0c, 1);// 显示开及光标设置
}

/*=======================================================
写控制字符子程序: E=1 RS=0 RW=0
=======================================================*/
void LcdWriteCommand( Uchar CMD,Uchar AttribC )
{
if (AttribC)
{
P0=0xff;
while( Lcd1602StatusPort & Busy );// 检测忙信号?
}
Lcd1602CmdPort = CMD;
}

/*=======================================================
当前位置写字符子程序: E =1 RS=1 RW=0
=======================================================*/
void LcdWriteData( char dataW )
{
while( Lcd1602StatusPort & Busy );// 检测忙信号

Lcd1602WdataPort = dataW;
}
//=====================延时函数说明==========================//
// 短延时
void Delay5Ms(void)
{
Uint i = 5552;
while(i--);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top