stm32编程问题,状态机,求大神指导,初学者,主要是switch语句后面的变量取值不明白
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32编程问题,状态机,求大神指导,初学者,主要是switch语句后面的变量取值不明白相关的知识,希望对你有一定的参考价值。
状态机的程序中,如果用到switch语句,那后面的变量没有赋初值,我们应该转向哪一个case语句啊,程序见下方,由于程序太长,我就把大概意思写上了。。。。。
typedef enum
KeyScanState_0 = 0x00,
KeyScanState_1 = 0x01,
KeyScanState_2 = 0x02,
KeyScanState_Typedef;
int main(void)
vu16 KeyPortStatus = 0;
/* 定义按键扫描状态枚举变量 */
KeyScanState_Typedef KeyScanState;
while(1)
/* 查询20ms到? */
if(SysTick_GetFlagStatus(SysTick_FLAG_COUNT) == SET)
/* 读取IO电平 */
KeyPortStatus = GPIO_ReadInputData(KEYPORT) & 0x000f;
/* 进入状态机流程 */
switch(KeyScanState) ·········就是这里不明白啊啊啊 啊 啊
case KeyScanState_0:
case KeyScanState_1:
case KeyScanState_2:
我不知道你的定义我就暂时以PB口为你读取KEY的口吧,看这状态肯定是上拉然后低4位是按键,所以将口除低4位外全部清零(&0x000f)就是保留低4位二进制就是1111。
然后switch(KeyScanState) 这其实就是将第4位判断哪个具体位为0,说明哪个按下。
然后在把2进制的值用10进制表示当然你这个是已经被重新定义过的了:
KeyScanState_0,1,2.。。。这些,所以你要先看看他是定义的几才行。没有按键为0时应该是0x0f。。以此类推 参考技术A 你说的地方就是读到按键后进行按键操作啊.
if(SysTick_GetFlagStatus(SysTick_FLAG_COUNT) == SET)看是不是到了20MS.这个是去抖动的.
KeyPortStatus = GPIO_ReadInputData(KEYPORT) & 0x000f;这个是从GPIO里读按键值的,估计是看是否有按键按下吧.或者是读ADC值转换成健值.KEYPORT未见定义,不知道你的代码能否编译过.
switch(KeyScanState) 这里进行按键选择啊.在这之前应该会有KeyScanState的符值.你的代码一段一段的,要么是不全,要么是错的.
逻辑非常简单.刚学C两个月就能看懂.不打击你.追问
大哥,要是有KeyScanState的符值,你认为我还会出来问吗,我不告诉你这是大致程序了吗,全打下来写不下来,你看清了再来打击我吧
参考技术B 完整的流程:http://www.amobbs.com/thread-5544745-1-1.html里面是你程序的出处!
int main(void)
1.初始化各个模块
while(1)
2.扫描按键;
3.给扫描到的按键赋值(包括长按键、短按键、KEY0、KEY1等)即状态;
4.根据不同的键值进行不同的业务(switch case);
很完美的状态机,我也是初学,特来膜拜的。本回答被提问者采纳
以上是关于stm32编程问题,状态机,求大神指导,初学者,主要是switch语句后面的变量取值不明白的主要内容,如果未能解决你的问题,请参考以下文章