拨码开关常用于配置编码或设置状态,例如某些多媒体教室常用的硬件广播卡就是用拨码开关来配置地址编码,某些遥控器也用拨码开关设置收发双方的匹配地址编码。在图3-10所示仿真电路运行过程中,任何时候改动拨码设置,当前所设定的编码值将实时刷新显示在数码管上。
图3-10 数码管显示拨码开关编码
(一)拨码开关接法
Proteus中的8位拨码开关仿真组件有两种,分别为:DIPSWC_8、DIPSW_8,前者带公共端(Common Pin),共9位引脚(8+1),后者不带公共端引脚,共16位引脚(8+8)。带公共端的拨码开关市面很少见,常用的8位DIP拨码开关均为16脚,其实物如图3-10右下角所示,结构与仿真组件DIPSW_8相同,接入电路时ON端的8只引脚分别独立连接端口,OFF端的8位引脚则全部并联接地。
(二)编码读取与显示程序设计
源程序通过TRISD=0xFF将PD端口引脚全部设为输入,因为仿真电路中已外接上拉电阻,故略去开启内部弱上拉的语句。源代码读取PD端口拨码开关输入编码的语句非常简单:
Num变量获取编码后,主程序将其分解为3个数位并送数码管刷新显示,其中发送共阴数码管位扫描码的语句为:
for循环使i的取值依次为0、1、2,~(1<<(i+1))的运算结果依次为:11111101、11111011、11110111,这3个扫描码分别与集成式数码管中位引脚编号为2、3、4的管位对应(右3位),所读取的编码值将刷新显示于这三位数码管上。
由于读取与刷新显示代码放在while(1)循环中,故而任何时候调整拨码开关,新的编码均会被立即读取并刷新显示在数码管上。
① 重新修改程序,使三个数位从数码管左边开始显示,注意屏蔽高位无效的0。
② 预设16种花样数组,通过4位的拨码开关(DIPSWC_4或DIPSW_4)选择不同花样发送LED循环滚动显示。