| 这样行吗?当你的页面滚动程序显示完后把对应的页面的标志位置为当前页数,比如这样if(h==1&&biaozhi==5)不过这样的话好像只能朝着一个方向循环滚动。 |
|
本帖最后由 egypt 于 2020-5-21 09:37 编辑 从题主给的代码,无法看出 “切换的内容有5项”,所以只能从别的角度来分析 首先假设一个 main 中主逻辑循环长这样 main () { InitHardware(); // 硬件初始化 while(1) { GetKey(); // 扫描按键函数 ProcessKey(); // 根据按键设定标志函数 DoDisplay(); // 根据标志进行显示函数 .... // 此处为 delay 或者其它功能性的函数 } } 这个流程简单说,像 获取消息事件 → 分拣处理消息事件并生成内部标志 → 根据内部标志执行对应动作 回过来说题主的代码, 假设 GetKey / ProcessKey / DoDisplay 函数都是只耗费 【1毫秒】的代码, 那么 GetKey 哪怕写在 DoDisplay() 里头都没问题(代价是:可读性、可维护性就非常差了。一点都不模块化); 但是,大部分情况下 DoDisplay() 函数的耗时,经常是一个不定的,而且很大的值。可以设想一下,假设 DoDisplay() 这个函数耗费 10秒 才结束,那么跑完一次外围 while 循环,就得 10秒,衍生为,读取按键就变成 10秒读取一次,或者说按键要按住 10秒才能让逻辑循环往下走一轮(从题主开头的表述就是,一直按着按键,一直显示的内容停止,松开按键才能切换)…… 常见改法是,要确保 GetKey / ProcessKey 有机会被执行和【设置标志】。这也是题主提及的,【定义一个切换标志位】的核心意思了。至于 GetKey 在 中断上 或者 轮询 等机制,或者说 DoDisplay 需要分拆为片段等【比方说每显示一行字就为一个片段?】,留待题主自己根据项目复杂度去评估了【其实有些机器在画面的移动卷屏时,只是操作显示缓存,多出来的地方留黑边。操作缓存的效率可比读取字模快多了】 |