单页网站域名,网站建设 网站制作 网站设计,精准客源引流平台,广东网站设计专业团队1.分析原理图
最好自己先去查查138以及ULN2003的使用方法#xff0c;我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 #xff0c;于是573(U9)处于输出跟随输入P0状态#xff0c;此时若P061#xff0c;则573输出Q71我这里直接讲思路。 由上图我们可以看到如果138输入ABC101,则输出Y50,此时若WR通过跳线帽接地则Y5C1 于是573(U9)处于输出跟随输入P0状态此时若P061则573输出Q71ULN2003输入IN71,但是由于ULN2003输入后芯片内部先经过非门在输入到达林顿管所以输出OUT70,蜂鸣器响。然后我们再改变138输入ABC的值使Y51,则573进入锁存状态此时无论P0口为任何值蜂鸣器都会一直响。
在这里我遇到一个很奇怪的问题如果在573(U9)锁存的时候ABC000,573(U6)不知道为啥会解锁。但是我用ABC110去锁存就不会出现这个情况。理论上用只要用ABC 000~110去锁存都可以啊,为什么用000去锁存就会短暂出现一些不定态时U6解锁呢后面试试换一颗138试试吧
2.封装代码
//1打开 0关闭
void Set_Beep(bit Status)
{//选中蜂鸣器所在573P251;P260;P271; //74HC138--Y50,else1--Y5C1,else0P06Status; //ULN2003输入经过非门送入达林顿管低电平有效P251;P261;P270;//锁存数据
}void Set_Relay(bit Status)
{//选中蜂鸣器所在573P251;P260;P271; //74HC138--Y50,else1--Y5C1,else0P04Status; //ULN2003输入经过非门送入达林顿管低电平有效P251;P261;P270;//锁存数据
}这里我也发现一个小问题如果上次的P0口状态已经改变了,假如现在运行Set_Beep()那在解锁后输出会立即跟随输入那继电器的状态就会改变所以我觉得这里需要用全局变量来暂存旧的状态这是修改过后的代码
#include BeepRelay.h
bit Beep_Status0; //初始关闭
bit Relay_Status0; //初始关闭//1打开 0关闭
void Set_Beep(bit Status)
{//选中蜂鸣器所在573P251;P260;P271; //74HC138--Y50,else1--Y5C1,else0P04Relay_Status; //使继电器保持原状态P06Status; //ULN2003输入经过非门送入达林顿管低电平有效Beep_StatusStatus; //记录蜂鸣器状态P251;P261;P270;//锁存数据
}void Set_Relay(bit Status)
{//选中蜂鸣器所在573P251;P260;P271; //74HC138--Y50,else1--Y5C1,else0P06Beep_Status;P04Status; //ULN2003输入经过非门送入达林顿管低电平有效Relay_StatusStatus;P251;P261;P270;//锁存数据
}