18.5 推挽输出和开漏输出区别

推挽输出能输出高低电平,无需外部上拉即可工作,适合连接数字器件。开漏输出需外部上拉电阻才能输出高电平,常用于电流驱动,能读取IO输入电平变化,可用于双向IO。开漏电路基于场效应管,是电压控制型,输入阻抗大,不会损伤控制电路。

【20180610】

推挽输出:可以输出高,低电平,连接数字器件。

输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。

输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。

开漏输出:输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).

输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。

输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);可以读IO输入电平变化,此模式可以把端口作为双向IO使用。

推挽电路:

上面的三极管是N型三极管,下面的三极管是P型三极管,请留意控制端、输入端和输出端。

当Vin电压为V+时,上面的N型三极管控制端有电流输入,Q3导通,于是电流从上往下通过,提供电流给负载。

在 C 语言中,我们可以使用数组循环来实现删除大于19.5小于18.5的数据。具体实现代码如下: ```c #include <stdio.h> int main() { float data[] = {19.2, 18.9, 19.4, 19.3, 19.1, 19.0, -20, 10.5}; int n = sizeof(data) / sizeof(float); // 数组大小 int i, j; for (i = 0, j = 0; i < n; i++) { if (data[i] >= 18.5 && data[i] <= 19.5) { data[j] = data[i]; // 将有效数据移到数组前面 j++; } } n = j; // 更新数组大小 float min_value = data[0]; for (i = 1; i < n; i++) { if (data[i] < min_value) { min_value = data[i]; // 查找最小值 } } printf("处理后的数据: "); for (i = 0; i < n; i++) { printf("%.2f ", data[i]); // 输出有效数据 } printf("\n最小值为: %.2f\n", min_value); return 0; } ``` 首先定义一个 `float` 类型的数组 `data`,存放原始数据。然后通过循环遍历数组,将大于19.5小于18.5的数据删除。具体做法是定义两个变量 `i` `j`,其中 `i` 用于遍历原始数组,`j` 用于记录有效数据的位置。当遍历到一个有效数据时,将其复制到数组的前面,并将 `j` 加 1。最后,根据 `j` 的值更新数组大小,得到有效数据的个数。 接着,我们遍历有效数据,查找最小值。具体做法是定义一个变量 `min_value`,将其初始化为数组第一个元素,然后遍历数组,如果当前元素小于 `min_value`,则更新 `min_value` 的值。 最后,我们输出有效数据最小值。注意,在输出时需要使用循环遍历有效数据,使用 `printf` 函数格式化输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值