你好,请问怎么把超声模块和单片机连接起来发射脉冲啊?

 我来答
天王星云
2012-10-13 · TA获得超过116个赞
知道答主
回答量:292
采纳率:0%
帮助的人:65.8万
展开全部
超声模块一般采用UART接口,上面有RXD和TXD两根引脚,还有一个TRIG启发引脚。将RXD和TXD分别和单片机的串口相连,TRIG和一个普通I/O相连即可。驱动程序可以到网上下载。
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机的原理是比较复杂的,但是可以通过浅显易懂的语言来解释。单片机是一种集成电路芯片,通常包含处理器、存储器和各种输入输出(I/O)端口。处理器负责执行程序代码,并处理数据和指令;存储器用于存储程序代码和数据;输入输出端口用于与外部设备交互... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
匿名用户
2012-10-13
展开全部
单片机 PTR8000无线发送接收程序 NRF905模块(实验通过 )//分发送和接收两部分,主程序只是为当时调试而写的,根据自己的需要修改。
//IO口的定义就不再详说了,根据程序能看出来或根据自己的需要重新定义。
1发送部分。
#include <AT89X52.h>
#include <ABSACC.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
//配置口定义//
sbit TXEN = P2^0;
sbit TRX_CE = P2^4;
sbit PWR = P1^4;
//SPI口定义//
sbit MISO = P2^2;
sbit MOSI = P1^1;
sbit SCK = P2^1;
sbit CSN = P1^0;
//sbit P2_0 = P2^0;
//状态输出口//
sbit AM =P2^3;
sbit DR = P1^2;
sbit LCD = P1^3;
uchar da=0;
/*/RF寄存器配置//
unsigned char idata RFConf[11]=
{
0x00, //配置命令//
0x6C, //CH_NO,配置频段在433.2MHZ
0x0E, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x03,0x03, //接收发送有效数据长度为3字节
0xE7,0xE7,0xE7,0xE7, //接收地址
0xC0, //CRC充许,16位CRC校验16M晶振
}; */
uchar TxRxBuffer[5];
///////////延时/////////////////
void Delay(uint x)
{
uint i;
for(i=0;i<x;i++){
_nop_();
}
}
////////////用SPI口写数据至NRF905内//////////
void SpiWrite(unsigned char b)
{
unsigned char i=8;
while (i--)
{
Delay(10);
SCK=0;
MOSI=(bit)(b&0x80);
b<<=1 ;
Delay(10);
SCK=1;
Delay(10);
SCK=0;
}
SCK=0;
}
/*//////////////from 905 read data////////////////
unsigned char SpiRead(void)
{
register unsigned char i=8;
unsigned char ddata=0;
while (i--)
{
ddata<<=1 ;
SCK=0;
Delay(20);
ddata|=MISO;
SCK=1 ;
Delay(20);
}
SCK=0;
return ddata;
}*/
/*//////////////接收数据包/////////////////
void RxPacket(void)
{
uchar i;
i=0;
while(DR)
{
TxRxBuffer[i] = SpiRead();
i++;
}
}*/
/*
;写发射数据命令:20H
;读发射数据命令:21H
;写发射地址命令:22H
;读发射地址命令:23H
;读接收数据命令:24H
*/
void TxPacket(uchar da)
{ PWR=1;
TXEN=1;
CSN=0;
SpiWrite(0x22); //写发送地址,后面跟4字节地址//
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
CSN=1;
Delay(2);
CSN=0;
SpiWrite(0x20); //写发送数据命令,后面跟三字节数据//
SpiWrite(da);
//SpiWrite(++da);
//SpiWrite(++da);
//SpiWrite(0x44);
//SpiWrite(0x45);
CSN=1;
Delay(2);
TRX_CE=1; //使能发射模式//
Delay(100); //等带发送完成//

while(!DR);
TRX_CE=0;
}
/*///////////////等待接收数据包///////////////////
uchar temp;
void Wait_Rec_Packet(void)
{
TXEN=0;
TRX_CE=1;
PWR=1;
Delay(1000);
while(1)
{ //if (LCD==1) P0=~P0;
if(DR)
{ //P0=~P0;
TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作
CSN=0;
SpiWrite(0x24);
RxPacket();
CSN=1;
temp=TxRxBuffer[0]+TxRxBuffer[1]+TxRxBuffer[2];
if(temp==0x06){
lcdbit=!lcdbit;
LCD=lcdbit;
P0=~P0;
//如果接收的数据正确
}
break;
}
}
} */
////////////初始化配置寄存器////////////////
void Ini_System(void)
{
//uchar i;

CSN=1;
SCK=0;
PWR=1;
TRX_CE=0;
TXEN=0;
Delay(2);
CSN=0;
SpiWrite( 0x00); //配置命令//
SpiWrite( 0x6C); //CH_NO,配置频段在433.2MHZ
SpiWrite( 0x0C); //输出功率为10db,不重发,节电为正常模式
SpiWrite( 0x44); //地址宽度设置,为4字节
SpiWrite( 0x01);SpiWrite( 0x01); //接收发送有效数据长度为1字节
SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7); //接收地址
SpiWrite( 0xDE);

/*for(i=0;i<11;i++){
SpiWrite(RFConf[i]);
}*/
CSN=1;
PWR=1;
TRX_CE=0;
TXEN=0;
Delay(1000);
}

void main(void)
{

Ini_System();
PWR=0;
//P0=0;
DR=1;
//TxPacket();
while(1)
{
//Wait_Rec_Packet(); //等待接收完成
// for(i=0;i<2;i++)
// Delay(65530);
TxPacket(da);
Delay(5000);
Delay(5000);
Delay(5000);
Delay(5000);
Delay(5000);
da++;

//P0=~P0;
}
}

#include <AT89X52.h>
#include <ABSACC.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
uchar num[3];
//配置口定义//
sbit TXEN =P1^5;
sbit TRX_CE =P3^5;
sbit PWR =P1^4;
//SPI口定义//
sbit MISO =P1^7;
sbit MOSI =P1^1;
sbit SCK =P1^6;
sbit CSN =P1^0;
//sbit P2_0 = P2^0;
//状态输出口//
sbit AM =P3^3;
sbit DR =P1^2;
sbit LCD =P1^3;
/*/RF寄存器配置//
unsigned char idata RFConf[11]=
{
0x00, //配置命令//
0x6C, //CH_NO,配置频段在433.2MHZ
0x0C, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x03,0x03, //接收发送有效数据长度为3字节
0xE7,0xE7,0xE7,0xE7, //接收地址
0xC0, //CRC充许,16位CRC校验16M晶振
};*/

uchar TxRxBuffer[5];
///////////延时/////////////////
void Delay(uint x)
{
uint i;
for(i=0;i<x;i++){
_nop_();
}
}
////////////用SPI口写数据至NRF905内//////////
void SpiWrite(unsigned char b)
{
unsigned char i=8;
SCK=0;
while (i--)
{
Delay(10);
MOSI=(bit)(b&0x80);
b<<=1 ;
Delay(10);
SCK=1;
Delay(10);
SCK=0;
}
SCK=0;
}
///////////////from 905 read data////////////////
unsigned char SpiRead(void)
{
register unsigned char i=8;
unsigned char ddata=0;
SCK=0;
while (i--)
{
ddata<<=1 ;
ddata|=MISO;
SCK=1 ;
Delay(10);
SCK=0 ;
Delay(10);
}
SCK=0;
return ddata;
}
///////////////接收数据包/////////////////
void RxPacket(void)
{
uchar i;
i=0;
while(DR)
{
TxRxBuffer[0] = SpiRead();
//i++;
}
}
/*
;写发射数据命令:20H
;读发射数据命令:21H
;写发射地址命令:22H
;读发射地址命令:23H
;读接收数据命令:24H
*/
/*void TxPacket(void)
{ PWR=1;
TXEN=1;
CSN=0;
SpiWrite(0x22); //写发送地址,后面跟4字节地址//
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
CSN=1;
Delay(2);
CSN=0;
SpiWrite(0x20); //写发送数据命令,后面跟三字节数据//
SpiWrite(0x01);
SpiWrite(0x02);
SpiWrite(0x03);
CSN=1;
Delay(2);
TRX_CE=1; //使能发射模式//
Delay(100); //等带发送完成//
TRX_CE=0;
while(!DR);
} */
////////////////等待接收数据包///////////////////
uchar temp;
void Wait_Rec_Packet(void)
{
TXEN=0;
TRX_CE=1;
PWR=1;
Delay(1000);
while(1)
{// if (LCD==1)
if(DR)
{
TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作
CSN=0;
SpiWrite(0x24);
RxPacket();
CSN=1;

break;
}
}
}
////////////初始化配置寄存器////////////////
void Ini_System(void)
{
// uchar i;

CSN=1;
SCK=0;
PWR=1;
TRX_CE=0;
TXEN=0;
Delay(2);
CSN=0;
SpiWrite( 0x00); //配置命令//
SpiWrite( 0x6C); //CH_NO,配置频段在433.2MHZ
SpiWrite( 0x0C); //输出功率为10db,不重发,节电为正常模式
SpiWrite( 0x44); //地址宽度设置,为4字节
SpiWrite( 0x01);SpiWrite( 0x01); //接收发送有效数据长度为3字节
SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7);SpiWrite( 0xE7); //接收地址
SpiWrite( 0xDE);

/*for(i=0;i<11;i++){
SpiWrite(RFConf[i]);
}*/
CSN=1;
PWR=1;
TRX_CE=1;
TXEN=0;
Delay(1000);
}

/************显示程序*************/
void disp(void)
{uchar code LEDValue[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; //0-9
uchar k;
for(k=0;k<=2;k++)
{
num[0]=TxRxBuffer[0]%10;
num[1]=TxRxBuffer[0]/10%10;
num[2]=TxRxBuffer[0]/100;
SBUF=LEDValue[num[k]];
while(TI==0);
TI=0;
}
}

void main(void)
{
// uchar i;

Ini_System();
PWR=0;
//P0=0;
DR=1;
//TxPacket();
while(1)
{
Wait_Rec_Packet(); //等待接收完成
disp();
Delay(5000);
Delay(5000);
//DR=1;
// for(i=0;i<2;i++)
// Delay(65530);
//TxPacket();
//Delay(50000);
//P0=~P0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式