资源描述:
《基于51单片机按键长按短按效果源程序.docx》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于51单片机按键长按短按效果源程序[复制链接]
*实验名称:多位数按键加减**晶振:12MHZ*内容:按键加减数字,多个数码管显示,使用定时器做数码管动态扫描**并区别长按短按效果,完全可以应用的实际生产中**---------------------------------------------------------------*/#include//包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbitKEY_ADD=P3^3;//定义按键输入端口S17sbitKEY_DEC=P3^2;//S18#defineDataPortP1//定义
2、数据端口程序中遇到DataPort则用P1替换sbitLATCH1=P2^0;//定义锁存使能端口段锁存sbitLATCH2=P2^1;//位锁存sbitP35=P3^5;//这是为了关闭开发板上的点阵实际应用去掉unsignedcharcodeHEYAO_DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码值0123456789unsignedcharcodeHEYAO_WeiMa[]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};//分别对应相应的数码管点亮,即位码u
3、nsignedcharTempData[8]={0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};//存储显示值的全局变量voidDelayUs2x(unsignedchart);//函数声明voidDelayMs(unsignedchart);voidInit_Timer0(void);voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*------------------------------------------------主函数--------------------------------
4、----------------*/voidmain(void){unsignedcharnum=0,key_press_num;P35=0;//这是为了关闭开发板上的点阵实际应用去掉KEY_ADD=1;//按键输入端口电平置高KEY_DEC=1;Init_Timer0();while(1)//主循环{if(!KEY_ADD)//如果检测到低电平,说明按键按下{DelayMs(10);//延时去抖,一般10-20msif(!KEY_ADD)//再次确认按键是否按下,没有按下则退出{while(!KEY_ADD){key_press_num++;DelayMs(10);//10x200=
5、2000ms=2sif(key_press_num==200)//大约2s{key_press_num=0;//如果达到长按键标准//则进入长按键动作while(!KEY_ADD)//这里用于识别是否按//键还在按下,如果按//下执行相关动作,否则退出{if(num<99)//加操作num++;//即时把显示数据处理,如果去掉下面2//句处理信息,实际上看不到渐变效果,//而是看到跳变效果//用户可以自行屏蔽测试//分解显示信息,如要显示68,则68/10=668%10=8TempData[0]=HEYAO_DuanMa[num/10];TempData[1]=HEYAO_DuanMa
6、[num%10];DelayMs(50);//用于调节长按循环操作//的速度,可以自行调整此值以便达到最佳效果}}}key_press_num=0;//防止累加造成错误识别if(num<99)//加操作num++;}}if(!KEY_DEC)//如果检测到低电平,说明按键按下{DelayMs(10);//延时去抖,一般10-20msif(!KEY_DEC)//再次确认按键是否按下,没有//按下则退出{while(!KEY_DEC){key_press_num++;DelayMs(10);if(key_press_num==200)//大约2s{key_press_num=0;while
7、(!KEY_DEC){if(num>0)//减操作num--;//分解显示信息,如要显示68,则68/10=668%10=8TempData[0]=HEYAO_DuanMa[num/10];TempData[1]=HEYAO_DuanMa[num%10];DelayMs(50);//用于调节长按循环操作的速度}}}key_press_num=0;//防止累加造成错误识别if(num>0)//减操作num--;}}//分解显示信息,如要显示68,