软件的作用在于发挥硬件的特性,这是软件编程的宗旨;编程的魅力在于把逻辑问题表达出来,或者牵强的说是把逻辑问题转化为空间问题。在做C编程的时候,我们考虑的都是逻辑问题,而解决问题的落脚点确实在程序的某个位置加个什么语句,这个“位置”一次应该是属于空间的范畴,逻辑问题的本身是复杂的,语言的魅力就在于不仅能把逻辑问题表达出来,还能给我们提供一个思考讨论的平台。
本文主要讨论的是C语言编程中按键和开关的问题,或者隐身为输入检测。
电脑自带c语言编程软件按键和开关是我们生活中很常见的东西,例如我们的电脑就有键盘,家电都有电源按钮等等。根据用途、领域、介质等的不同,就有不同的名字,诸如:按键、按钮、键盘、触摸屏、开关等等。
首先是格物致知,在纷繁复杂的实物中,到他们的本质和规律。我们可以统归为按键和开关这两类。按键的本质特性就是按下去就有反映,松开就回复原样,也就是在我们按下去的时间段里有效,在我们看来就像是个脉冲,脉冲的长度就是我们按下去的时间,例如我们的电脑键盘,手机按键等。开关的本质就是动作之后一直有效,与是否松手无关,直到我们再去操作为止。看上去更像是一个电平变化,例如我们的自锁开关、闸刀等。
以上都是按键和开关的硬件特性,与具体系统的功能不能一一对应,例如:电脑的键盘的本质应该是按键,打字的时候我们按下一个键,屏幕就会出现相应字符,我们松开时就没有了反映,其有效的时间段是我们按下去的时间。而当我们用qq播放器看电影的时候,按一下空格键,就会暂停电影的播放,直到我们再去操作才能继续电影的播放。前者很好理解,而后者就好像是按键实现了开关的功能。一个系统最后所呈现的功能是有软件和硬件共同决定的,不能以偏概全。
按键和开关的介绍就到这里,总结就是:根据其本质统分为按键和开关,其范畴属于硬件,还没有涉及到软件部分,这和系统的功能没有确定的对应关系,下面介绍相关的软件部分。
在软件范畴来说,就是输入检测问题,检测的最本质就是查看输入是高电平还是低电平,就是去读相关的寄存器,这是软件中距离硬件最近的部分了,也就是硬件在软件中的映射。常用而又比较完善的检测方法是跳边检测和电平检测同时应用,具体来说,通过跳边检测来发现输入有变化,再通过电平检测确定是什么变化,并作相应的操作。
 总体来说,软件设计有系统的功能和所用的硬件特性来决定。如例1:用开关作为开关,编写程序,控制流水灯是否执行。我们可以用可以用直接用电平检测,高电平的时候就执行流
水灯程序,低电平的时候就不执行流水灯程序。例2:用按键作为开关,编写程序,控制流水灯是否执行。我们就不能电平检测了,必须要用跳边检测。还要对跳变检测进行计数,分奇偶来控制流水灯程序是否执行。例3:分别用按键和开关作为开关,编写程序,控制流水灯执行一次(假设流水灯有8个),而其他程序继续执行。这时候我们要在前面基础上加上一个标志位,用来标志一次执行是否完成。具体来说就是在判断是否执行流水灯程序时候,增加对标志位的判断,禁止对流水灯程序的二次执行。这里需要强调的是判断和执行一定要分开做,不要混为一坨,这样可以使得程序的结构更加的合理,降低复杂度,便于维护。例4:分别用按键和开关作为开关,编写程序,控制LED的一秒钟闪烁一次,要求用定时器实现。这时候不论式开关还是按键都要使用状态标志位,来标志程序正在执行,即使输入有效,也不一定执行程序,还要判断状态标志位。
这里的流水灯程序和系统的功能是对应的,是系统的要求,没有商量的余地。我们现在对这段程序做一下格物致知,我们可用这几个标准来衡量这段程序,分别是:执行次数、可重复执行性、执行时间和复杂度等来衡量。
执行次数:往往要用执行完成标志位,并参与是否执行的条件判断,例如上面的执行一次流水灯程序的例子。
可重复执行性:往往要用到执行状态标志位,并参与是否执行的条件判断,防止重复执行。这要区别于多次执行。
执行时间:往往决定执行的方式,既是否使用定时器,这关系到可重复执行性的问题。
复杂度:这段程序是否执行有多个条件决定的时候,我们就尽量把条件的判断放在一起,不和执行相混淆,以降低复杂度。
下面论述一下跳变检测、跳变有效、跳变输入、电平检测、电平有效、电平输入的问题。
电平检测就不说了,读寄存器就可以了,跳边检测的实质是多次的电平检测是否相同,这是检测方法的范畴。而电平有效和跳边有效是条件判断,属于程序逻辑关系的范畴。跳变输入和电平输入是硬件的范畴,对应于按键和开关,动作速度比较慢,与我们的操作息息相关,例如我们的键盘。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。