传感器检测到目标物,输出高电平,基于单片机用C语言怎么写程

传感器检测到目标物,输出高电平,基于单片机用C语言怎么写程,第1张

抄来的:
/
程序名称:jiancec
程序功能:传感器检测到目标物,输出高电平
程序作者:
创建时间:
修改时间:
程序版本:V01
/
/
包含头文件
/
#include "inc/hc595h"
#include "reg51h"
/
定义引脚
/
/ 时钟信号线引脚定义 /
sbit HC595CLK = P0^5;
/ 片选信号线引脚定义 /
sbit HC595RCK = P0^6;
/ 数据输入引脚定义 /
sbit HC595DATA = P0^7;
/
函数名称:SendData
函数功能:74HC595数据的发送
入口参数:unsigned int uiDataOne, unsigned int uiDataTwo
出口参数:void
/
void SendData(unsigned int uiDataOne, unsigned int uiDataTwo)
{
unsigned int i = 0;
/ 将片选信号置为低电平 /
HC595RCK = 0;
/ 输入第一个数据:uiDataOne /
for (i = 0; i < 8; i++)
{
/ 给出脉冲信号,首先将CLK置为0 /
HC595CLK = 0;
if (0 != (uiDataOne & 0x80))
{
HC595DATA = 1;
}
else
{
HC595DATA = 0;
}
/ 给出脉冲信号,首先将CLK置为1 /
HC595CLK = 1;
/ 准备第二个数据 /
uiDataOne = uiDataOne << 1;
}
/ 输入第二个数据:uiDataTwo /
for (i = 0; i < 8; i++)
{
/ 给出脉冲信号,首先将CLK置为0 /
HC595CLK = 0;
if (0 != (uiDataTwo & 0x80))
{
HC595DATA = 1;
}
else
{
HC595DATA = 0;
}
/ 给出脉冲信号,首先将CLK置为1 /
HC595CLK = 1;
/ 准备第二个数据 /
uiDataTwo = uiDataTwo << 1;
}
/ 将片选信号置为高电平 /
HC595RCK = 1;
}

首先确认在P21已经有上拉为高的情况下,接在339输出口,是不是为低,然后让339为高后,P21口是否为高,用表测下,再写程序。
P2=0,是不能这样写的,做为输入口,之前都得送1。除非可用没有内部上接的P0口,做这些,硬件状态很重要,先确认339一定有输出哦。

实时输出高低电平实际很简单,
你现在的问题就是检测模块输出极时被拉低的问题。
有两个办法,
1 模块输出高电平时,其内部仅仅是虚电压,可以认为是只能提供电压,不能提供电流,而在其输出低电平时,内部可以接受比较大的灌电流(即负电平时可以吸收比较大的MA级电流),那么,就可以在CPU口与模块联接的地方上拉一电阻,
能够解决这种办法
2 模块不管输出高电压或低电压,都是虚电压,不能负担较大的拉电流和灌电流,
这种情况下,最好采用三极管,因为三极管可以理解为是电压驱动型的,当模块输出高电压时,让这个电压驱动三极管,三极管集电极接电源,发射极接CPU口的同时,再接一电阻接地,这样,就可以通过检测三极管的状态来确定模块的输出状态了
希望对你会有用

是单片机的引脚置1吧,要检测外部输入信号,确实引脚要置1状态。
要检测外部信号的高电平,那要求外部信号要是高低电平变化的信号,如果一直就是高电平状态,那就没有意义了。
所以,引脚的输入状态是变化的,就好判断了。
判断高电平,用C语言写程序,先定义引脚
假如引脚为P10,先定义
sbit test=P1^0;
在程序中写:
if(test==1)
{
//变成高电平后,要做什么,就在下面写程序了

while(test==1); //等待高电平结束
}
其实,最好的 方法是 输入信号经非门后加到P32引脚上,这样高电平反相后变成低电平,输入到P32,作为中断信号引起中断,程序就更好处理了。

#include "REG52H"
// 信号输入脚
sbit Extio_INT = P1^0;
// 引脚定义
sbit MAX_EXtp1 = P2^0;
sbit MAX_EXtp2 = P2^1;
/
延时1ms
/
void Delay_1ms(unsigned int Cnt)
{
unsigned int x, y;
for(x = Cnt; x > 0; x--)
for(y = 120; y > 0; y--);
}
/
函数主体
/
int main(void)
{
// 初始化IO
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
while(1)
{
// 检测P10引脚如果为高电平
if(Extio_INT == 1)
{
// P20/ P21输出低电平
MAX_EXtp1 = 0;
MAX_EXtp2 = 0;
}
// 检测P10引脚如果为低电平
else
{
MAX_EXtp1 = 1;
// 延时1秒
Delay_1ms(1000);
MAX_EXtp2 = 1;
}
}
}

sbit  GO_OUT =P3^5;                       //需要检测的引脚

sbit  LED         =P3^4;                       //显示led    引脚为低时候亮

void main()                     //主程序

{

while(1)                    //主循环

{

if(GO_OUT==0)

{

LED=1;                            //引脚为低 led不亮

}

else      LED=0;          // 否则led点亮

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13217436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-22
下一篇 2023-06-22

发表评论

登录后才能评论

评论列表(0条)

保存