图4.4方式控制电路
此图中,按键采用的连接方式为矩阵式,这种方式的优点是,能充分利用资源,增加系统的可靠性。此键盘实现的功能是当按下第一个键是,数码管就只显0通道号和0通道的电压值,当释放按键,系统继续循环显示。加入此模块后,能够更加直观地观察和检测每一个通道的电压值。
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
第
12 页 共 16 页
第五章 软件设计与说明
5.1 ADC模数转换程序
模数转换测量子程序是用来控制对0809 八路模拟输入电压的AD转换,转换后的数值存于P2口中,其流程图如5.1.2。
START:
CLR P3.6 NOP NOP NOP NOP
图5.1模数转换流程图
;START置位低 us
第
13 页 共 17 页 ;延时
SETB P3.6 ;将START引脚点平拉高 NOP NOP NOP
NOP ;延时us
CLR P3.6 ;又将START拉低 RE: JB P3.7,RE
ACALL D10ms1 ;调用延时子程序 ACALL AD ;调用AD转换程序 ACALL DISP ;调用显示子程序 RET
;检测AD转换是否完成
5.2数据处理子程序
ADC0809转换之后输出的结果是8位二进制数。由公式(1)可知,当ADC0809输出 为(1l1l11111)时,输入电压值V =5.00V{当ADC0809输出为(00000000)时,输入电压值为0.0O0V;当ADC0809输出为(10000000)时,输入电压值V =2.50V。由于单片机进行数学运算时结果只取整数部分,因此当输出为(10000000)时计算出的电压值V =2.OOV,很不准确。为了提高精确度,必须把小数部分保留,具体运算方式如公式(2)。个位:Dout*196/10000 十分位:(Dout*196/1000) 百分位:(Dout*196/100) 千分位:(Dout*196/10) 由此得到较为精确的数值。
第
14 页 共 18 页
图5.2 十六进制转换为三位BCD码
AD:
MOV R0,P2
;将才采集好的值存于R0中
MOV A,R0 ;将值存于寄存器A中 MOV B,#51 ;给B赋值
第
15 页 共 19 页
DIV AB ;A/B
MOV 30H,A ;将最高位存于H中 MOV A,B ;将余数存于A中 CLR F0
;清F0
SUBB A,#1AH ;将A与相减 MOV F0,C ;借位存于F0 MOV A,#10 ;给A赋值为 MUL AB MOV B,#51 DIV AB JB F0,LOOP1
ADD A,#5 ;此段为最高位转化 LOOP1: MOV 31H,A MOV A,B CLR F0 SUBB A,#1AH MOV F0,C MOV A,#10 MUL AB MOV B,#51 DIV AB JB F0,LOOP2
ADD A,#5 ;此段为次高位的转化 LOOP2:
MOV 32H,A ;最低位存于H中 RET
5.3数码管显示程序
第
16 页 共 20 页