关于单片机独立按键程序分析 纯属新手分析的理论不知道对不对欢迎指正批评

关于单片机独立按键程序分析 纯属新手分析的理论不知道对不对欢迎指正批评,首先非常感谢前面通过请教论坛师傅关于独立按键按下后等待松开例程的原理,后自己又继续研究其程序原理并且举一反三…

关于单片机独立按键程序分析 纯属新手分析的理论不知道对不对欢迎指正批评,首先非常感谢前面通过请教论坛师傅关于独立按键按下后等待松开例程的原理,后自己又继续研究其程序原理并且举一反三
根据前面的原理自己又在鼓捣敲了个程序并且配合软件调试单步运行似乎也可行。下面上程序:
       static uchar   loo_go=1;//按键松开检测变量
       static uchar  KEY_NUM=0;//键值变量
        void key_scan()
        {
                if(k1!= loo_go)
                {
                        if loo_go==0)
                        {
                                KYE_NUM1=1;        
                        }
                         loo_go=k1;        
                }
        }

下面为本人分析此程序过程:
1:当按按键没有按下时第一个if(k1!= loo_go)不成立所以不执行后面语句直接跳出并且把看k1原本的值赋值给按键松开检测变量《这个值没有发生改变
则认为按键没有按下》 loo_go=k1;
2:当按键第一次被按下时第一个if(k1!= loo_go)条件成立k1此时不等于1《因为按键被按下为0姑且k1不是1而是0而成立》后执行它后面语句
继续判断第二个条件if (loo_go==0)此时按键松开检测变量loo_go值不等于0《上面定义时默认为1》而不执行它后面语句直接跳出到loo_go=k1;此时
把k1的值赋值给按键松开检测变量loo_go《这里的时因为是按键被按下k1为0所以按键松开检测变量loo_go也为0》后退出按键扫描函数
3:在这里《假设按键第一次被按下后没有松开的话当主循环再次进入到按键扫描函数后》
4:再开始判断第一个if(k1!= loo_go)条件此时判断条件已经改变而是要判断按键不等于0时条件成立《此时因为上一次的按键按下后将 loo_go赋值为0所以判断条件被改变》如果按键还不松开又直接跳出到loo_go=k1;此时
把k1的值赋值给按键松开检测变量loo_go《这里的时因为是按键被按下k1为0所以按键松开检测变量loo_go也为0》后退出按键扫描函数
5:《假设按键松开当主循环再次进入到按键扫描函数》
6:再进入扫描函数开始判第一个if(k1!= loo_go)条件此时判断条件已经改变而是要判断按键不等于0时条件成立
此时因为按键被松条件成立《因为一松开就等于1所以不等于0》后继续执行后面语句进入到第二个条件if loo_go==0)此时条件时成立的《因为第一次按下时此 loo_go赋值为0并且保存所以条件成立》继续执行下面语句将KYE_NUM1=1;键值变量赋值为1,《再出来把k1赋值给按键松开检测变量loo_go因为按键已经松开k1为1此时loo_go也等于1》完成按键按下后和抬起的整个过程。
7:根据上述分析过程可认为按键按下并没有给KYE_NUM1=1;键值变量赋值为1;而是按键抬起后才给赋完成了按键按下检测和抬起检测而且。
如有不对的地方欢迎各位论坛老师指证批评!!!!!!!!!!!!!!!!!!!

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115