ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:18.26KB ,
资源ID:30628262      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30628262.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于合泰单片机无线鼠标智能小车控制.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于合泰单片机无线鼠标智能小车控制.docx

1、基于合泰单片机无线鼠标智能小车控制#include HT66FU70A.h#define uchar unsigned char#define uint unsigned int#define led _pc2 /led/*NRF24L01端口宏定义*/#define MOSI _pa3 /MOSI/#define SCK _pa4 /SCK/#define CE _pa5 /CE/#define CSN _pa6 /CSN/#define MISO _pa1 /MISO输入/#define IRQ _pa7 /IRQ输入/*NRF24L01*#define TX_ADR_WIDTH 5 /

2、5 字节宽度的发射地址#define RX_ADR_WIDTH 5 / 5 字节宽度的接收地址#define TX_PLOAD_WIDTH 1 / 数据通道有效数据宽度#define RX_PLOAD_WIDTH 1 / 数据通道有效数据宽度uchar TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /发送地址uchar RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /接收地址uchar gs10=0x00,0x01,0x80,0x01,0x00,0x02,0x80,0x02,0x00,0

3、x03; /低字节高字节 占空比数组 1,83.3,66.7,50,33.3/*NRF24L01相关命令的宏定义*#define READ_REG 0x00 / 读寄存器命令#define WRITE_REG 0x20 / 写寄存器命令#define RD_RX_PLOAD 0x61 / 读取接收数据命令#define WR_TX_PLOAD 0xA0 / 写待发数据指令#define FLUSH_TX 0xE1 / 冲洗发送FIFO指令#define FLUSH_RX 0xE2 / 冲洗接收FIFO指令#define REUSE_TX_PL 0xE3 / 定义重复装载数据命令#define

4、NOP 0xFF / ?/*SPI(nRF24L01)相关地址的宏定义*#define CONFIG 0x00 #define EN_AA 0x01 #define EN_RXADDR 0x02 #define SETUP_AW 0x03 #define SETUP_RETR 0x04 #define RF_CH 0x05 #define RF_SETUP 0x06 #define STATUS 0x07 #define OBSERVE_TX 0x08 #define CD 0x09 #define RX_ADDR_P0 0x0A #define RX_ADDR_P1 0x0B #define

5、 RX_ADDR_P2 0x0C #define RX_ADDR_P3 0x0D #define RX_ADDR_P4 0x0E #define RX_ADDR_P5 0x0F #define TX_ADDR 0x10 #define RX_PW_P0 0x11 #define RX_PW_P1 0x12 #define RX_PW_P2 0x13 #define RX_PW_P3 0x14 #define RX_PW_P4 0x15 #define RX_PW_P5 0x16 #define FIFO_STATUS 0x17 /uuchar TxBuf2=;uchar RxBuf1;/*uc

6、har sta;uchar m=3; unsigned char IN1,IN2,IN3,IN4;/对应芯片如向前1000void pwn_1();void car_qian();void car_hou();void car_zuo();void car_you();void car_stop();void time_init();void CAR_Q();void CAR_H();/*延迟函数ms*/void delay200ms(unsigned int x) unsigned int i; for(i=0;i5)m=5; if(m1)m=1; switch(m) case 1: _tm

7、0al = 0x00; _tm0ah = 0x01; _tm3al = 0x00; _tm3ah = 0x01;break; case 2: _tm0al = 0x80; _tm0ah = 0x01; _tm3al = 0x80; _tm3ah = 0x01;break; case 3: _tm0al = 0x00; _tm0ah = 0x02; _tm3al = 0x00; _tm3ah = 0x02;break; case 4: _tm0al = 0x80; _tm0ah = 0x02; _tm3al = 0x80; _tm3ah = 0x02;break; case 5: _tm0al

8、= 0x00; _tm0ah = 0x03; _tm3al = 0x00; _tm3ah = 0x03;break; GCC_DELAY(10); time_init(); void Mcu_init() _pas1=0x00; _pac3=0; _pas2=0x00; _pac4=0; _pas2=0x00; _pac5=0; _pas3=0x00; _pac6=0; /pa3-6 配置为输出io口无线模块配置 _pas0=0x00; _pac1=1; _papu1=1; _pas3=0x00; _pac7=1; _papu7=1; _pcs1=0x00; _pcc2=0; /写一个字节到n

9、rf24l01,同时从nrf24l01读出一个字节/*uchar SPI_RW(uchar data) uchar i,temp=0; for(i=0;i8;i+) / output 8-bit if(data & 0x80)=0x80) _pa3=1; / output uuchar, MSB to MOSI else _pa3=0; data = (data 1); / shift next bit into MSB. temp=1; _pa4=1; / Set SCK high. if(_pa1=1)temp+; / capture current MISO bit xiugai pa1

10、 _pa4=0; / .then set SCK low again return(temp); / return read uuchar/从reg寄存器读一个字节/*uchar SPI_Read(uchar reg) uchar reg_val; _pa6=0; / CSN low, initialize SPI communication. SPI_RW(reg); / Select register to read from. reg_val = SPI_RW(0); / .then read registervalue _pa6=1; / CSN high, terminate SPI

11、 communication return(reg_val); / return register value/写数据到reg寄存器/*uchar SPI_RW_Reg(uchar reg, uchar value) uchar status1; _pa6=0; / CSN low, init SPI transaction status1 = SPI_RW(reg); / select register SPI_RW(value); / .and write value to it. _pa6=1; / CSN high again return(status1); / return nRF

12、24L01 status uuchar/用于读数据/*uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars) uchar status2,uuchar_ctr; _pa6=0; / Set CSN low, init SPI tranaction status2 = SPI_RW(reg); / Select register to write to and read status uuchar for(uuchar_ctr=0;uuchar_ctruchars;uuchar_ctr+) pBufuuchar_ctr = SPI_RW(

13、0); _pa6=1; return(status2); / return nRF24L01 status uuchar/用于写数据 /*uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars) uchar status1,uuchar_ctr; _pa6=0; /SPI使能 status1 = SPI_RW(reg); for(uuchar_ctr=0; uuchar_ctruchars; uuchar_ctr+) SPI_RW(*pBuf+); _pa6=1; /关闭SPI return(status1);void SetRX_Mo

14、de(void) _pa5=0; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ收发完成中断响应,16位CRC,主接收 _pa5=1; GCC_DELAY(2000); /注意不能太小uchar nRF24L01_RxPacket(uchar* rx_buf) uchar revale=0; sta=SPI_Read(STATUS); / 读取状态寄存其来判断数据接收状况 if(sta&0x40) / 判断是否接收到数据 _pa5=0; /SPI使能 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH); / r

15、ead receive payload fromRX_FIFO buffer revale =1; /读取数据完成标志 SPI_RW_Reg(WRITE_REG+STATUS,sta); /接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志 return revale;/发送tx-buf中数据/*void nRF24L01_TxPacket(uuchar *tx_buf) CE=0 ; SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); SPI_Write_Buf(WR_TX_PLOA

16、D, tx_buf, TX_PLOAD_WIDTH); SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); CE=1; delay_us(100);*/void init_NRF24L01(void) GCC_DELAY(250); _pa5=0 ; / chip enable _pa6=1; / Spi disable _pa4=0; / Spi clock line init high SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址 SPI_Write_Buf(WRITE_R

17、EG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 写接收端地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 频道0自动 ACK应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允许接收地址只有频道0,如果需要多频道可以参考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0); / 设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /设置接收数据长度,本次设置

18、为32字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /设置发射速率为1MHZ,发射功率为最大值0dB SPI_RW_Reg(WRITE_REG + CONFIG, 0x0E); / IRQ收发完成中断响应,16位CRC ,主接收void time_init(void) /保持对应的I/O口的原来功能 _phs0 = 0; _tm0c0 = 0x00; /增强型TM(查找TM1C0寄存器),4分频 / _tm0dl = 0x00;/ _tm0dh = 0x00; _tm0c0=0b10010110; /7.784M 停止不分频关闭100 512P高三位 本

19、来应该8m实验测得7.784M _tm0c1=0b10101000; /工作模式输出模式高有效同相向上计数(p匹配双pwm输出模式)/ _tm0c2=0b10101000; /工作模式输出模式高有效同相边沿对齐 / _tm0al = 0x80;/a/ _tm0ah = 0x02;/a _tm0c0 &=(1 7); /运行定时器 _tm0c0 |= (1 3); /计数器On /*_tm0c0 |= (1 3); /计数器On*/ _tm3c0 = 0x00; /增强型TM(查找TM3C0寄存器) / _tm3dl = 0x00;/ _tm3dh = 0x00; _tm3c0=0b100101

20、10; /7.784M 停止不分频关闭100 512P高三位 本来应该8m实验测得7.784M _tm3c1=0b10101000; /工作模式输出模式高有效同相向上计数(p匹配双pwm输出模式)/ _tm3al = 0x80;/a/ _tm3ah = 0x02;/a _tm3c0 &=(1 7); /运行定时器 _tm3c0 |= (1 =20) num=0; if(zuo=11) zuo=0; car_zuo(); delay200ms(10);car_clear();car_stop(); if(you=11) you=0; car_you(); delay200ms(10);car_clear();car_stop(); if(qian=11) qian=0; car_qian();delay200ms(10);car_clear();car_stop(); if(hou=11) hou=0; car_hou(); delay200ms(10);car_clear();car_stop(); else led=0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1