本节介绍如何利用PORTB口电平变化中断实现独立式按键检测。
【例6-3】实验电路如图6-5所示。用C语言编程实现当S2~S4中某个按键按下,则把此按键的序号显示在数码管上。例如,按键S3按下,则数码管上显示3。每按一次按键S1,计数值加1。要求采用PORTB口电平变化中断。
图6-5 B口中断控制数码管电路图
电路图在光盘位置:“\Example\Chapter6\S062\SCH\877_B_INT.DSN。
程序分析
●本题目要求采用PORTB口电平变化中断,则RBIE应置位,GIE也应置位。
●根据图6-5可知,RB4~RB7外部电路相同,即未按时,输入为1;按下时输入为0。这样在中断服务程序中判断RB4~RB7某位是否为0即可得知按键S1~S4是否按下。
●对于按键S2~S4,要求按下时把序号显示在数码管上。在数码管上显示数字的程序已介绍过,通过字形数组即可实现。(www.daowen.com)
●对于按键S1,要求按下后数码管显示内容加1,所以在未按按键S1之前的状态需要记录,可以用一个全局变量来记录未按按键S1前的数码管显示的值。按下按键S1后使此变量自身加1,然后送数码管输出即可。
设计过程
1)用MPLAB新建项目S062,语言工具选择为“HI-TECH Universal Toolsuite”,保存在“C:\S062”文件夹下。
2)新建main.c文件并加入项目中,其内容如下所示。
3)把项目保存后成功编译出目标文件。然后用调试工具Proteus VSM加载877_B_INT.DSN,启动VSM后运行程序。每按一次S1,数码管显示内容会加1。按S2~S4中的某个键,数码管会显示相应的序号。再继续按S1,数码管显示内容会在当前值的基础上加1。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。