stc89c52 接一个红外传感器(E18-D80NK),怎么把信号输到单片机?

2024-12-17 20:23:28
推荐回答(3个)
回答1:

这样搞出来的东西无论p0^1上是什么信号在p3^0,p3^1上都没反应,颇为不解。
在硬件接线上找原因,首先保证传感器电源负极和单片机系统的电源负极要短接,然后P0.1作为输入的话,P0口引线要接上拉电阻(每个引脚接电阻一端,另一端接电源正),1K-10K就够了,时间久了,记不大请了,你查查。
可以这么定义输入引脚吗?有哪些引脚是可以定义用来输入输出的?
没有问题,可以这么定义,单片机输入输出是双向的。
另外后面还要加一个灰度传感器,输出是模拟信号,在0.6V~1.6V,暂时不会自己做模数转换,怎么能把这个信号输进单片机?
C52没有模拟量输入接口,要加模拟量转换芯片,最好是串行通信的模块如I2C总线的,模块很多,不过编程比较复杂,初学者最好在找芯片的同时找一段成熟的读写子程序,网上示例很多。

回答2:

你如何确定p0^1输入的是高电平或低电平,先直接将该引脚分别接VCC及GND试验一下,
用逻辑笔测一下红外传感器输出信号是否符合要求
不知道用你怎么判断p3^0 p3^1没反应,逻辑笔测一下p3^0 p3^1

后面还要加一个灰度传感器,输出是模拟信号,在0.6V~1.6V,暂时不会自己做模数转换,怎么能把这个信号输进单片机?
STC12系列单片机,带输入A/D转换,PWM的型号,引脚基本指令与51兼容
A/D转换有专门的子程序,不是你那样的做法,你最好找官方网站下载一个手册,加我企鹅聊后面数字连起来,试1277一09下3636这个:

作者:龙啸苍天
发表时间:2007-1-16 23:47:07

#define AD_P10 0xe0; //选择P1.0口为AD转换
#define AD_P11 0xe1; //模式为SPEED0=1,SPEED1=1
#define AD_P12 0xe2; //即最高转换速度,晶振20M,转换速度为100K
#define AD_P13 0xe3;
#define AD_P14 0xe4;
#define AD_P15 0xe5;
#define AD_P16 0xe6;
#define AD_P17 0xe7;

/*-----------------以下为初始化-------------------*/

ADC_CONTR|=0x80; //开A/D转换电源
P1M0|=0x80; //设置P1.7为开漏模式
P1M1|=0x80;
ADC_CONTR=AD_P17; //选择P1.7作为A/D转换通道,如转换通道要加延时20US~200US

/*---------------以下为函数调用-----------------*/

void ad_send()
{
uchar tmp=0;
ADC_DATA=0; //清零数据
ADC_CONTR|=0x08; //启动AD转换
while(!tmp) //判断AD转换是否完成 0x10
{
tmp=0x10;
tmp&=ADC_CONTR;
}
ADC_CONTR&=0xe7;
ad_data=ADC_DATA; //执行程序,AD高位
tmp=ADC_LOW2; //AD低位,只用最后两位
ad_data<<=1; //以下为连接成十位数据
if(tmp&0x02)
ad_data|=0x01;
ad_data<<=1;
if(tmp&0x01)
ad_data|=0x01;
}
以上程序通过调试和具体实验!

回答3:

不知道你这个红外式个模块还是个元件,如果是个模块的话好说了,如果是元件的话输出可能电压达不到要求可以加放大再加个比较器可以输出高低电平了,另外P0口是不建议用做输入输出口的,如果加上上拉电阻也是可以的电阻加个10k的就ok了,程序是没有问题驱动电机的话可以用三极管来驱动单片机的电流太小了。希望你能成功。