资讯详情

单片机多功能按键处理程序+视频

源程序: /*----------------------------------------------------------------------------- 按键用变量定义 -----------------------------------------------------------------------------*/ volatile unsigned char idata KEY1=0;//多功能按键功能识别器。

volatile unsigned char idata KEY2=0;//多功能按键功能识别器。 volatile unsigned char idata KEYBZ2; volatile unsigned char idata KEY3=0;//多功能按键功能识别器。 volatile unsigned char idata KEYBZ3; volatile unsigned char idata KEY4=0;//多功能按键功能识别器。

volatile unsigned char idata KEY5=0;//多功能按键功能识别器。

volatile unsigned char idata KEY6=0;//多功能按键功能识别器。 volatile bit =0; volatile bit FWBZ;

/*----------------------------------------------------------------------------- 三变量用于默认的速度,宽度,高度。 -----------------------------------------------------------------------------*/ volatile unsigned char idata b=100;//单位是rpm/min volatile unsigned char idata BBZ; volatile unsigned char idata c=2; //宽度单位是毫米 volatile unsigned char idata CBZ; volatile unsigned char idata d=1;//高度单位是毫米 volatile unsigned char idata Z;

/*------------------------------------------------------------- P0引脚定义: P0口有5种定义,每种定义根据P2口给定功能不同而不同。 每种功能不能同时实现,否则会出现混乱。

-------------------------------------------------------------*/ sbitLED_SD =P0^0; //指示灯 sbit LED_KD =P0^1; sbitLED_HD =P0^2; sbitLED_ =P0^3; sbitLED_FW =P0^4; //按键1--第一路调光 sbit SM_BW =P0^5; //按键2--第一路开关 sbitSM_SW =P0^6; //按键3--第二路调光 sbitSM_GW =P0^7;

/*------------------------------------------------------------- P1引脚定义 :P1口为限位检测口。

-------------------------------------------------------------*/ sbit BUZ=P1^0; sbit ZZMC=P1^1;//主轴冲检测 sbitKEY_1=P1^2; // Z轴限位上 ,当高电平表示有限位 sbitKEY_2=P1^3; // Z轴限位下。当高电平表示有限位 sbitKEY_3=P1^4; //主轴中点限位。当高电平表示有限位 sbitKEY_4=P1^5; //角度限位左 。当高电平表示有限位 sbitKEY_5=P1^6; //角度限位右 。当高电平表示有限位 sbitKEY_6 =P1^7; //角度输入2 sbitKEY_7 =P2^7; //角度电机输入2

/* ------------------------------------------------------------- P3引脚定义:P3口为主轴电机调速端口和 主轴编码方向编码,还有中断。 -------------------------------------------------------------*/ sbit CLK = P3^0; //I通讯脉冲 sbitDATAS =P3^1; //SPI通讯数据 sbit B_I =P3^2 ; //SPI通讯反馈 sbitZZZD =P3^4; //主轴中点检测 sbitZDATA =P3^5; //主轴SPI通讯数据口 sbit LK =P3^6;//主轴SPI通讯脉冲口 sbitZSTB=P3^7; //SPI通讯使能口

/*----------------------------------------------------------------------------- LED数显7段编码,调用时只需table[NUM]即可。 -----------------------------------------------------------------------------*/

unsigned char code table[]= { 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79, 0x71,0x00,0x40,0x00 };

/*----------------------------------------------------------------------------- 函数功能 : MS 毫秒 延迟函数 -----------------------------------------------------------------------------*/ void Delay(unsigned int i) { unsigned int j; for(i;i>0;i--) { for(j=0;j<125;j++) {;} } }

/*----------------------------------------------------------------------------- 函数功能 : us 微秒 延迟函数 -----------------------------------------------------------------------------*/ void MyDelay(unsigned int time) { while(time--) { _nop_(); } }

/*----------------------------------------------------------------------------- 函数功能 : us 微秒 精确US延迟 12MHZ延迟6us -----------------------------------------------------------------------------*/ void MyDelay2() { _nop_(); }

/*----------------------------------------------------------------------------- 函数功能 :显示功能显示百位十位个位显示 工作参数 -----------------------------------------------------------------------------*/ void XSGN(unsigned char a) { unsigned char b,c,d;//百位、十位、个位,数显。 EA=0;//关中断等待全部数据送完 b=a/100;//求模运算,取A的百位到百位变量。 if(b==0) { P2=0xff;//百位没有数则没有显示 SM_BW=1; } else { P2=~table[b];//百位有显示则输出参数 SM_BW=1; _nop_(); _nop_(); } SM_BW=0; //关闭百位数显 c=a%100;//取余数运算,取得数为十位和个位。 d=c; //保存十位和个位数。 c=c/10; //求模运算 取十位数。 if(c==0&&b==0) { P2=0xff; SM_SW=1; } else { P2=~table[c]; SM_SW=1; _nop_(); _nop_(); } SM_SW=0; d=d%10; //取个位。 Delay(20); if(d==0&&c==0&&b==0) { P2=0xff; SM_GW=1; } else { P2=~table[d]; SM_GW=1; _nop_(); _nop_(); } SM_GW=0; IE1=0; IE0=0; EA=1;//打开键盘中断 }

/*----------------------------------------------------------------------------- 函数功能 :运行状态指示LED指示灯,与送入参数。 -----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------- 函数功能 :SPI通讯(输出)16BIT输出,DH的高4位决定输出控制指令还是参数数据。当DH高4位且低4位全0那么输出为控制指令 当高4位全高,由低4位决定送出的数据是对应于哪一块的数据。 具体参数介绍 Control (0,0);系统关闭中。Control (0,1);电源开启中。 Control (0,2);系统复位中Control (0,3);系统运行中。Control (0,4);系统暂停中。 Control (0,5);系统从暂停开始运行。 送入数据示意:Control( 0xf0,b); 送入的参数是速度参数。Control( 0xf1,c); 送入的参数是宽带参数。 Control( 0xf2,d); 送入的数据是厚度参数。

-----------------------------------------------------------------------------*/

void Control(unsigned char DH,unsigned char DL) { unsigned int i,cmd; EA=0; EX0=0; cmd=DL; cmd|=DH<<8; STB_I = 0;//拉低片选 Delay(1); for(i=0;i<16;i++) { CLK = 0; //这里大约是100us if(cmd & 0x8000)DATAS = 1;//把datas的参数与16进制数8000进行位与运算把结果给datas(如果有数则DAT=1 else DATAS = 0;//否则DAT=0 MyDelay(50) ;

CLK = 1; MyDelay(50) ;//这里大约是100us cmd <<= 1; } DATAS = 1; STB_I = 1; CLK = 1; IE1=0; IE0=0;

EA=1;

}

/*----------------------------------------------------------------------------- 函数功能 :电源开启下屏闪烁功能

-----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------- 函数功能 : 数据集中处理 -----------------------------------------------------------------------------*/ void main(void) { BBZ=b; //b数据的判断代码 用于判断速度值的改变 CBZ=c; //c数据的判断代码 DBZ=d; KEYBZ2= KEY2; SM_BW=0; //数码管百位 SM_SW=0; //数码管十位 SM_GW=0; //数码管个位 BUZ=1; //关断 EX1=1; //开启按键响应 EA=1; //开启所有设备响应 IT1=1; //设定键盘响应为下降沿响应 IT0=1; //复位识别为下降沿识别 while(1) { if(KEY1==0){P2=0XFF;P0=0XFF; Control (0,0); } while(KEY1==0){;} if(KEY1==1) {Control( 0,1);} while(KEY1==1) { SM_BW=1; SM_SW=1; SM_GW=1; P2=0; LED_SD=0; LED_KD=0; LED_HD=0; LED_YX=0; LED_FW=0; BUZ=1; Delay(500); P2=0XFF; LED_SD=1; LED_KD=1;

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台