2 软件设计
2.1 即时开关与状态返回
即时开关与状态返回都是在初始时按KEYl键进入操作的,完成此功能,需要调用键盘读取子程序、灯泡开关子程序、数码管显示子程序、延时予程序等组合。其中键盘读入子程序是整个软件的基础,在键盘没有按键按下时,KEYl、KEY2、KEY3始终保持高电平,此时KEY值为0X38。而当某一个键被按下时,则该键位出现低电平。此时的KEY值必然出现变化,这样,将该值与0X38相与,然后根据得出的新值,就可以判断哪一个键被按下。
软件通常首先运行读取键盘程序,当数码管显示哪一路被选中后,再次读取键盘,以显示该路电器的工作状态,并根据外部输入决定开关操作。由于需要同时完成两个功能,所以,在程序中。设定KEY2和KEY3对电器进行操作,而KEY1用来在状态返回功能完成以后,指示该功能的结束,并开始即时开关功能。具体来说,就是先检测哪个电器对应的按键被按下,然后调用显示子程序在数码管中显示被选中的电器编号。状态返回部分是检测特定电器对应的管脚输出为低电平还是高电平,若输出为低电平,则调用显示0的数码显示子程序,反之则调用显示1的数码显示子程序。即时开关则可在按下电器对应的按键以后,将该电器(这里就是小灯泡)连接的Pl的某个端口进行取反操作,即工作状态反向。
2.2 时间显示
在确定KEY2按键被按下以后,程序将自动调用数码显示,并循环调用周期为1s的中断程序,如果需要设定时间,则可通过外部输入调用时间设定子程序来对时间进行调整。通过外部按键可改变秒、分钟、小时所对应的变量的值,并将其带入数码显示程序,在数码管中显示。在数码显示部分,应先确定段选和位选位,由于有秒、分钟、小时三个部分,故需要连续6个显示管,所以,在程序中要设定从第一个开始的6次循环,每次分别将选中的数码管的序号送到位选端,并将秒、分钟、小时所对应的变量的值作为实参送到段选端,从而使数码管依次显示对应的时间信息。
2. 3 定时开关
通过定时开关可在初始时按KEY3键进入操作。该功能是整个设计的核心和难点,综合运用到了之前几种功能的设计思想。这里也有一个定时中断子程序,但与之前以ls为基准、一分钟循环60次的固定模式不同的是,这是在事先不清楚用户的定时时间的情况下进行的,所以是以1分钟为基数,即定时时间间隔必须为1分钟的整数倍,但循环次数却是一个全局变量。这个全局变量的值可通过用户按键来实现。根据程序设定,若按下KEYl,则表示将该全局变量的值加60,若按下KEY2,则表示将该全局变量的值加1,即KEYl代表1小时,KEY2代表1分钟。此后若再按下KEY3,则表示设定结束,此时全局变量的值表示进行1分钟的定时的次数,在定时结束时,将该电器(这里就是小灯泡)连接的P1的某个端口进行取反操作,即可完成开关。这一功能的子程序流程图如图1所示。