准备用mini板完成以下功能:按下开发板上的按键,呼出LCD屏幕上的菜单,然后通过触摸屏幕上的相应区域来调出下一级菜单
但是我的程序只能完成“按下开发板上的按键,呼出LCD屏幕上的菜单”的步骤,调出菜单后触摸屏幕却没有反应
求教
以下为各种初始化:
int main(void)
{
u8 flag; //flag=开启菜单条件
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组2
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
tp_dev.init(); //触摸屏初始化
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
usmart_dev.init(72); //usmart初始化
mem_init(); //初始化内存池
exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
f_mount(fs[1],"1:",1); //挂载FLASH.
while(font_init()) //检查字库
{
LCD_Clear(BLACK); //清屏
POINT_COLOR=RED; //设置字体为红色
LCD_ShowString(60,50,200,16,16,"mini STM32");
while(SD_Initialize()) //检测SD卡
{
LCD_ShowString(60,70,200,16,16,"SD Card Failed!");
delay_ms(200);
LCD_Fill(60,70,200+60,70+16,WHITE);
delay_ms(200);
}
LCD_ShowString(60,70,200,16,16,"SD Card OK");
LCD_ShowString(60,90,200,16,16,"Font Updating...");
key=update_font(20,110,16);//更新字库
while(key)//更新失败
{
LCD_ShowString(60,110,200,16,16,"Font Update Failed!");
delay_ms(200);
LCD_Fill(20,110,200+20,110+16,WHITE);
delay_ms(200);
}
LCD_ShowString(60,110,200,16,16,"Font Update Success!");
delay_ms(1500);
LCD_Clear(BLACK);//清屏
}
while(RTC_Init()) //RTC初始化 ,一定要初始化成功
{
LCD_ShowString(60,130,200,16,16,"RTC ERROR! ");
delay_ms(800);
LCD_ShowString(60,130,200,16,16,"RTC Trying...");
} 以下为功能实现代码:
key=KEY_Scan(0); //扫描按键
if(key)
{
delay_ms(10);
{
if(key) //按键消抖
{
switch(key)
{
case KEY1_PRES: //设置阈值
POINT_COLOR=GRAY;
LCD_DrawLine(0,81,500,81);
LCD_DrawLine(0,261,500,261);
LCD_DrawLine(0,141,66,141);
LCD_DrawLine(0,201,66,201);
LCD_DrawLine(66,81,66,261); //控制区边界
POINT_COLOR=WHITE;
Show_Str(1,91,200,16,"温度检测",16,1);
Show_Str(1,111,200,16,"范围设置",16,1);
Show_Str(1,151,200,16,"湿度检测",16,1);
Show_Str(1,171,200,16,"范围设置",16,1);
Show_Str(1,211,200,16,"甲醛检测",16,1);
Show_Str(1,231,200,16,"浓度设置",16,1);
LCD_Fill(83,300,400,400,BLACK);
Show_Str(83,300,200,16,"KEY1:确认",16,1);
Show_Str(166,300,200,16,"KEY0:返回",16,1);//控制区文字
flag=1;
break;
case KEY0_PRES: //取消警报
LCD_Fill(0,81,500,261,BLACK);
LCD_Fill(83,300,400,400,BLACK);
Show_Str(83,300,200,16,"KEY1:设置",16,1);
Show_Str(166,300,200,16,"KEY0:解除",16,1);
flag=0;
break;
default:
delay_ms(10);
}
}
}
}
if(flag)
{
tp_dev.scan(0); //扫描电阻屏触摸按键
if(tp_dev.sta&TP_PRES_DOWN) //触摸屏被按下且之前处于松开状态
{
if(tp_dev.x[0]>0 && tp_dev.x[0]<66 && tp_dev.y[0]>81 && tp_dev.y[0]<141) //如果在温度按钮内
{
LCD_Fill(0,81,66,141,GRAY);
POINT_COLOR=BLACK;
Show_Str(1,91,200,16,"温度检测",16,1);
Show_Str(1,111,200,16,"范围设置",16,1);
LCD_DrawLine(1,141,66,141);
LCD_DrawLine(66,82,66,141);
}
}
}
|