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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機驅動MMA7455源程序

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

單片機源程序如下:
  1. #include "MMA7455.H"
  2. //sbit sda=P2^3;              //I2C 數據傳送位
  3. //sbit scl=P2^4;              //I2C 時鐘傳送位
  4. unsigned char sign_flag;  //輸出數據正負標記位
  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. 模式設置寄存器尋址
  11. while(IIC_respons());
  12. IIC_writebyte(MMA7455_2G_Measurement_Mode);         //3. 模式寄存器數據寫入
  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. 模式設置寄存器尋址
  19. while(IIC_respons());
  20. IIC_writebyte(MMA7455_2G_Measurement_Mode);         //3. 模式寄存器數據寫入
  21. while(IIC_respons());
  22. IIC_stop();

  23. }
  24. void IIC_MMA7455_writedata(uchar byte_add,uchar wdata)//函數功能:按地址寫入一字節數據
  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)                   //函數功能:按地址讀出一字節數據
  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. }
復制代碼

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


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | aaaaaaa片毛片免费观看 | 免费黄色a视频 | 欧美夜夜 | 亚洲欧美综合精品久久成人 | 欧产日产国产精品国产 | 久久这里只有精品首页 | 国产精品久久久久一区二区三区 | 日韩精品一区二区三区视频播放 | 国内精品视频在线 | 久久久精品一区 | 精品伦精品一区二区三区视频 | 日韩精品一区二区三区四区 | 在线国产99 | 久久久www成人免费无遮挡大片 | 日韩一区二区三区在线视频 | 国产精品视频网 | 亚洲国产成人精品女人 | 国产精品久久福利 | 91私密视频| 欧美极品在线观看 | 国外成人在线视频网站 | 国产在线二区 | 亚洲精品在线免费观看视频 | 亚洲天堂中文字幕 | 国产精品毛片一区二区三区 | 欧美 日韩 在线播放 | 亚洲精品久久久久久久不卡四虎 | 精品国产一级片 | 伊人中文字幕 | 中文字幕亚洲一区二区三区 | 日韩a在线 | 久久国内精品 | 91天堂网 | 亚洲一区二区在线视频 | 一级黄色影片在线观看 | 四虎海外 | 日韩在线视频观看 | 欧美 日韩 亚洲91麻豆精品 | 久久久av| 99久久视频 |