久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12100|回復: 5
打印 上一主題 下一主題
收起左側

誰會pn532 i2c通信例程(nfc通信模塊)

[復制鏈接]
跳轉到指定樓層
樓主
ID:69679 發表于 2015-9-23 19:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
在淘寶上買了個nfc射頻卡模塊(新版PN532 NFC RFID V3 模塊 近場通信,支持和Android手機通信),上網查了一些資料,大多數都是串口通信,而且還是arduino例程,我想用C語言i2c通信,誰會留個聯系方式,或者給點例程、資料什么的?

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:69679 發表于 2015-9-25 08:19 | 只看該作者
怎么沒人回答?那給個串口的程序總該有吧?拜托了!!!!!
回復

使用道具 舉報

板凳
ID:91284 發表于 2015-9-29 10:44 | 只看該作者
  1. #include <hidef.h>           /* common defines and macros */
  2. #include "derivative.h"      /* derivative-specific definitions */

  3. #define WHO_AM_I 0x0F

  4. #define CTRL_REG1 0x20     
  5. #define CTRL_REG2 0x21     
  6. #define CTRL_REG3 0x22
  7. #define CTRL_REG4 0x23
  8. #define CTRL_REG5 0x24

  9. #define OUT_X_L 0x28
  10. #define OUT_X_H 0x29
  11. #define OUT_Y_L 0x2A
  12. #define OUT_Y_H 0x2B
  13. #define OUT_Z_L 0x2C
  14. #define OUT_Z_H 0x2D

  15. #define        SlaveAddress   0xD2         
  16. //定義器件在IIC總線中的從地址,根據ALT  ADDRESS地址引腳不同修改

  17. #define SCL PTM_PTM2
  18. #define SDA PTM_PTM5

  19. #define SCL_dir DDRM_DDRM2
  20. #define SDA_dir DDRM_DDRM5

  21. #define  BUS_CLOCK                   48000000           //總線頻率
  22. #define  OSC_CLOCK                   16000000           //晶振頻率

  23. #define somenop(); asm("nop"); asm("nop");/*asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");*/\
  24.                    //asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");\
  25.                    //asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");\
  26.                    //asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");

  27. //asm("nop");晶振頻率的倒數
  28. char BUF[8];                         //接收數據緩存區
  29. uchar ge,shi,bai,qian,wan;           //顯示變量
  30. int dis_data1,dis_data2,dis_data3;//變量
  31. uchar TxBuf[10] = {0,0,0,0,0,0,0,0,0,0};


  32. /*************************************************************/
  33. /*                      初始化鎖相環                         */
  34. /*************************************************************/

  35. void INIT_PLL(void)
  36. {
  37.     CLKSEL &= 0x7f;       //set OSCCLK as sysclk
  38.     PLLCTL &= 0x8F;       //Disable PLL circuit
  39.     CRGINT &= 0xDF;
  40.    
  41.     #if(BUS_CLOCK == 48000000)
  42.       SYNR = 0x45;
  43.     #elif(BUS_CLOCK == 40000000)
  44.       SYNR = 0x44;
  45.     #elif(BUS_CLOCK == 32000000)
  46.       SYNR = 0x43;     
  47.     #elif(BUS_CLOCK == 24000000)
  48.       SYNR = 0x42;
  49.     #endif

  50.     REFDV = 0x81;         //PLLCLK=2×OSCCLK×(SYNR+1)/(REFDV+1)=64MHz ,fbus=32M
  51.     PLLCTL =PLLCTL|0x70;  //Enable PLL circuit
  52.     asm NOP;
  53.     asm NOP;
  54.     while(!(CRGFLG&0x08)); //PLLCLK is Locked already
  55.     CLKSEL |= 0x80;        //set PLLCLK as sysclk
  56. }

  57. /*************************************************************/
  58. /*                        延時函數                           */
  59. /*************************************************************/
  60. void delay(void)
  61. {
  62. unsigned int i;
  63. for(i=0;i<5000;i++);
  64. }

  65. /*************************************************************/
  66. /*                        初始化IIC                          */
  67. /*************************************************************/
  68. void INIT_IIC(void)
  69. {

  70. SCL_dir = 1;
  71. SCL_dir = 1;
  72. SCL = 1;
  73. SDA = 1;
  74. }


  75. /*************************************************************/
  76. /*                         啟動IIC                           */
  77. /*************************************************************/
  78. void I2Cstart(void)
  79. {
  80.   SCL_dir = 1;
  81.   SDA_dir = 1;
  82.   SDA = 1;
  83.   somenop();
  84.   SCL = 1;
  85.   somenop();
  86.   somenop();
  87.   SDA = 0;
  88.   somenop();
  89.   somenop();
  90.   SCL = 0;
  91. }


  92. /**************************************
  93. 接收應答信號
  94. **************************************/
  95. void L3G4200D_RecvACK()
  96. {
  97.     SCL_dir = 1;
  98.     SDA_dir = 0;

  99.     SCL = 1;                    //拉高時鐘線
  100.     somenop();
  101.     somenop();                 //延時
  102.     while(SDA==1);
  103.     SCL = 0;                    //拉低時鐘線
  104.     somenop();
  105.     somenop();                 //延時

  106. }
  107. /*************************************************************/
  108. /*                       IIC發送數據                         */
  109. /*************************************************************/
  110. void I2Csend(byte data)
  111. {
  112. unsigned char i=8;

  113. SCL_dir = 1;
  114. SDA_dir = 1;

  115. for (i=0; i<8; i++)         //8位計數器
  116. {
  117.         SDA = (data&0x80)>>7;               //送數據口
  118.         data=data<<1;
  119.         SCL = 1;                //拉高時鐘線
  120.        somenop();
  121.         somenop();             //延時
  122.         SCL = 0;                //拉低時鐘線
  123.         somenop();
  124.         somenop();             //延時
  125. }
  126.    
  127. L3G4200D_RecvACK();
  128. }




  129. /*************************************************************/
  130. /*                       IIC接收數據                         */
  131. /*************************************************************/
  132. signed char I2Creceive(void)
  133. {
  134.     byte i;
  135.     byte dat = 0;
  136.    
  137.     SCL_dir = 1;
  138.     SDA_dir = 0;

  139.     for (i=0; i<8; i++)         //8位計數器
  140.     {
  141.         dat <<= 1;                              //這里的1是 00000001
  142.         SCL = 1;                //拉高時鐘線
  143.         somenop();
  144.         somenop();             //延時
  145.         dat |= SDA;             //讀數據      SDA  00000000 or 00000001         
  146.         SCL = 0;                //拉低時鐘線
  147.         somenop();
  148.         somenop();             //延時
  149.     }
  150.     return dat;
  151. }

  152. /**************************************
  153. 發送應答信號
  154. 入口參數:ack (0:ACK 1:NAK)
  155. **************************************/
  156. void I2Csendack(char ack)
  157. {
  158.     SCL_dir = 1;
  159.     SDA_dir = 1;
  160.     if(ack==1)
  161.     {     
  162.        SDA = 1;                  //寫應答信號
  163.        SCL = 1;                    //拉高時鐘線
  164.        somenop();
  165.        somenop();
  166.        SCL = 0;                    //拉低時鐘線
  167.        somenop();
  168.        somenop();
  169.     }
  170.     else
  171.     {
  172.        SDA = 0;                  //寫應答信號
  173.        SCL = 1;                    //拉高時鐘線
  174.        somenop();
  175.        somenop();
  176.        SCL = 0;                    //拉低時鐘線
  177.        somenop();
  178.        somenop();
  179.     }
  180. }





  181. /*************************************************************/
  182. /*                         停止IIC                           */
  183. /*************************************************************/
  184. void I2Cstop(void)
  185. {
  186.   SCL_dir = 1;
  187.   SDA_dir = 1;
  188.   
  189.   SCL = 1;
  190.   SDA = 0;
  191.   somenop();
  192.   somenop();
  193.   SDA = 1;
  194.   somenop();
  195.   somenop();
  196. }

  197. //單字節寫入*******************************************

  198. void Single_WriteL3G4200D(uchar REG_Address,uchar REG_data)
  199. {
  200.     I2Cstart();                  //起始信號
  201.     I2Csend(SlaveAddress);   //發送設備地址+寫信號
  202.     I2Csend(REG_Address);    //內部寄存器地址,請參考中文pdf22頁
  203.     I2Csend(REG_data);       //內部寄存器數據,請參考中文pdf22頁
  204.     I2Cstop();                   //發送停止信號
  205. }

  206. //單字節讀取*****************************************
  207. uchar Single_ReadL3G4200D(uchar REG_Address)
  208. {
  209.     uchar REG_data;
  210.     I2Cstart();                          //起始信號
  211.     I2Csend(SlaveAddress);           //發送設備地址+寫信號
  212.     I2Csend(REG_Address);            //發送存儲單元地址,從0開始        
  213.     I2Cstart();                          //起始信號
  214.     I2Csend(SlaveAddress+1);         //發送設備地址+讀信號
  215.     REG_data=I2Creceive();              //讀出寄存器數據
  216.     I2Csendack(1);  
  217.     I2Cstop();                           //停止信號
  218.     return REG_data;
  219. }
  220. //*************************************************



  221. //*****************************************************************

  222. //初始化L3G4200D,根據需要請參考pdf,第27頁,進行修改************************
  223. void InitL3G4200D()
  224. {
  225.    Single_WriteL3G4200D(CTRL_REG1, 0x0f);   //  0x0f=00001111  普通模式   X Y Z 啟用。
  226.    Single_WriteL3G4200D(CTRL_REG2, 0x00);   //  選擇高通濾波模式和高通截止頻率  此為普通模式
  227.    Single_WriteL3G4200D(CTRL_REG3, 0x08);   //  0x08=0000 1000    DRDY/INT2 數據準備(0: Disable; 1: Enable)默認0
  228.    Single_WriteL3G4200D(CTRL_REG4, 0x00 );  //  選擇量程    滿量程選擇(默認 00)(00:250dps)
  229.    Single_WriteL3G4200D(CTRL_REG5, 0x00);   //   篎FIFO使能,高通濾波使
  230. }



  231. void SCI_Init()
  232. {
  233.   SCI1BD = BUS_CLOCK/16/9600;   //設置SCI1波特率為9600
  234.   SCI1CR1 = 0x00;       //設置SCI1為正常模式,八位數據位,無奇偶校驗
  235.   SCI1CR2 = 0x0c;       //允許發送和接收數據,禁止中斷功能*/
  236.         MODRR|=0X80;
  237.   
  238. }
  239. void SCI_send(unsigned char data)
  240. {
  241.   while(!SCI1SR1_TDRE);       //等待發送數據寄存器(緩沖器)為空
  242.   SCI1DRL = data;
  243. }



  244. /*************************************************************/
  245. /*                  串口發送字符串函數                       */
  246. /*************************************************************/
  247. void send_string(unsigned char *putchar)
  248. {
  249.   while(*putchar!=0x00)       //判斷字符串是否發送完畢
  250.   {
  251.    
  252.    SCI_send(*putchar++);  
  253.   }
  254. }

  255. uchar SCI_receive()
  256. {
  257.         uchar a;
  258.         while(!SCI1SR1_RDRF);
  259.         a=SCI1DRL;
  260.         return a;
  261. }



  262. void SCI_sendstring(unsigned char *a,unsigned char stringlen)
  263. {
  264.     unsigned char i;
  265.   for(i=0;i<=stringlen;i++)
  266.         SCI_send(*(a++));
  267. }

  268. unsigned int CRC_Check(unsigned char *Buf, unsigned char crc_count)
  269. {
  270.     unsigned short CRC_Temp;
  271.     unsigned char i,j;
  272.     CRC_Temp = 0xffff;

  273.     for (i=0;i<crc_count; i++)
  274.     {      
  275.         CRC_Temp ^= Buf[i];
  276.         for(j=0;j<8;j++)
  277.         {
  278.             if (CRC_Temp & 0x01)
  279.             CRC_Temp = (CRC_Temp >>1 ) ^ 0xa001;
  280.             else
  281.             CRC_Temp = CRC_Temp >> 1;
  282.         }
  283.     }
  284.     return(CRC_Temp);
  285. }

  286. void WirelessSerial(int a,int b,int c,int d)
  287. {
  288.   int num;
  289.   unsigned char *data;
  290.   unsigned char nrf_flag = 0,error;
  291.   int *pdat;

  292. #if 1
  293.   num = (int)a;    //Speed
  294.   data = (unsigned char *)&num;
  295.   TxBuf[1] = *data;
  296.   data++;
  297.   TxBuf[0] = *data;
  298.       
  299.   num = (int)b;      //MotorPWM
  300.   data = (unsigned char *)&num;
  301.   TxBuf[3] = *data;
  302.   data++;
  303.   TxBuf[2] = *data;

  304.   num = (int)c;        //angle
  305.   data = (unsigned char *)&num;
  306.   TxBuf[5] = *data;
  307.   data++;
  308.   TxBuf[4] = *data;
  309.   
  310.   num = (int)d;
  311.   data = (unsigned char *)&num;
  312.   TxBuf[7] = *data;
  313.   data++;
  314.   TxBuf[6] = *data;
  315. #endif

  316.   num = CRC_Check(TxBuf,8);
  317.   TxBuf[8] = num & 0xFF;
  318.   TxBuf[9] = num >> 8;

  319.   SCI_sendstring(TxBuf,9);
  320. }

  321. void main(void)
  322. {
  323.   DisableInterrupts;
  324.    
  325.   INIT_PLL();
  326.   
  327.   INIT_IIC();
  328.   
  329.   SCI_Init();
  330.   
  331.   InitL3G4200D();
  332.   
  333.   EnableInterrupts;

  334.   for(;;)
  335.   {
  336.       
  337.       BUF[0]= Single_ReadL3G4200D(OUT_X_L);
  338.       BUF[1]= Single_ReadL3G4200D(OUT_X_H);
  339.       dis_data1=(BUF[1]<<8)+BUF[0];
  340.   
  341.       
  342.       BUF[2]= Single_ReadL3G4200D(OUT_Y_L);
  343.       BUF[3]= Single_ReadL3G4200D(OUT_Y_H);
  344.       dis_data2=(BUF[3]<<8)+BUF[2];
  345.       
  346.       
  347.       BUF[4]= Single_ReadL3G4200D(OUT_Z_L);
  348.       BUF[5]= Single_ReadL3G4200D(OUT_Z_H);
  349.       dis_data3=(BUF[5]<<8)+BUF[4];
  350.       
  351.             
  352.       WirelessSerial(dis_data1,0,0,0);
  353.       
  354.       
  355.      
  356.       
  357.       
  358.   }
  359. }
復制代碼


MMA7451的例程,你只需要找到PN532的相關地址改下就ok了
回復

使用道具 舉報

地板
ID:143203 發表于 2017-1-2 09:16 | 只看該作者
沒有頭文件?
回復

使用道具 舉報

5#
ID:225305 發表于 2018-8-9 21:22 | 只看該作者
qq多少?
回復

使用道具 舉報

6#
ID:881610 發表于 2021-2-4 12:19 | 只看該作者
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: aaa精品| 成人一区二区在线 | 91在线精品视频 | 中文字幕亚洲区 | 亚洲色图综合网 | 国产中文在线观看 | 国产精品亚洲精品久久 | 在线观看的av | 日一区二区 | 欧美精品在线播放 | 青春草在线 | 久久久久久久一区 | 亚洲精品日韩综合观看成人91 | 黑人巨大精品欧美一区二区免费 | 在线国产欧美 | 日韩在线中文字幕 | 中文字幕精品视频 | 国产成人小视频 | 久久综合久久久 | 亚洲国产成人av | 亚洲图片视频一区 | 国产免费让你躁在线视频 | 欧美综合国产精品久久丁香 | 精品一区二区电影 | 日本在线免费视频 | 久久男人 | 亚洲xxxxx| 亚洲在线视频 | 在线高清免费观看视频 | 蜜桃视频在线观看免费视频网站www | 国产精品福利一区二区三区 | 国产一区二区在线免费观看 | 国产丝袜人妖cd露出 | 国产成人一区二区三区久久久 | www.日韩 | 中文字幕精品一区久久久久 | 在线观看视频亚洲 | aaa一区 | 欧美日韩一区在线播放 | 日韩视频精品在线 | 国产福利视频网站 |