dac0832产生梯形波程序C语言,【8-19】使用DA转换器DAC0832产生梯形波,梯形波的上.doc...

【8-19】使用DA转换器DAC0832产生梯形波,梯形波的上.doc 第八章作业: 1、设某一MCS-51系统,要求连接16个4×4的键盘,其硬件原理如下图

【8-19】使用DA转换器DAC0832产生梯形波,梯形波的上.doc

第八章作业:

1、设某一MCS-51系统,要求连接16个4×4的键盘,其硬件原理如下图所示,请编写相应键值扫描和识别程序。

答:

线路反转法:

程序说明:

本程序通过线路反转法实现对按键扫描码的判读和其他相关操作。

所谓线路反转法就是先通过将列清零读取按键的行值,在通过行清零读取列值,得到按键的扫描码,在通过查表的方式与0~F数值对应的按键扫描码比较得到相应的按键值。本程序通过在有键按下和键松开时添加的延时10ms子程序实现了防抖功能,同时利用了按键状态标志位(有键按下时标志为1,无键按下时标志为0)实现了对键按下与键松开的判断,同时也基于该状态标志位的操作实现了对连击和串键的避免,即通过在执行完相应的按键操作子程序并返回主程序后,通过不断读取按键值并判断状态标志位,如果始终为1(即该键始终按下或有其他键串键)则程序不向下执行,直至检测到键松开才继续执行。

程序流程图:(为简便只画出了主程序和按键获取子程序的流程图,因为延时子程序和按键操作子程序十分明了就不画了)

源程序:

ORG0000H

LJMPMAIN

ORG0030H

KEY:MOVP1,#00H;按键获取与判断子程序

MOVP0,#0FH;线路反转法,读行值

MOVA,P0

ANLA,#0FH

MOVB,A

MOVP0,#00H

MOVP1,#0FH;线路反转法,读列值

MOVA,P