stm32编程问题,状态机,求大神指导,初学者,主要是switch语句后面的变 ...
发布网友
发布时间:2024-05-13 17:01
我来回答
共3个回答
热心网友
时间:2024-05-14 05:29
你要知道哪个数据先要知道:KeyPortStatus = GPIO_ReadInputData(KEYPORT) & 0x000f;这行
我不知道你的定义我就暂时以PB口为你读取KEY的口吧,看这状态肯定是上拉然后低4位是按键,所以将口除低4位外全部清零(&0x000f)就是保留低4位二进制就是1111。
然后switch(KeyScanState) 这其实就是将第4位判断哪个具体位为0,说明哪个按下。
然后在把2进制的值用10进制表示当然你这个是已经被重新定义过的了:
KeyScanState_0,1,2.。。。这些,所以你要先看看他是定义的几才行。没有按键为0时应该是0x0f。。以此类推
热心网友
时间:2024-05-14 05:31
你说的地方就是读到按键后进行按键操作啊.
if(SysTick_GetFlagStatus(SysTick_FLAG_COUNT) == SET)看是不是到了20MS.这个是去抖动的.
KeyPortStatus = GPIO_ReadInputData(KEYPORT) & 0x000f;这个是从GPIO里读按键值的,估计是看是否有按键按下吧.或者是读ADC值转换成健值.KEYPORT未见定义,不知道你的代码能否编译过.
switch(KeyScanState) 这里进行按键选择啊.在这之前应该会有KeyScanState的符值.你的代码一段一段的,要么是不全,要么是错的.
逻辑非常简单.刚学C两个月就能看懂.不打击你.
热心网友
时间:2024-05-14 05:35
完整的流程:
http://www.amobbs.com/thread-5544745-1-1.html里面是你程序的出处!
int main(void)
{
1.初始化各个模块
while(1)
{
2.扫描按键;
3.给扫描到的按键赋值(包括长按键、短按键、KEY0、KEY1等)即状态;
4.根据不同的键值进行不同的业务(switch case);
}
}
很完美的状态机,我也是初学,特来膜拜的。