关于nrf51822 程序里头文件有错误怎么解决,编译是有一个ERROR的

关于nrf51822 程序里头文件有错误怎么解决,编译是有一个ERROR的,第1张

你是否有试过编译一个文件时,老是因为缺掉一些头或库文件而编译不通过呢?下面给出一种方法来解决这个问题:1.先安装apt-filesudoapt-getinstallapt-filesudoapt-fileupdate2.假如make时,出现main.c:21:21:error:gtk/gtk.h:Nosuchfileordirectory使用:sudoapt-filesearchgtk.h运行以上命令可能返回好多包,精简一下sudoapt-filesearchgtk/gtk.h结果如下:#apt-filesearchgtk/gtk.hlibgfcui-dev:usr/include/gfc-2.0/gfc/gtk/gtk.hhlibgtk+2.0-directfb-dev:usr/include/directfb/gtk-2.0/gtk/gtk.h3.最后定位该头文件所在的位置wyylling@ubuntu:~/Gnome$locategtk.h将该/usr/include/gtk-2.0/加入头文件搜索路径中即可

我有一完整的程序,由于担心单片机实验板上的5V电压会损坏24L01,加上需两块单片机协调工作,因此也没敢试,如果你有条件,帮我试一下,我不要积分,只告诉我实验结果就行

#include "reg52.h"

#include "intrins.h" //_nop_()延时函数用

#define uchar unsigned char

#define uint unsigned int

sbit DATA=P1^1 //发送方管脚配置

sbit CLK1=P1^2

sbit CS=P1^3

sbit CE=P1^4

sbit DR1=P1^5

sbit PWR_UP=P1^6

sbit led1=P1^0

sbit diol=P2^5

/*sbit DATA=P2^1 //接收方管脚配置

sbit CLK1=P2^2

sbit CS=P2^3

sbit CE=P2^4

sbit DR1=P2^5

sbit PWR_UP=P1^6

sbit led1=P3^7

sbit diol=P2^0//没用*/

sbit BIT0=ACC^0

sbit BIT7=ACC^7//

uchar TXData[14]

uchar RXData[10]

uchar Data1=0xff

uchar code table1[]={0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}

uchar code table2[]={0x99,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}

delay1ms(int t)

{

uint i

uint j

for(i=0i<ti++)

for(j=0j<116j++)

}

void delay10us(void)

{

uchar y

for(y=0y<10y++)

_nop_()

}

void delay100us(void)

{

uchar y

for(y=0y<100y++)

_nop_()

}

/****************************************************************************************************

/*函数:write( uchar byte)

/*功能:通过IO口写入一个字节到NRF24L01

/****************************************************************************************************/

void write(uchar byte)

{

uchar i

ACC=byte

i=8

while(i)

{

DATA=BIT7

CLK1=1// output 'uchar', MSB to MOSI

_nop_()

_nop_() // shift next bit into MSB..

ACC<<=1

CLK1=0 // Set SCK high..

i-- // ..then set SCK low again

}

}

/****************************************************************************************************

/*函数:Read(uchar reg)

/*功能:NRF24L01的读时序

/****************************************************************************************************/

uchar Read(void)

{

uchar i

i=8

while(i)

{

CLK1=1// output 'uchar', MSB to MOSI

_nop_()

_nop_() // shift next bit into MSB..

ACC<<=1

BIT0=DATA

CLK1=0 // Set SCK high..

i-- // ..then set SCK low again

}

return ACC // return register value

}

/****************************************************************************************************/

/*功能:NRF24L01初始化控制结构体

/****************************************************************************************************/

struct RFConfig

{

uchar n

uchar buf[15]

}

typedef struct RFConfig RFConfig

#define ADDR_INDEX 8 //地址起始号为 8

#define ADDR_COUNT 4 //地址占4字节

code RFConfig tconf= //发射时配置字

{

15,//配置字长度15

0x50,//接收通道2数据长度80bit(10byte)

0x50,//接收通道1数据长度80bit(10byte)

0x00,0x00,0x00,0x00,0x00,//接收通道2地址最多40bit(5byte)

0x00,0xaa,0xbb,0x12,0x34,//接收通道1地址最多40bit(5byte)

0x83,//32bit地址长度,16bit crc校验

0x6f,//单通道接收

0x04//02频道发射

}

code RFConfig rconf=//接收时配置字

{

15,

0x50,

0x50,

0x00,0x00,0x00,0x00,0x00,

0x00,0xaa,0xbb,0x12,0x34,

0x83,

0x6f,

0x05//2频道接收

}

void nrf2401_on()

{

CE=0

CS=0

PWR_UP=1

delay1ms(3)

}

void nrf2401init_receiver(void)//接收初始化

{

uchar b

CE=0

CS=1

delay10us()

for(b=0b<rconf.nb++)//rconf.n=15

{

write(rconf.buf[b])

}

CE=1

CS=0

}

void nrf2401init_transmitter(void)//发射初始化

{

uchar b

CE=0

CS=1

delay10us()

for(b=0b<rconf.nb++)//rconf.n和tconf.n相等

{

write(tconf.buf[b])

}

CS=0

}

void nrf2401set_rxmode(void)//接收初始化后快速进入接收状态

{

CE=0

CS=1

delay10us()

write(rconf.buf[14])//写入命令0x05

CE=1

CS=0

}

void nrf2401set_txmode(void)//发射初始化后快速进入发射状态

{

CE=0

CS=1

delay10us()

write(tconf.buf[14])//写入命令0x04

CE=1

CS=0

}

void tx_packet(uchar m)//m=1发射数据包选table1,m=2选table2

{

uchar i

TXData[0]=0xaa//要不要补1个地址码0x00?不用,前面已设32bit地址长度,

TXData[1]=0xbb

TXData[2]=0x12

TXData[3]=0x34

if (m==1)

{

for(i=4i<14i++)

{TXData[i]=table1[i-4]}

}

else

{

for(i=4i<14i++)

{TXData[i]=table2[i-4]}

}

CS=0CE=1

delay10us()

for(i=0i<14i++)

{

write(TXData[i])

}

CE=0

}

/*void tx_packet(void)//发射数据包

{

uchar i

TXData[0]=0xaa//要不要补1个地址码0x00?不用,前面已设32bit地址长度,

TXData[1]=0xbb

TXData[2]=0x12

TXData[3]=0x34

for(i=4i<14i++)

{TXData[i]=table2[i-4]}

CS=0CE=1

delay10us()

for(i=0i<14i++)

{

write(TXData[i])

}

CE=0

}*/

void recevice_packet(void)//接收数据包

{

uchar i

for(i=0i<10i++)

{

RXData[i]=Read()

}

}

//发射方先发一个数据包,其中第5个数据(TXData[4])为0x88,然后进入接收状态,若收到的数据包第5个数是0x99,则点亮发光二极管

//接收方先进入接收状态,若收到的数据包第5个数是0x88,则点亮LED并发送一个数据包,其中第5个是0x99

void main(void)//发射方主程序

{

nrf2401_on()

nrf2401init_transmitter()

nrf2401set_txmode//进入发射状态

tx_packet(1)//发射数据包1第4个数据为0x88

nrf2401init_receiver()

nrf2401set_rxmode()//进入接收状态

while(DR1!=1)

recevice_packet()//接收数据包

diol=1//开通锁存器

if(RXData[4]==0x99)//如果收到正确遥数据0x99,则灯亮说明通信成功

{

led1=0

}

while(1)

}

/*void main(void)//接收方主程序

{

nrf2401_on()

nrf2401init_receiver()

nrf2401set_rxmode()//进入接收状态

while(DR1!=1)

recevice_packet()//接收数据包

diol=1//开通锁存器

if(RXData[4]==0x88)//如果收到正确遥数据0x88,则灯亮说明通信成功

{

led1=0

}

nrf2401init_transmitter()

nrf2401set_txmode//进入发射状态

delay1ms(10)//延时,让发送方准备好

tx_packet(2)//发射数据包2,第4个数据为0x99

while(1)

}*/


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

原文地址:https://54852.com/yw/11845747.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存