按键去抖对按键输入的整数进行处理程序未加小数点.docx
- 文档编号:24611791
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:16
- 大小:17.57KB
按键去抖对按键输入的整数进行处理程序未加小数点.docx
《按键去抖对按键输入的整数进行处理程序未加小数点.docx》由会员分享,可在线阅读,更多相关《按键去抖对按键输入的整数进行处理程序未加小数点.docx(16页珍藏版)》请在冰豆网上搜索。
按键去抖对按键输入的整数进行处理程序未加小数点
/***************************************************************************************
****************************************************************************************
*FILE:
key.c
*Description:
keyprocess
*
*Copyright(c)2003~2007byWANGSHAOWEI.AllRightsReserved.
*
*History:
*VersionNameDateDescription
1.0WangShaowei2003/07/16InitialVersion(MCUSystem)
2.0WangShaowei2005/06/01MS2
3.0WangShaowei2007/03/11MS3
****************************************************************************************
****************************************************************************************/
#include"stm32f10x_lib.h"
#include"stm32f10x_type.h"
#include"common.h"
#include"key.h"
#defineShort_keycounter7//¶ÔɨÃèµ½µÄ°´¼ü´ÎÊý¼ÆÊý£¬Õâ¾ö¶¨ÁË°´¼üµÄÁéÃô¶È¡£
u8kk;
U8keycan;
U8m=0;
U8a[10]={0};//mΪÊý×éµÄϱ꣬a[10]ÓÃÀ´´æ·Å¼üÈëµÄÊýµÄÿһλ¡£
U32temp1=0;
U32temp2=0;//temp1¡¢temp2·Ö±ðÓÃÀ´´æ·Å¼üÈëÖµµÄÕûÊý²¿·ÖºÍСÊý²¿·Ö¡£
U32key_counter=0;//ÓÃÀ´¼ÆÊý°´¼ü¼ì²âµ½µÄ´ÎÊý
U8t1[13]={0};//ÓÃÀ´´æ·Åtemp¾calculate¼ÆËãºóµÄÿһλֵ¡£
voidkey_check(void)
{
U8linekeyNo;//,U8keycan;
U8checkkeyline();
U8checkkeyrow();
//staticU8KeySave=0;
linekeyNo=checkkeyline();
if(linekeyNo!
=0xff)
{keycan=checkkeyrow();
msg_send_msg(MSG_KEY,keycan);
//MSG_SEND_MSG(MSG_KEY,keycan);
}
//KeySave=KeyRead;
}
/*******************************************************************************
*FunctionName:
u8checkkey
*Description:
checkisthekeyhasbeenpush
*Input:
None
*Output:
None
*Return:
oxff(nokeywaspush)or0x00(No.1line)0x01(No.2line)
0x02(No.3line)0x03(No.4line)
*******************************************************************************/
u8checkkeyline()
{GPIOA->ODR=0xfffffff0;
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==0x00)return(0x00);
elseif(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==0x00)return(0x01);
elseif(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==0x00)return(0x02);
elseif(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0x00)return(0x03);
elsereturn(0xff);
}
/*******************************************************************************
*FunctionName:
u8checkkey
*Description:
checkisthekeyhasbeenpush
*Input:
None
*Output:
None
*Return:
oxff(nokeywaspush)or0x00(No.1line)0x01(No.2line)
0x02(No.3line)0x03(No.4line)
*******************************************************************************/
u8checkkeyrow()
{
u8linenummber;
linenummber=checkkeyline();
GPIOA->ODR=0xfffffffE;
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==0x00)kk=(0x00+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==0x00)kk=(0x00+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==0x00)kk=(0x00+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0x00)kk=(0x00+linenummber);
GPIOA->ODR=0xfffffffD;
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==0x00)kk=(0x04+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==0x00)kk=(0x04+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==0x00)kk=(0x04+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0x00)kk=(0x04+linenummber);
GPIOA->ODR=0xfffffffB;
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==0x00)kk=(0x08+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==0x00)kk=(0x08+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==0x00)kk=(0x08+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0x00)kk=(0x08+linenummber);
GPIOA->ODR=0xfffffff7;
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)==0x00)kk=(0x0C+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==0x00)kk=(0x0C+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==0x00)kk=(0x0C+linenummber);
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)==0x00)kk=(0x0C+linenummber);
return(kk);
}
voidreset_temp(void)//¶Ô´æ·Å¼üÈëÖµ²Ù×÷µÄ¸´Î»´¦Àí£¬ÎªÏÂÒ»´ÎÊäÈëƵÂÊÖµ×ö×¼±¸
{u8i=0,j=0;
m=0;
for(i=0;i<10;i++)
{
a[i]=0;
}
//Êý×éÇåÁã²»Ó¦¸ÃÓÃ"a[10]={0};"±àÒë³ö´í£»¶øÓ¦¸ÃÓÃÒ»¸öforÑ»·Óï¾ä¡£
temp1=0;
temp2=0;
key_counter=0;
for(j=0;j<13;j++)
{
t1[j]=0;
}
//t1[10]={0};
}
voidcalculate_temp1(void)//¸ù¾ÝλÊý´úÈë¶ÔÓ¦µÄ¹«Ê½,Ëã³öÕûÊý²¿·ÖµÄÖµ¡£
{
switch(m)
{
case0:
temp1=0;
break;
case1:
temp1=a[0]-48;//ÒòΪÄ㸳ֵ¸øa[m]µÄʱºòÊÇ°Ñ×Ö·û¡®*¡¯¸³¸øËüµÄ£¬¼ÆËãµÄʱºò¾ÍĬÈÏÓÃÆäASIICÂëÖµ¼ÆËã¡£¹Êµ±³õ»áÓÐ48µÄ¹Ì¶¨²îÖµ¡££¿£¿£¿
break;
case2:
temp1=(a[1]-48)+((a[0]-48)*10);
break;
case3:
temp1=(a[2]-48)+((a[1]-48)*10)+((a[0]-48)*100);
break;
case4:
temp1=(a[3]-48)+(a[2]-48)*10+(a[1]-48)*100+(a[0]-48)*1000;
break;
case5:
temp1=(a[4]-48)+(a[3]-48)*10+(a[2]-48)*100+(a[1]-48)*1000+(a[0]-48)*10000;
break;
case6:
temp1=(a[5]-48)+(a[4]-48)*10+(a[3]-48)*100+(a[2]-48)*1000+(a[1]-48)*10000+(a[0]-48)*100000;
break;
case7:
temp1=(a[6]-48)+(a[5]-48)*10+(a[4]-48)*100+(a[3]-48)*1000+(a[2]-48)*10000+(a[1]-48)*100000+(a[0]-48)*1000000;
break;
case8:
temp1=(a[7]-48)+(a[6]-48)*10+(a[5]-48)*100+(a[4]-48)*1000+(a[3]-48)*10000+(a[2]-48)*100000+(a[1]-48)*1000000+(a[0]-48)*10000000;
break;
case9:
temp1=(a[8]-48)+(a[7]-48)*10+(a[6]-48)*100+(a[5]-48)*1000+(a[4]-48)*10000+(a[3]-48)*100000+(a[2]-48)*1000000+(a[1]-48)*10000000+(a[0]-48)*100000000;
break;
case10:
temp1=(a[9]-48)+(a[8]-48)*10+a[7]*100+(a[6]-48)*1000+(a[5]-48)*10000+(a[4]-48)*100000+(a[3]-48)*1000000+(a[2]-48)*10000000+(a[1]-48)*100000000+(a[0]-48)*1000000000;
break;
}
}
voidmmi_process(U8key)
{
switch(keycan)
{
case(0x00):
//Êý×Ö0
key_counter=key_counter+1;
//showzifustr(m*8,0,"0",0,255);
//showzifu(m*8,0,a[m],0x03,255);
if(key_counter>=Short_keycounter)
{
a[m]='0';//a[m]='0'²ÅÄÜÓÃshowzifuÕýÈ·ÏÔʾ£¬¶øÓÃa[m]=0Ôò²»ÏÔʾ¡£
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
//showzifustr(m*8,0,"0",0,255);
break;
case(0x01):
//Êý×Ö1
key_counter=key_counter+1;
//showzifustr(m*8,0,"1",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='1';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x02):
//Êý×Ö2
key_counter=key_counter+1;
//showzifustr(m*8,0,"2",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='2';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x03):
//Êý×Ö3
key_counter=key_counter+1;
//showzifustr(m*8,0,"3",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='3';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x04):
//Êý×Ö4
key_counter=key_counter+1;
//showzifustr(m*8,0,"4",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='4';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x05):
//Êý×Ö5
key_counter=key_counter+1;
//showzifustr(m*8,0,"5",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='5';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x06):
//Êý×Ö6
key_counter=key_counter+1;
//showzifustr(m*8,0,"6",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='6';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x07):
//Êý×Ö7
key_counter=key_counter+1;
//showzifustr(m*8,0,"6",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='7';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x08):
//Êý×Ö8
key_counter=key_counter+1;
//showzifustr(m*8,0,"6",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='8';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x09):
//Êý×Ö9
key_counter=key_counter+1;
//showzifustr(m*8,0,"6",0,255);
if(key_counter>=Short_keycounter)
{
a[m]='9';
showzifu(m*8,0,a[m],0x03,255);
m=m+1;
key_counter=0;
}
break;
case(0x0A):
//·ûºÅHZ
calculate_temp1();
sprintf(t1,"%-d",temp1);
showzifustr(0,12,t1,0x03,255);
showzifustr(80,12,"HZ",0x03,255);
//½ÓÏÂÀ´»¹Òª¼ÆËã³ö¶ÔÓ¦µÄƵÂÊ¿ØÖÆ×ÖÊä³ö¸øGPIO¿Ú¡£
break;
case(0x0B):
//·ûºÅKHZ
calculate_temp1();
sprintf(t1,"%-d",temp1);
showzifustr(0,12,t1,0x03,255);
showzifustr(80,12,"KHZ",0x03,255);
temp1=temp1*1000;
//½ÓÏÂÀ´»¹Òª¼ÆËã³ö¶ÔÓ¦µÄƵÂÊ¿ØÖÆ×ÖÊä³ö¸øGPIO¿Ú
break;//Èç¹û²»¼Óbreak£¬ÔòÒº¾§ÉϽ«²»»áÏÔʾÈκÎÖµ¡£
//case(0x0C):
//·ûºÅDecimal---СÊýµã"."
//case(0x0D):
//´Ó100HZ~10KHZÒÔ100HZµÄ²½½ø½øÐÐɨƵ¹¦ÄÜ¡£
//case(0x0E):
//ºóÍ˹¦ÄÜ£¬¼´Çå³ýǰһλÊäÈëµÄÊý£¬Ï൱ÓÚBackspaceµÄ¹¦ÄÜ
case(0x0F):
//·µ»Ø»òÖØÐÂÉ趨ƵÂÊÖµ
LCD_Clear(255,0);//LCD_Clear(255,0)£»Ö´ÐÐÇåƵ²Ù×÷¹¦ÄÜ¡£
reset_temp();
break;
//default:
//default:
GPIOF->ODR=0x00000000;
}
}
/*ÎÊÌâ1ÊäÈëÒ»¸öƵÂÊÖµ£¬µ±°´HZ¼üʱ£¬Èç¹ûÖ»ÊäÈëÁËһ룬Ôò»áÓÐ48µÄ²îÖµ¡£
ºóÀ´²Å·¢ÏÖ£¬³ÌÐòÊÇ°´ÕÕ×Ö·ûµÄASCIIÂëÈ¥¼ÆËãÈ¥ÁË¡£¶ø¡®0¡¯zifuµÄASCIIÂë
¸ÕºÃΪ48¡£ÎÊÌâ¾Í¼ì²é³öÀ´ÁË¡£×÷ÈçÏÂÐ޸ĺó¾ÍÄܹ»Õý³£Êä³öÁË¡£
voidcalculate_temp1(void)//¸ù¾ÝλÊý´úÈë¶ÔÓ¦µÄ¹«Ê½,Ëã³öÕûÊý²¿·ÖµÄÖµ¡£
{
switch(m)
{
case0:
temp1=0;
break;
case1:
temp1=a[0]-48;//ÒòΪÄ㸳ֵ¸øa[m]µÄʱºòÊÇ°Ñ×Ö·û¡®*¡¯¸³¸øËüµÄ£¬¼ÆËãµÄʱºò¾ÍĬÈÏÓÃÆäASIICÂëÖµ¼ÆËã¡£¹Êµ±³õ»áÓÐ48µÄ¹Ì¶¨²îÖµ¡££¿£¿£¿
break;
case2:
temp1=(a[1]-48)+((a[0]-48)*10);
break;
case3:
temp1=(a[2]-48)+((a[1]-48)*10)+((a[0]-48)*100);
break;
case4:
temp1=(a[3]-48)+(a[2]-48)*10+(a[1]-48)*100+(a[0]-48)*1000;
break;
case5:
temp1=(a[4]-48)+(a[3]-48)*10+(a[2]-48)*100+(a[1]-48)*1000+(a[0]-48)*10000;
break;
case6:
temp1=(a[5]-48)+(a[4]-48)*10+(a[3]-48)*100+(a[2]-48)*1000+(a[1]-48)*10000+(a[0]-48)*100000;
break;
case7:
temp1=(a[6]-48)+(a[5]-48)*10+(a[4]-48)*100+(a[3]-48)*1000+(a[2]-48)*10000+(a[1]-48)*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 按键 输入 整数 进行 处理 程序 小数点