购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.9 普通开关与拨码开关应用

拨码开关常用于编码设置或状态设置,例如,多媒体教室常用的硬件广播卡就是用拨码开关来设置编码的。图3-9所示电路中演示了普通开关及拨码开关应用,控制数码管显示时使用了8总线三态驱动器74LS245。在开显示时拨码开关当前编码值实时刷新显示在数码管上,案例中同时还演示了单刀双掷开关控制报警器声音输出的效果。

1.程序设计与调试

电路中74LS245的CE引脚可以直接接GND,恒为使能。图3-9中将其连接在P2.0引脚,用于控制74LS245的输出开关。主程序初始时将CE设为0使能输出。在关显示时将CE设为1即可关闭段码输出,实现显示关闭。为了关闭显示,还可以通过关闭段码或位码的方法实现。

图3-9 普通开关与拨码开关应用电路

由于拨码开关连接在P1端口,主程序直接读取P1端口值即可获得拨码开关编码值,将其分解为3个数位后发送数码管显示。数码管动态扫描显示中的位码输出语句为

P2 = (~(0x20 << i)) & 0xF0;

观察电路图可知,4位数码管从左到右扫描时的位码为0x01、0x02、0x04、0x08,由于为共阴数码管,故位码应改为~0x01、~0x02、~0x04、~0x08,P2端口循环输出这4个位码即可实现扫描显示,但由于第一只数码管是不显示的,故有:

P2 = ~(0x20 << i);

运行测试时应该出现正确结果,实际上仍然出现异常,这是因为该语句使P2.0引脚的输出恒为1,为了开显示,CE原本被置为0,即P2.0为0,上述语句却使其又被置为1输出。为解决这一问题,输出语句将位码同0xF0相与。

对于报警声音输出的程序设计,其关键在于Alarm函数,其中BUZZER=~BUZZER语句向P3.3引脚持续输出1010101010…序列,形成的脉冲使扬声器输出声音,如果BUZZER= ~BUZZER语句的执行间隔相等,系统会发出单调的声音,不会模拟出报警效果。在Alarm函数内的双重for循环中,内层for循环由参数t控制,不同的t值使BUZZER输出具有可变的延时间隔,从而形成可变频率,模拟出报警声音的效果。当SW2合上时,Alarm(90)与Alarm(120)输出了两种不同频率的声音,模拟出很逼真的报警器效果。

2.实训要求

① 修改程序,使拨码开关编码显示在数码管左三位上。

② 去掉74LS245驱动器,仍实现数码管的显示开关功能。

③ 修改报警函数参数值90与120,所听到的声音效果有何变化?使用虚拟示波器能够观察到什么样的输出波形? 6uDq8E8b5T1tZP3AHhu/2QqpEaAE0/ji6qgjzG2Cmoh0KZGnLUEDK7dz7L/Z62Dn

3.源程序代码
点击中间区域
呼出菜单
上一章
目录
下一章
×