微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于STM32的多功能数字钟

基于STM32的多功能数字钟

时间:11-18 来源:互联网 点击:

0;

外部变量:

算法:采用软件延时实现按键扫描。

*/

unsigned char KeyScan(void)

{

unsigned char keynum=0;

if((KEY0!=1)||(KEY1!=1)||(WK_UP!=0))

{

delay_ms(10);

if((KEY0!=1)||(KEY1!=1)||(WK_UP!=0))

{

if(KEY0!=1)

{

while(KEY0!=1);

keynum=1;return keynum;}

else if(KEY1!=1)

{while(KEY1!=1);

keynum=2;return keynum;}

else if(WK_UP!=0)

{while(WK_UP!=0);

keynum=3;return keynum;}

else

return 0;

}

else

return keynum;

}

else

return keynum;

}

/*

函数功能:按键扫描函数

输入参数:无

输出参数:返回键码。无按键时返回0;

外部变量:flag_20ms

算法:采用状态机实现按键扫描。

*/

unsigned char KeyScan2(void)

{

static unsigned char keynum=0,step1=0;

if(flag_20ms==0x01)

{

flag_20ms=0;

switch(step1)

{

case 0:{//状态1:检测是否有按键按下

if((KEY0!=1)||(KEY1!=1)||(WK_UP!=0))

step1=1;

else

step1=0;

return 0;

//break;

}

case 1:{//状态2:检测是否真的有按键按下

if((KEY0!=1)||(KEY1!=1)||(WK_UP!=0))

{

if(KEY0!=1)

{step1=2; keynum=1;}

else if(KEY1!=1)

{step1=2; keynum=2;}

else if(WK_UP!=0)

{step1=2; keynum=3;}

else

{step1=0; }

}

return 0;

//break;

}

case 2:{//状态3:检测按键是否弹起

if((KEY0!=1)||(KEY1!=1)||(WK_UP!=0))

{step1=2; return 0;}

else

{ step1=0;return keynum;}

//break;

}

default :return 0;

}

}

return 0;

}

/*

函数功能:按键功能解析函数

输入参数:无

输入函数:KeyScan2();

输出参数:无

外部变量:flag_key0,flag_key1

*/

void keyfunction(void)

{

unsigned char temp;

temp=(KeyScan2())|(Remote_Scan());

if(TP_Scan(0))//当触摸按键按下并松开后才返回1,否则返回0;

{//按下时,方框的颜色要发生变化,这样看效果才明显示,

//手松开后,又要恢复原画的颜色。

if((tp_dev.x[0]>50)&&(tp_dev.x[0]<100)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))

{ temp =3;

{LCD_Fill(51,251,99,289,BLUE);LCD_ShowString(60,260,180,24,24,"SET");}

}

else if((tp_dev.x[0]>110)&&(tp_dev.x[0]<160)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))

{ temp=1;

{LCD_Fill(111,251,159,289,BLUE);LCD_ShowString(120,260,180,24,24," + ");}

}

else if((tp_dev.x[0]>170)&&(tp_dev.x[0]<220)&&(tp_dev.y[0]>250)&&(tp_dev.y[0]<290))

{temp=2;

{LCD_Fill(171,251,219,289,BLUE);LCD_ShowString(180,260,180,24,24," - ");}

}

}

if(temp>0)

{ TIM_Cmd(TIM2,ENABLE);

switch(temp)

{

case 1:{

flag_key0=1;

if(flag_tiao>0)

{

S_timer.s_sec =calendar.sec;

S_timer.s_hour=calendar.hour;

S_timer.s_min =calendar.min;

S_timer.s_date=calendar.w_date;

S_timer.s_month =calendar.w_month;

S_timer.s_year=calendar.w_year;

S_timer.s_week =calendar.week;

switch(flag_tiao)

{

case 1: {

if((S_timer.s_sec)<60);

else

S_timer.s_sec=0;

goto kk1;

}

case 2: {

if(S_timer.s_min++<60);

else

S_timer.s_min=0; goto kk1;

}

case 3: {

if(S_timer.s_hour ++<60);

else

S_timer.s_hour=0; goto kk1;

}

case 4: {

if(S_timer.s_week++<7);

else

S_timer.s_week =1; goto kk1;

}

case 5: {

if(S_timer.s_date++<30);

else

S_timer.s_date=1; goto kk1;

}

case 6: {

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

网站地图

Top