如何用8254/8255芯片设计一个电子钟?
发布网友
发布时间:2022-05-20 00:56
我来回答
共2个回答
热心网友
时间:2023-10-21 13:42
1-4键在Y1行:01110 01101 01011 00111
5-8键在Y2行:11110 11101 11011 10111
(1)1键清除功能的设置:
在判别了按键的逻辑值为01110后,将存储时间的每一个内存单元赋0,这样在数码管显示的就是00.00,便达到了清除功能的目的。
(2)2键启动、3键停止计时功能的设置:
在进行2键和3键功能设置之前,我们必须定义一个暂停标志位:PAUSE,它用标准的逻辑值(0、1)来表示,假如PAUSE=0,在进行计时设置的时候,让其自动加1,依次显示时间的各位;假如PAUSE=1,我们就将其返回,停止加1,即暂停计时。
接着,假如我们判别的是2键被按下,就令PAUSE=0,让计数器计时,自动加1;假如我们按下的是3键,就令PAUSE=1,让计数器暂停计时,即停止加1。
(3)4键终止程序功能的设置:
从上面的分析,我们已经知道,只有同时将对应键盘X列的低电平送到相应的数码管才会使得数码管亮,所以我们在判别了是4键被按下后,只要将键盘对应的二进制码全部赋高电平,并送到数码管,同时结束程序,就可以实现熄灭数码管、退出程序的功能。
(4)5键重置初始值功能的设置:
在这里我们设置了两个标志位:调整位标志ADJUST和闪烁标志FLASH。它们的具体设置如下:
ADJUST初始设置为00H,表示非调整状态,01H表示调整秒的个位,02H表示调整秒的十位,03H表示调整分的个位,04H表示调整分的十位。
FLASH设置为逻辑值,初始设置为00H,表示非闪烁状态,0FFH表示闪烁,其闪烁功能实现的过程为:假如FLASH=0FFH,则将00H送给数码管,让数码管不显示。然后,在中断计时程序里面,加入FLASH取反语句,由于计时程序每秒加1循环一次,这样FLASH也实现了每秒改变逻辑值一次。也就是说,数码管闪烁的周期是1秒。当然,闪烁标志位只是在有对应位需要调整的时候才用的着。
要实现5键设置初始时间的功能,我们就必须增加一个键(6键)来控制时间的增加。
(5)6键时间位加1功能的设置
这里,我们再引进一个标志位:按键标志KEYMARK。其设置为逻辑值,初始设置为0,表示允许响应此次按键,并在响应过后,将其置1;KEMARK为1时,表示不响应此次按键。之所以要设置此标志位,是因为键盘扫描的速度非常快,假如我按下6键需要调整时间加1,我按下的时间再怎么短,计算机一定已经扫描了无数次,这样一来,我只按了一次,时间位就会响应无数次,实现了无数次的加1,从而无法实现6键的功能
热心网友
时间:2023-10-21 13:42
你到这个地址看看吧,有图有代码 http://www.pudn.com/downloads45/sourcecode/embed/detail151684.html