基于STM32的多功能数字钟
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: {
STM32数字 相关文章:
- STM32 数字电压表 LM317 可调电源(12-03)
- 基于STM32的多功能数字钟(中文版)(11-18)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
