📄 jihaitang.c
字号:
/*===================================================================
函数类型:void
功能说明:按下复位键,主函函数调用此复位函数,
电机不断转动,使机构回原点
函数参数:无
=======================================================================*/
void RST(void)
{
dirx=0; //X轴步进电机反转
diry=0; //Y轴步进电机反转
Fx=1; //中断标志
Fy=1;
TMOD=0x10; //定时器1方式1
TH1=0xf6;
TL1=0x3c;
EA=1;
ET1=1;
TR1=1;
while(Fx!=0 || Fy!=0)
{
Write_String(kff);
Delay(400);
Write_String(kfe);
Delay(400);
}
TR1=0;
}
/*==========================================================
函数类型:void
功能说明:用于廷时器time()中断
用于复位函数中,不断向步进电机发送脉冲
函数参数:无
=============================================================*/
void time3()interrupt 3
{
TH1=0xf6;
TL1=0x3c;
if(tg==1) //条件满足,定时器time()引起的中断
ch++;
else
{
if(Fx==1) //X轴步进电动机传感器产生的中断
{
XPulse_Sent=~XPulse_Sent;
}
if(Fy==1) //Y轴步进电动机传感器产生的中断
{
YPulse_Sent=~YPulse_Sent;
}
}
TF0=0;
}
/*=============================================
函数类型:void
功能说明:缸伸出压下按键,廷时后缩回
函数参数:x
================================================*/
void Dic(uchar x)
{
if(x==1)
{
time(100); //廷时
Relay=1; //伸出
time(100); //廷时
}
else
{
time(100);
Relay=0; //缩回
time(100);
Select(4);
P0=0x00;
P2=0xf9;
Select(5); //缩回后工作灯灭
P0=0x00;
P2=0xf9;
}
}
/*===========================================================================
函数类型:void
功能说明:用于片选
函数参数:x
===============================================================================*/
void Select(uchar x) //片选
{
switch(x)
{
case 1:
P2=0xd8; //x9-16
break;
case 2:
P2=0xe8; //x1-8
break;
case 3:
P2=0xf0; //x17-21
break;
case 4:
P2=0xfb; //y9-16
break;
case 5:
P2=0xfa; //y1-8
break;
}
}
/*==================================================================
函数类型:void
功能说明:调用片选函数,依交读取P0口上的数据并存诸在数组上
函数参数:无
==================================================================*/
void Read(void)
{
P0=0xff; //清零
Select(1); //片选
data1=P0; //读取16-9位
P2=0xf9;
Select(2); //片选
data2=P0; //读取0-8位
P2=0xf9;
data1=data1/16*16*16*16+data1%16*16*16+data2/16*16+data2%16;
data3=data1 & 0xf000;
data1= data1 & 0x0fff; //屏蔽低12位
Select(3); //片选
data2=P0; //读取P0口上的五位
P2=0xf9;
data2=data3/(16*16*16)*16*16+data2/16*16+data2%16;
}
/*===================================================================
函数类型:int
功能说明:从P0口读取的数据与数据库中的数据比较,若数据存在则说明按键
是可用,反之,则是不可用
函数参数:无
======================================================================*/
int Checkout(void)
{
uchar tl,sl;
uchar i;
if(data1==data4) //若等于上次的数据,则按键不可用
tl=0;
else
for(i=0;i<23;i++) //循环查找数据库中是否存在这样的编码,若有则说明按键可用
{
if(data1==keylist[i])
{
tl=1;
break; //存在编码,跳出循环
}
else //不存在,tl=0
tl=0;
}
data4=data1;
if(data2==data5)
sl=0;
else
for(i=0;i<9;i++)
{
if(data2==keylist1) //循环查找数据库中是否存在这样的编码,若有则说明按键可用
{
sl=1;
break; //存在编码,跳出循环
}
else
sl=0; //不存在,sl=0
}
data5=data2;
data1=0x0000; //清零
data2=0x0000;
data3=0x0000;
if(tl==1||sl==1) //函数返回值
return 1;
else
return 0;
}
/*============================================================
函数类型:void
功能说明:LCD输出
函数参数:无
=============================================================*/
/* void Output0(uchar x)
{
Write_String (ii[x]);
// time(100);
}*/
/*=================键盘灯显示==============================*/
void Output1(uchar i)
{
Select(4);
P0=xx[i]&0xff00;
P2=0xf9;
Select(5);
P0=xx[i]&0x00ff;
P2=0xf9;
}
/*=============================================================
函数类型:void
功能说明:数据处理,把位移转化为脉冲个数重新赋给原数组
函数参数:无
===============================================================*/
void Culculate(uchar x,uchar y)
{
MM= x/(19.10*Pi)*400;
MN=y/(19.10*Pi)*400;
}
void Check_Busy()
{
LCD_Data_Port=0xff;
RS=0; //选择指令寄存器
RW=1; //选读模式
ENABLE=1;
while (1==Busy);
ENABLE=0;
//Delay_ms(10);
}
//=============写指令========================
void Write_Command (unsigned char Command)
{
Check_Busy();// 检测是否忙
//ENABLE=0;//不
RS=0; //选指令寄存器
RW=0; //写
ENABLE=1;
LCD_Data_Port=Command;
ENABLE=0;
}
//=============写数据 ========================
void Write_Data (unsigned char Data)
{
Check_Busy();// 检测是否忙
//ENABLE=0;//不
RS=1; //选数据寄存器
RW=0; //写
ENABLE=1;// 使能
LCD_Data_Port=Data;
_nop_();
ENABLE=0;
//P1=0xff;
}
//============= 初始化设置===================
void LCD_Initial()
{
Write_Command (0x01); //清屏
Write_Command (0x0c); //显示开关控制 ;设置显示开,光标关,闪烁关
Write_Command (0x06); //Write_Command (0x06);每次将数据输入DDRAM以后,AC自动增1;数据读写操作,画面不动
//Write_Command (0x38); //8 位数据接口,两行显示,5X7点阵
}
//===============写字符串到LCD===============
void Write_String (uchar *String)
{
data unsigned char i;
LCD_Initial();
for (i=0;i<=strlen(String)-1;i++)
{
// if (8==i)
// Write_Command (0xc0); //第8个数据换行(设置DDRAM为第二行)
Write_Data(String[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -