nRF24LE1.zip

  • zhenghaiou
    了解作者
  • C/C++
    开发工具
  • 9KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 0
    下载次数
  • 2020-05-02 22:17
    上传日期
nRF24LE1芯片的接口函数库,包括IIC、串口、无线等。
nRF24LE1.zip
  • nRF24LE1
  • zho_rf.h
    743B
  • stdint.h
    1.5KB
  • zho_uart.h
    1.3KB
  • zho_delay.c
    770B
  • zho_uart.c
    2.7KB
  • zho_i2c.c
    6.7KB
  • zho_i2c.h
    754B
  • stdbool.h
    1.2KB
  • zho_time.c
    1.6KB
  • zho_time.h
    646B
  • reg24le1.h
    7.7KB
  • zho_rf.c
    4.7KB
  • zho_delay.h
    551B
  • zho_io.h
    2.5KB
内容介绍
//------------------------------------------------------------------------------------- #include "reg24le1.h" #include "stdint.h" #include "stdbool.h" #include "zho_i2c.h" #include "zho_delay.h" #include "zho_io.h" #include <intrins.h> //------------------------------------------------------------------------------------- //定义I2C地址 //------------------------------------------------------------------------------------- #define SlaveAddress (0x30 << 1) //------------------------------------------------------------------------------------- //定义IO口 //------------------------------------------------------------------------------------- #define SCL P16 #define SDA P15 #define SCL_OUTPUT() zho_output_P16() #define SDA_OUTPUT() zho_output_P15() #define SDA_INPUT() zho_input_P15() //------------------------------------------------------------------------------------- //连续读出时的数据缓冲区 //------------------------------------------------------------------------------------- uint8_t zho_i2c_buf[6]; //------------------------------------------------------------------------------------- //延时 //------------------------------------------------------------------------------------- void zho_i2c_wait() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } //------------------------------------------------------------------------------------- //I2C Start //------------------------------------------------------------------------------------- void zho_i2c_start() { SCL_OUTPUT(); //SCL的IO设置为输出 SDA_OUTPUT(); //SDA的IO设置为输出 zho_i2c_wait(); //延时,避免和上一次的stop间隔太近 SDA = 1; //拉高数据线 SCL = 1; //拉高时钟线 zho_i2c_wait(); //延时 SDA = 0; //产生下降沿 zho_i2c_wait(); //延时 SCL = 0; //拉低时钟线 } //------------------------------------------------------------------------------------- //I2C Stop //------------------------------------------------------------------------------------- void zho_i2c_stop() { SDA_OUTPUT(); //SDA的IO设置为输出 SDA = 0; //拉低数据线 SCL = 1; //拉高时钟线 zho_i2c_wait(); //延时 SDA = 1; //产生上升沿 zho_i2c_wait(); //延时 } //------------------------------------------------------------------------------------- //I2C ACK //------------------------------------------------------------------------------------- void zho_i2c_send_ack(bit ack) { SDA_OUTPUT(); //SDA的IO设置为输出 SDA = ack; //写应答信号 SCL = 1; //拉高时钟线 zho_i2c_wait(); //延时 SCL = 0; //拉低时钟线 zho_i2c_wait(); //延时 } //------------------------------------------------------------------------------------- //I2C RecvACK //------------------------------------------------------------------------------------- uint8_t zho_i2c_recv_ack(void) { SDA_INPUT(); //SDA的IO设置为输入 SCL = 1; //拉高时钟线 zho_i2c_wait(); //延时 CY = SDA; //读应答信号 SCL = 0; //拉低时钟线 zho_i2c_wait(); //延时 return CY; //返回 } //------------------------------------------------------------------------------------- //I2C Send Byte //------------------------------------------------------------------------------------- void zho_i2c_send_byte(uint8_t dat) { uint8_t i; SDA_OUTPUT(); //SDA的IO设置为输出 for(i = 0; i < 8; i++) //8位计数器 { dat <<= 1; //移出数据的最高位 SDA = CY; //送数据口 SCL = 1; //拉高时钟线 zho_i2c_wait(); //延时 SCL = 0; //拉低时钟线 zho_i2c_wait(); //延时 } zho_i2c_recv_ack(); //读取回应 } //------------------------------------------------------------------------------------- //I2C Recv Byte //------------------------------------------------------------------------------------- uint8_t zho_i2c_recv_byte() { uint8_t i; uint8_t dat = 0; SDA_INPUT(); //SDA的IO设置为输入 SDA = 1; //使能内部上拉,准备读取数据, for(i = 0; i < 8; i++) //8位计数器 { dat <<= 1; SCL = 1; //拉高时钟线 zho_i2c_wait(); //延时 dat |= SDA; //读数据 SCL = 0; //拉低时钟线 zho_i2c_wait(); //延时 } return dat; //返回 } //------------------------------------------------------------------------------------- //写寄存器 //------------------------------------------------------------------------------------- void zho_i2c_write_reg(uint8_t REG_Address, uint8_t REG_data) { zho_i2c_start(); //起始信号 zho_i2c_send_byte(SlaveAddress); //发送设备地址+写信号 zho_i2c_send_byte(REG_Address); //内部寄存器地址,请参考中文pdf zho_i2c_send_byte(REG_data); //内部寄存器数据,请参考中文pdf zho_i2c_stop(); //发送停止信号 } //------------------------------------------------------------------------------------- //读寄存器 //------------------------------------------------------------------------------------- uint8_t zho_i2c_read_reg(uint8_t REG_Address) { uint8_t REG_data; zho_i2c_start(); //起始信号 zho_i2c_send_byte(SlaveAddress); //发送设备地址+写信号 zho_i2c_send_byte(REG_Address); //发送存储单元地址 zho_i2c_start(); //起始信号 zho_i2c_send_byte(SlaveAddress + 1); //发送设备地址+读信号 REG_data = zho_i2c_recv_byte(); //读出寄存器数据 zho_i2c_send_ack(1); //发送回应 zho_i2c_stop(); //停止信号 return REG_data; //返回 } //------------------------------------------------------------------------------------- //连续读出6个寄存器,数据存放在zho_i2c_buf[] //------------------------------------------------------------------------------------- void zho_i2c_read_6_reg(uint8_t REG_Address) { uint8_t i; zho_i2c_start(); //起始信号 zho_i2c_send_byte(SlaveAddress); //发送设备地址+写信号 zho_i2c_send_byte(REG_Address); //发送起始存储单元地址 zho_i2c_start(); //起始信号 zho_i2c_send_byte(SlaveAddress + 1); //发送设备地址+读信号 for(i = 0; i < 6; i++) //连续读取6个地址数据 { zho_i2c_buf[i] = zho_i2c_recv_byte(); //存储数据 if (i == 5) {zho_i2c_send_ack(1);} //最后一个数据需要回NOACK else {zho_i2c_send_ack(0);} //回应ACK } zho_i2c_stop(); //停止信号 } //-------------------------------------------------------------------------------------
评论
    相关推荐
    • USB-COM(HL340).rar
      usb转串口,找了很久才找到,现在别的地方很难下到,要不用不了,我这个可以用 HL340D 的
    • NAND FLASH的读写程序.rar
      Nand flash 读写程序 C语言代码,可以给U盘开发者参考 可以读写三星各种型号的Nand flash芯片
    • USB_2.0.rar
      USB2.0开发例程,基于51单片机,包括pc端程序
    • 串口温度数据采集并实时显示.rar
      串口温度数据采集并实时显示 读串口数据的原理是,只要当有数据向串口发数据来时,计算机就会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个特定的缓冲区就可以了. 有数据向串口发过来时,程序可以将数据接收到,接收的数据是字符型的,那么将数据转化为数字型的,再将这个数据的大小作为画图的某一个点的纵坐标,横坐标为数据的序号.将这些点用线连起来就是一个曲线图了,这个就是图形显示基本原理. 查看原来的数据的原理也是这样的,不同的地方就是,数据是从文件中来,同样的也是将多个数据分成一个一个的,然后这一个数据的大小就是画图的某一个点的纵坐标,横坐标同样为数据的序号,再将这些点用线连起来就是曲线图. 图形能移动的原理,是我们首先改变的只是数据,图形并没有变,但图形的形式是由这些数据来确定的,当数据发生变化后,我们通过刷新显示区来变化的.
    • gps.rar
      GPS应用程序设计,内含GPS卫星原理、方法及详细源代码
    • MSCOMM32.OCX.rar
      串口编程控件MSCOMM32.OCX mscomm32.ocx是微软提供的串口通讯开发控件。支持串口通讯的软件大部分都是使用这个控件来实现串口通讯功能的。 安装方法:请您把它复制到系统目录下,对于windows9x系列(win95、win98、winme)是x:\windows\system\,对于 windowsNT、windows2000、windowsXP系列是x:\winnt\system32\。然后打开一个命令行提示符窗口(MSDOS方式窗口), 用"cd x:\windows\system\"命令或者"cd x:\winnt\system32\"切换到系统目录下,再执行"regsvr32 mscomm32.ocx"这个命令。
    • VSer.rar
      虚拟串口的完整源代码,包括注释和开发日志。据说市值5万人民币!
    • USB-shujucaiji.rar
      USB数据采集系统论文-自己的毕业设计论文,花了很长时间做的,内容十分详细,包括核心代码和开发环境的设置。
    • wmserial.zip
      基于消息的Windows串口通讯例子
    • TX-1C-usbdriver.rar
      郭天祥TX-1C的USB开发板原码,内有驱动文件,固件程序