基于合泰單片機無線鼠標智能小車控制_第1頁
基于合泰單片機無線鼠標智能小車控制_第2頁
基于合泰單片機無線鼠標智能小車控制_第3頁
基于合泰單片機無線鼠標智能小車控制_第4頁
基于合泰單片機無線鼠標智能小車控制_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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 / 5 字節(jié)寬度的發(fā)

2、射地址#define RX_ADR_WIDTH 5 / 5 字節(jié)寬度的接收地址#define TX_PLOAD_WIDTH 1 / 數(shù)據(jù)通道有效數(shù)據(jù)寬度#define RX_PLOAD_WIDTH 1 / 數(shù)據(jù)通道有效數(shù)據(jù)寬度uchar TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /發(fā)送地址uchar RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /接收地址uchar gs10=0x00,0x01,0x80,0x01,0x00,0x02,0x80,0x02,0x00,0x03;/低字節(jié)

3、高字節(jié) 占空比數(shù)組 1,83.3,66.7,50,33.3/*NRF24L01相關(guān)命令的宏定義*#define READ_REG 0x00 / 讀寄存器命令#define WRITE_REG 0x20 / 寫寄存器命令#define RD_RX_PLOAD 0x61 / 讀取接收數(shù)據(jù)命令#define WR_TX_PLOAD 0xA0 / 寫待發(fā)數(shù)據(jù)指令#define FLUSH_TX 0xE1 / 沖洗發(fā)送FIFO指令#define FLUSH_RX 0xE2 / 沖洗接收FIFO指令#define REUSE_TX_PL 0xE3 / 定義重復裝載數(shù)據(jù)命令#define NOP 0xFF

4、/ ?/*SPI(nRF24L01)相關(guān)地址的宏定義*#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 RX_ADDR_

5、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;/*uchar sta;u

6、char 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();/*延遲函數(shù)ms*/void delay200ms(unsigned int x)unsigned int i;for(i=0;i<x;i+)GCC_DELAY(200000);/*小車控制函數(shù)*/void car_qian

7、()_pcs2=0b00100000;/STM0 C5 pwm_pcc5=0;_pcpu5=1;_pcs3=0b00000000;/STM0 C6 0_pcc6=0;_pc6=0;void car_hou()_pcs2=0b00000000;/STM0 C5 0_pcc5=1;_pcpu5=0;_pcs3=0b00000001;/STM0 C6 pwm_pcc6=0;_pcpu6=1;void car_zuo()_pds0=0b00000001;/STM3 D0 pwm_pdc0=0;_pdpu=1;_pds1=0b00000000;/STM3 D3 0_pdc3=0;_pd3=0;void

8、car_you()_pds0=0b00000000;/STM3 D0 0_pdc0=1;_pdpu0=0;_pds1=0b00010000;/STM D3 pwm_pdc3=0;_pdpu3=1;void car_stop()_pcs2=0x00;_pcs3=0x00;_pds0=0x00;_pds1=0x00;_pcc6=0;_pc6=0;_pcc5=1;_pcpu5=0;_pdc0=1;_pdpu0=0;_pdc3=0;_pd3=0;void car_clear() /清楚上次位移端口影響_pcs2=0x00;_pcs3=0x00;_pds0=0x00;_pds1=0x00;GCC_DEL

9、AY(20);/*pwm占空比*void pwm_gs()if(m>5)m=5;if(m<1)m=1;switch(m)case 1: _tm0al = 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 = 0

10、x80;_tm0ah = 0x02; _tm3al = 0x80; _tm3ah = 0x02;break;case 5: _tm0al = 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=0

11、x00;_pac7=1;_papu7=1;_pcs1=0x00;_pcc2=0; /寫一個字節(jié)到nrf24l01,同時從nrf24l01讀出一個字節(jié)/*uchar SPI_RW(uchar data) uchar i,temp=0; for(i=0;i<8;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<&l

12、t;=1; _pa4=1; / Set SCK high. if(_pa1=1)temp+; / capture current MISO bit xiugai pa1 _pa4=0; / .then set SCK low again return(temp); / return read uuchar/從reg寄存器讀一個字節(jié)/*uchar SPI_Read(uchar reg) uchar reg_val; _pa6=0; / CSN low, initialize SPI communication. SPI_RW(reg); / Select register to read fro

13、m. reg_val = SPI_RW(0); / .then read registervalue _pa6=1; / CSN high, terminate SPI communication return(reg_val); / return register value/寫數(shù)據(jù)到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(valu

14、e); / .and write value to it. _pa6=1; / CSN high again return(status1); / return nRF24L01 status uuchar/用于讀數(shù)據(jù)/*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 s

15、tatus uuchar for(uuchar_ctr=0;uuchar_ctr<uchars;uuchar_ctr+) pBufuuchar_ctr = SPI_RW(0); _pa6=1; return(status2); / return nRF24L01 status uuchar/用于寫數(shù)據(jù) /*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; uuc

16、har_ctr<uchars; uuchar_ctr+) SPI_RW(*pBuf+); _pa6=1; /關(guān)閉SPI return(status1);void SetRX_Mode(void) _pa5=0; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ收發(fā)完成中斷響應,16位CRC,主接收 _pa5=1; GCC_DELAY(2000); /注意不能太小uchar nRF24L01_RxPacket(uchar* rx_buf) uchar revale=0; sta=SPI_Read(STATUS); / 讀取狀態(tài)寄存其來判斷數(shù)據(jù)接收狀況

17、if(sta&0x40) / 判斷是否接收到數(shù)據(jù) _pa5=0; /SPI使能 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH); / read receive payload fromRX_FIFO buffer revale =1; /讀取數(shù)據(jù)完成標志 SPI_RW_Reg(WRITE_REG+STATUS,sta); /接收到數(shù)據(jù)后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志 return revale;/發(fā)送tx-buf中數(shù)據(jù)/*void nRF24L01_TxPacket(uuchar *tx_buf)

18、CE=0 ; SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); SPI_Write_Buf(WR_TX_PLOAD, 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

19、high SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 寫本地地址 SPI_Write_Buf(WRITE_REG + 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

20、_CH, 0); / 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為32字節(jié) SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB SPI_RW_Reg(WRITE_REG + CONFIG, 0x0E); / IRQ收發(fā)完成中斷響應,16位CRC ,主接收void time_init(void)/保持對應的I/O口的原來功能 _phs0 = 0; _tm0c0 = 0x00; /增強型TM(查

21、找TM1C0寄存器),4分頻 / _tm0dl = 0x00;/ _tm0dh = 0x00;_tm0c0=0b10010110; /7.784M 停止不分頻關(guān)閉100 512P高三位 本來應該8m實驗測得7.784M_tm0c1=0b10101000; /工作模式輸出模式高有效同相向上計數(shù)(p匹配雙pwm輸出模式)/ _tm0c2=0b10101000;/工作模式輸出模式高有效同相邊沿對齊/_tm0al = 0x80;/a/_tm0ah = 0x02;/a_tm0c0 &=(1 << 7);/運行定時器_tm0c0 |= (1 << 3);/計數(shù)器On/*_t

22、m0c0 |= (1 << 3);/計數(shù)器On*/_tm3c0 = 0x00; /增強型TM(查找TM3C0寄存器) / _tm3dl = 0x00;/ _tm3dh = 0x00;_tm3c0=0b10010110; /7.784M 停止不分頻關(guān)閉100 512P高三位 本來應該8m實驗測得7.784M_tm3c1=0b10101000; /工作模式輸出模式高有效同相向上計數(shù)(p匹配雙pwm輸出模式)/_tm3al = 0x80;/a/_tm3ah = 0x02;/a_tm3c0 &=(1 << 7);/運行定時器_tm3c0 |= (1 << 3);/計數(shù)器On /* 計數(shù)值的上限是3FFH,這里取計數(shù)初值為356H,即每隔 (3FFH-356H)=169x1/(fsys/4)的時間觸發(fā)一次中斷*/_mf0e = 1; /允許多功能中斷0,多功能中斷包括TM中斷(INTC1寄存器bit1位)_emi = 1;/開總中斷void main() uchar num,zuo,you,qian,hou;num=0;zuo=0;you=0;qian=0;hou=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論