红色logo做网站,企业官网维护,做网站一定要效果图吗,什么是网络营销工具一个完整的嵌入式系统#xff0c;包括任务执行部分和人机交互部分。在前四节中#xff0c;我们已经讲解了LED、LCD和按键#xff0c;用这三者就能够实现一个人机交互系统#xff0c;也即搭建整个嵌入式系统的框架。在后续#xff0c;只要将各个功能加入到这个交互系统中包括任务执行部分和人机交互部分。在前四节中我们已经讲解了LED、LCD和按键用这三者就能够实现一个人机交互系统也即搭建整个嵌入式系统的框架。在后续只要将各个功能加入到这个交互系统中即可完成整个嵌入式系统的设计。因此尽管你什么都不会只会使用LED、LCD和按键也至少能获得省三或省二的奖项。下面我们就以第十四届省赛题为例看看如何实现一个完善的交互系统。 首先我们来看第一个要求按下B1切换界面 结合第二节LCD显示的内容只需要将切换界面处的判断条件更换为key[0].single_flag 1即可
if (key[0].single_flag 1)
{LCD_Clear(Black); //每切换一次界面清一次屏view;if (view 2){view 0;}key[0].single_flag 0; //标志位清零重要
}
再来看第二个要求 B2的要求相对于B1来说只是增加了不同界面的不同功能其本质是一样的。注意第二个小要求需要切换选择参数这就需要一个标志变量choose。每次重新进入参数界面时默认可调整的参数为R只需要在切换界面时把choose重新赋值为R即可。
char choose R;
if (key[1].single_flag 1)
{if (view 0) //数据界面{/* 5s切换模式 */if (M H) M L;else M H;N; //统计次数}else if (view 1) //参数界面{if (choose R) choose K;else choose R;}key[1].single_flag 0; //标志位清零重要
}
要求3 结合要求2当chooseR时对R进行当chooseK时对K进行
if (key[2].single_flag 1 view 1) //参数界面
{if (choose R){R;if (R 10) R 1;}else{K;if (K 10) K 1;}key[2].single_flag 0; //标志位清零重要
}
要求4 要求4的第1个要求与要求3类似不再赘述。第2个要求要标志是否处于锁定状态同样需要一个标志变量lock。
if (key[3].single_flag1 view1) //参数界面
{if (choose R){R--;if (R 1) R 10;}else{K--;if (K 1) K 10;}key[3].single_flag 0; //标志位清零重要
}bool lock 0;
if (view0 lock0) //数据界面解锁状态
{if (key[3].long_flag 1) lock 1;key[3].long_flag 0; //标志位清零重要
}
else if (view0 lock1) //数据界面锁定状态
{if (key[3].single_flag 1) lock 0;key[3].single_flag 0; //标志位清零重要
}
将所有有关LED、LCD与按键的操作封装成函数在主循环中调用即可实现一个交互系统。
/* task.c */#include task.huint8_t view 0;
char choose R;
bool lock 0;
char M L;
int P;
double V, MH, ML;
int R 1;
int K 1;
int N 0;
char text[20];void key_pro(void)
{//B1if (key[0].single_flag 1){LCD_Clear(Black);view;choose R;if (view 2){view 0;}key[0].single_flag 0;}//B2if (key[1].single_flag 1){if (view 0){/***************5s切换模式LED_Toggle(LD2);HAL_Delay(100);***************/LED_Off(LD2);if (M H) M L;else M H;N;}else if (view 1){if (choose R) choose K;else choose R;}key[1].single_flag 0;}//B3if (key[2].single_flag 1 view 1){if (choose R){R;if (R 10) R 1;}else{K;if (K 10) K 1;}key[2].single_flag 0;}//B4if (key[3].single_flag1 view1){if (choose R){R--;if (R 1) R 10;}else{K--;if (K 1) K 10;}key[3].single_flag 0;}if (view0 lock0){if (key[3].long_flag 1) lock 1;key[3].long_flag 0;}else if (view0 lock1){if (key[3].single_flag 1) lock 0;key[3].single_flag 0;}
}void display(void)
{if (view 0){LCD_DisplayStringLine(Line1, (uint8_t *) DATA );sprintf(text, M%c , M);LCD_DisplayStringLine(Line3, (uint8_t *)text);sprintf(text, P%d%% , P);LCD_DisplayStringLine(Line4, (uint8_t *)text);sprintf(text, V%.1f , V);LCD_DisplayStringLine(Line5, (uint8_t *)text);LED_On(LD1);}else if (view 1){LCD_DisplayStringLine(Line1, (uint8_t *) PARA );sprintf(text, R%d , R);LCD_DisplayStringLine(Line3, (uint8_t *)text);sprintf(text, K%d , K);LCD_DisplayStringLine(Line4, (uint8_t *)text);LED_Off(LD1);}else if (view 2){LCD_DisplayStringLine(Line1, (uint8_t *) RECD );sprintf(text, N%d , N);LCD_DisplayStringLine(Line3, (uint8_t *)text);sprintf(text, MH%.1f , MH);LCD_DisplayStringLine(Line4, (uint8_t *)text);sprintf(text, ML%.1f , V);LCD_DisplayStringLine(Line5, (uint8_t *)text);LED_Off(LD1);}if (lock 1) LED_On(LD3);else LED_Off(LD3);
}/* task.h */#ifndef __TASK_H
#define __TASK_H#include main.h
#include stdio.h
#include led.h
#include lcd.h
#include fonts.h
#include key.hvoid key_pro(void);
void display(void);#endif /* __TASK_H */