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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 893|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機驅(qū)動MMA7455源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:520501 發(fā)表于 2019-7-3 20:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
常見功能模塊例程

單片機源程序如下:
  1. #include "MMA7455.H"
  2. //sbit sda=P2^3;              //I2C 數(shù)據(jù)傳送位
  3. //sbit scl=P2^4;              //I2C 時鐘傳送位
  4. unsigned char sign_flag;  //輸出數(shù)據(jù)正負(fù)標(biāo)記位
  5. void IIC_MMA7455_init()
  6. {
  7. IIC_start();
  8. IIC_writebyte(MMA7455_ADDER_WRITE);     //1. 在IIC總線上尋址MMA7455
  9. while(IIC_respons());
  10. IIC_writebyte(MMA7455_Mode_Control_Register);    //2. 模式設(shè)置寄存器尋址
  11. while(IIC_respons());
  12. IIC_writebyte(MMA7455_2G_Measurement_Mode);         //3. 模式寄存器數(shù)據(jù)寫入
  13. while(IIC_respons());
  14. IIC_stop();
  15. IIC_start();
  16. IIC_writebyte(MMA7455_ADDER_WRITE);     //1. 在IIC總線上尋址MMA7455
  17. while(IIC_respons());
  18. IIC_writebyte(MMA7455_Mode_Control_Register);    //2. 模式設(shè)置寄存器尋址
  19. while(IIC_respons());
  20. IIC_writebyte(MMA7455_2G_Measurement_Mode);         //3. 模式寄存器數(shù)據(jù)寫入
  21. while(IIC_respons());
  22. IIC_stop();

  23. }
  24. void IIC_MMA7455_writedata(uchar byte_add,uchar wdata)//函數(shù)功能:按地址寫入一字節(jié)數(shù)據(jù)
  25. {
  26.      unsigned char  temp;
  27.          temp=(IIC_WRITE<<1);
  28.          IIC_start();
  29.          IIC_writebyte(temp);
  30.          while(IIC_respons());
  31.          IIC_writebyte(byte_add);
  32.          while(IIC_respons());
  33.      IIC_writebyte(wdata);
  34.          while(IIC_respons());
  35.          IIC_stop();
  36. }
  37. unsigned char IIC_MMA7455_readdata(uchar byte_add)                   //函數(shù)功能:按地址讀出一字節(jié)數(shù)據(jù)
  38. {
  39.      unsigned char temp;
  40.          char x_y_z ;
  41.          temp=(IIC_WRITE<<1);
  42.          IIC_start();
  43.          IIC_writebyte(0x3A);
  44.          while(IIC_respons());
  45.          IIC_writebyte(byte_add);
  46.          while(IIC_respons());
  47.          temp=((IIC_READ<<1)|0x01);
  48.          IIC_start();
  49.          IIC_writebyte(0x3B);
  50.          while(IIC_respons());
  51.          x_y_z=IIC_readbyte();
  52.          while(IIC_respons());
  53.          IIC_stop();
  54.          return x_y_z;
  55. }

  56. unsigned char IIC_MMA7455_test()
  57. {
  58.     unsigned char temp;
  59.         for(temp=255;temp<=1;temp--);
  60.     IIC_MMA7455_writedata(0x16,0x05);
  61.         for(temp=255;temp<=1;temp--);       
  62.     temp=IIC_MMA7455_readdata(0x16);
  63.         if(temp==0x05) {return 1;}
  64.         else{return 0;}       
  65. }
  66. unsigned char IIC_MMA7455_checkbusy()
  67. {
  68.          unsigned char temp;                                                                               
  69.          temp=IIC_MMA7455_readdata(MMA7455_READ_STATUS);
  70.          if((temp&0x01)==1)
  71.          {
  72.                  return 1;
  73.          }
  74.          else
  75.          {
  76.                  return 0;
  77.          }

  78. }
  79. unsigned char IIC_MMA7455_getvalue(unsigned char address_byte)
  80. {
  81.    unsigned char temp;
  82.    while(!IIC_MMA7455_checkbusy());
  83.    temp=IIC_MMA7455_readdata(address_byte);
  84.    if((temp&0x80)==0x00)
  85.    {
  86.             sign_flag=0;
  87.          return temp;
  88.    
  89.    }
  90.    else
  91.    {
  92.             sign_flag=1;
  93.          temp=temp-0x01;
  94.          temp=~temp;
  95.          return temp;
  96.    }
  97. }
  98. unsigned char IIC_MMA7455_getaverage(unsigned char address_byte)
  99. {
  100.     unsigned char num,temp;
  101.         unsigned int  temps=0x00;
  102.         for(num=50;num>0;num--)
  103.         {
  104.                 temp=IIC_MMA7455_getvalue(address_byte);
  105.                 temps=temps+temp;       
  106.         }
  107.         temp=temps/50;
  108.         return temp;
  109. }



  110. unsigned char IIC_MMA7455_getacceleration(unsigned char address_byte)
  111. {
  112.         unsigned int temp;
  113.         temp=IIC_MMA7455_getaverage(address_byte);
  114.         temp=temp*200;
  115.         temp=temp>>7;
  116.         return temp;

  117. }
  118. unsigned char IIC_MMA7455_calibrate_X()
  119. {
  120.    unsigned char tempX,time;                                                                               
  121.    while(!IIC_MMA7455_checkbusy());
  122.    tempX=IIC_MMA7455_readdata(MMA7455_READ_X);
  123.    for(time=100;time>0;time--)
  124.    {
  125.    if((tempX&0x80)==0x00)
  126.    {
  127.             tempX=tempX+tempX;
  128.          tempX=~tempX+1;
  129.          IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempX);   
  130.    }
  131.    else
  132.    {
  133.          tempX=tempX-1;
  134.          tempX=~tempX;
  135.          tempX=tempX+tempX;
  136.          IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempX);
  137.    }
  138.    tempX=IIC_MMA7455_readdata(MMA7455_READ_X);
  139.    if((tempX<=10)&&(tempX>=-10)){break;}
  140.    }
  141.    return 1;
  142. }



  143. unsigned char IIC_MMA7455_calibrate_Y()
  144. {
  145.    unsigned char tempY,time;                                                                               
  146.    while(!IIC_MMA7455_checkbusy());
  147.    tempY=IIC_MMA7455_readdata(MMA7455_READ_Y);
  148.    for(time=100;time>0;time--)
  149.    {
  150.    if((tempY&0x80)==0x00)
  151.    {
  152.             tempY=tempY+tempY;
  153.          tempY=~tempY+1;
  154.          IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempY);   
  155.    }
  156.    else
  157.    {
  158.          tempY=tempY-1;
  159.          tempY=~tempY;
  160.          tempY=tempY+tempY;
  161.          IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempY);
  162.    }
  163.    tempY=IIC_MMA7455_readdata(MMA7455_READ_Y);
  164.    if((tempY<=10)&&(tempY>=-10)){break;}
  165.    }
  166.    return 1;
  167. }




  168. unsigned char IIC_MMA7455_calibrate_Z()
  169. {
  170.    unsigned char tempZ,time;                                                                               
  171.    while(!IIC_MMA7455_checkbusy());
  172.    tempZ=IIC_MMA7455_readdata(MMA7455_READ_Z);
  173.    for(time=100;time>0;time--)
  174.    {
  175.    if((tempZ&0x80)==0x00)
  176.    {
  177.           
  178.          tempZ=64-tempZ;
  179.          if(tempZ==0){break;}
  180.          if(tempZ>0)
  181.          {
  182.                  tempZ=tempZ+tempZ;
  183.                  tempZ=~tempZ+1;
  184.                  IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempZ);
  185.          }
  186.          if(tempZ<0)
  187.          {
  188.                  tempZ=tempZ+tempZ;
  189.                  IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempZ);
  190.          }  
  191.    }
  192.    else
  193.    {
  194.          tempZ=tempZ-1;
  195.          tempZ=~tempZ;
  196.          tempZ=64+tempZ;
  197.          tempZ=tempZ+tempZ;
  198.          IIC_MMA7455_writedata(MMA7455_RW_XOFFL,tempZ);
  199.    }
  200.    tempZ=IIC_MMA7455_readdata(MMA7455_READ_Z);
  201.    if((tempZ<=70)&&(tempZ>=50)){break;}
  202.    }
  203.    return 1;
  204. }
復(fù)制代碼

所有資料51hei提供下載:
常見功能模塊例程.zip (20.76 KB, 下載次數(shù): 10)


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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91久久精品日日躁夜夜躁国产 | 天天插天天射天天干 | 在线观看亚洲欧美 | 天堂在线一区 | 草草影院ccyy | 日韩资源 | 中文字幕在线精品 | 毛片韩国 | 国产主播第一页 | 美女毛片 | 精品久久影院 | 国产日韩精品一区二区 | 在线观看免费av网 | 二区不卡 | 日韩高清一区 | 综合另类| 国产羞羞视频在线观看 | 亚洲综合视频 | 麻豆国产一区二区三区四区 | 精品欧美乱码久久久久久1区2区 | 一区二区三区亚洲 | 99小视频 | 91九色在线观看 | 国产精品视频久久久 | 福利电影在线 | 亚洲日韩中文字幕一区 | 亚洲精品一区二区另类图片 | 午夜影院普通用户体验区 | 成人精品一区亚洲午夜久久久 | 国产一级一级 | 91麻豆精品国产91久久久久久久久 | 国产1区 | 精品毛片在线观看 | 国产玖玖 | 国产精品亚洲欧美日韩一区在线 | 日韩视频国产 | 超碰免费在线观看 | 日日日色 | 狠狠婷婷综合久久久久久妖精 | 高清黄色 | 高清视频一区二区三区 |