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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MMA7455電路原理圖與單片機源程序等資料

[復制鏈接]
跳轉到指定樓層
樓主
MMA7455電路原理圖如下:


單片機源程序如下:
  1. /*
  2. * MMA7455模塊
  3. *
  4. * 用途:MMA7455模塊測試程序
  5. *
  6. * 作者                                        日期                                備注
  7. * Huafeng Lin                        2010/12/10                        新增
  8. * Huafeng Lin                        2011/08/13                        修改
  9. *
  10. */

  11. #include <reg52.h>
  12. #include <intrins.h>

  13. #define uchar unsigned char
  14. #define uint  unsigned int
  15. /***************************************************************************/
  16. /***********               單片機引腳定義                       ************/
  17. /***************************************************************************/
  18. //CS 接3.3V
  19. sbit sda=P0^6;              //I2C 數據傳送位
  20. sbit scl=P0^7;              //I2C 時鐘傳送位
  21. //
  22. sbit rs=P0^3;                                //1602RS控制位
  23. sbit rw=P0^2;                                //1602RW控制位
  24. sbit e =P0^1;                                //1602E 控制位

  25. /******************************************************************************/
  26. /**********                     數據部分                            ***********/
  27. /******************************************************************************/
  28. #define IIC_READ  0x1D      //定義讀指令
  29. #define IIC_WRITE 0x1D      //定義寫指令

  30. uchar table1[16]=" MMA7455 X= 0.00";                //1602顯示數據
  31. uchar table2[16]=" Y= 0.00 Z= 0.00";
  32. uchar table3[16]="No Find MMA7455!";
  33. uchar table4[10]="0123456789";
  34. uchar table5[8] =" MMA7455";
  35. uchar table7[16]="Value:   X=0.50 ";

  36. /**************************************************************************/
  37. /************                  各延時程序                    **************/
  38. /**************************************************************************/
  39. void iic_delay()        //5us延時
  40. {
  41.         _nop_();
  42.         _nop_();
  43.         _nop_();
  44.         _nop_();
  45. }

  46. void delay_50us(uint t)
  47. {
  48.     uchar j;
  49.         for(;t>0;t--)
  50.         for(j=19;j>0;j--);
  51. }

  52. void delay_50ms(uchar t)
  53. {
  54.     uint j;
  55.         for(;t>0;t--)
  56.         for(j=6245;j>0;j--);
  57. }

  58. /************************************************************************/
  59. /**************                  1602顯示部分           *****************/
  60. /************************************************************************/
  61. void  write_com(uchar com)           //函數功能:寫指令
  62. {
  63.   e=0;
  64.         rs=0;
  65.         rw=0;
  66.         P2=com;
  67.         delay_50us(10);
  68.         e=1;
  69.         delay_50us(20);
  70.         e=0;
  71. }

  72. void write_data(uchar dat)           //函數功能:寫數據
  73. {
  74.     e=0;
  75.         rs=1;
  76.         rw=0;
  77.         P2=dat;
  78.         delay_50us(10);
  79.         e=1;
  80.         delay_50us(20);
  81.         e=0;
  82. }

  83. void init1602(void)                           //函數功能:初始化1602
  84. {
  85.     delay_50us(300);
  86.         write_com(0x38);
  87.         delay_50us(100);
  88.         write_com(0x38);
  89.         delay_50us(100);
  90.         write_com(0x38);
  91.         write_com(0x38);
  92.         write_com(0x01);
  93.         write_com(0x01);
  94.         write_com(0x06);
  95.         write_com(0x0c);
  96. }

  97. /*********************************************************************/
  98. /**************               I2C通信部分              ***************/
  99. /*********************************************************************/
  100. void iic_start()               //函數功能:I2C通信開始
  101. {
  102.         sda=1;
  103.     iic_delay();
  104.         scl=1;
  105.     iic_delay();
  106.         sda=0;
  107.         iic_delay();       
  108. }

  109. void iic_stop()                //函數功能:I2C通信停止
  110. {
  111.         sda=0;
  112.         iic_delay();
  113.         scl=1;
  114.         iic_delay();
  115.         sda=1;
  116.         iic_delay();       
  117. }

  118. void iic_ack()                 //函數功能:I2C通信查應答位
  119. {       
  120.   sda=1;
  121.         scl=1;
  122.         iic_delay();
  123.         scl=0;          
  124. }

  125. void iic_write_byte(uchar wdata)        //函數功能:向I2C從機寫入一個字節
  126. {
  127.         uchar i,temp,temp1;
  128.        
  129.         temp1=wdata;
  130.         for(i=0;i<8;i++)
  131.         {
  132.                 scl = 0;
  133.                 iic_delay();
  134.                 temp=temp1;
  135.                 temp=temp&0x80;
  136.                 if(temp==0x80)
  137.                         sda=1;                               
  138.                 else
  139.                         sda=0;
  140.                 iic_delay();
  141.                 scl=1;
  142.                 iic_delay();
  143.                 scl=0;
  144.                 iic_delay();
  145.                 temp1=temp1<<1;                       
  146.         }
  147. }

  148. char iic_read_byte(void)        //函數功能:從I2C從機中讀出一個字節
  149. {
  150.         uchar x;
  151.         char data_data;
  152.         for(x=0;x<8;x++)
  153.         {       
  154.                 data_data=data_data<<1;
  155.                 sda=1;
  156.                 iic_delay();
  157.                 scl=0;
  158.                 iic_delay();
  159.                 scl=1;
  160.                 iic_delay();
  161.                 if(sda==1)
  162.                         data_data|=0x01;
  163.                 //else  
  164.                 //   data_data&=0xfe;
  165.         }
  166.         return data_data;
  167. }

  168. void iic_write(uchar byte_add,uchar wdata)        //函數功能:按地址寫入一字節數據
  169. {
  170.      uchar t;
  171.          t=(IIC_WRITE<<1);
  172.          iic_start();
  173.          iic_write_byte(t);
  174.          iic_ack();
  175.          iic_write_byte(byte_add);
  176.          iic_ack();
  177.          iic_write_byte(wdata);
  178.          iic_ack();
  179.          iic_stop();
  180. }

  181. char iic_read(uchar byte_add)        //函數功能:按地址讀出一字節數據
  182. {
  183.      uchar t;
  184.          char x;
  185.          t=(IIC_WRITE<<1);
  186.          iic_start();
  187.          iic_write_byte(t);
  188.          iic_ack();
  189.          iic_write_byte(byte_add);
  190.          iic_ack();
  191.          t=((IIC_READ<<1)|0x01);
  192.          iic_start();
  193.          iic_write_byte(t);
  194.          iic_ack();
  195.          x=iic_read_byte();
  196.          iic_ack();
  197.          iic_stop();
  198.          return x;
  199. }

  200. /************************************************************************/
  201. /*************               LED顯示陣列部分               **************/
  202. /************************************************************************/

  203. char self_test7455(void)                                         //函數功能:檢測7455有沒有插好
  204. {                                                                                 //          如果沒有插好,1602將會顯示
  205.         uchar j;                                                         //                         “No acceleration!"
  206.         char t;

  207.         delay_50us(10);
  208.         iic_write(0x16,0x05);
  209.         delay_50us(20);
  210.         t=iic_read(0x16);

  211.         if(t!=0x05)
  212.         {
  213.                 write_com(0x80);
  214.                 for(j=0;j<16;j++)
  215.                 {
  216.                     write_data(table3[j]);
  217.                         delay_50us(10);
  218.                 }               
  219.                 return 0;
  220.         }
  221.         return 1;
  222. }
  223. void Testinit1602()
  224. {
  225.         char  j;
  226.                 write_com(0x80);
  227.                 for(j=0;j<16;j++)
  228.                 {
  229.                     write_data(table1[j]);
  230.                         delay_50us(10);
  231.                 }
  232.                 write_com(0x80+0x40);
  233.                 for(j=0;j<16;j++)
  234.                 {
  235.                     write_data(table2[j]);
  236.                         delay_50us(10);
  237.                 }
  238. }

  239. void sendx()        //函數功能:向1602發送x軸測量數據
  240. {       
  241.         uchar x1,x2,x3,xsign;
  242.         char x;

  243.         x=iic_read(0x06);
  244.         if((x&0x80)==0x00)
  245.         {
  246.                 xsign=0x2b;        //+
  247.         }
  248.         else
  249.         {
  250.                 xsign=0x2d;        //-
  251.                 x=x-0x01;
  252.                 x=~x;
  253.         }

  254.         x1=(x/63);
  255.         x2=((x*100/63)%100)/10;
  256.         x3=(x*100/63)%10;

  257.         write_com(0x8B);
  258.         write_data(xsign);
  259.         delay_50us(10);
  260.         write_com(0x8C);
  261.         write_data(table4[x1]);
  262.         delay_50us(10);
  263.         write_com(0x8E);
  264.         write_data(table4[x2]);
  265.         delay_50us(10);
  266.         write_com(0x8F);
  267.         write_data(table4[x3]);
  268.         delay_50us(20);
  269. }

  270. void sendy()        //函數功能:向1602發送y軸測量數據
  271. {
  272.         uchar y1,y2,y3,ysign;
  273.         char y;

  274.         y=iic_read(0x07);
  275.         if((y&0x80)==0x00)
  276.         {
  277.                 ysign=0x2b;        //+
  278.         }
  279.         else
  280.         {
  281.                 ysign=0x2d;        //-
  282.                 y=y-0x01;
  283.                 y=~y;
  284.         }

  285.         y1=(y/63);
  286.         y2=((y*100/63)%100)/10;
  287.         y3=(y*100/63)%10;

  288.         write_com(0xC3);
  289.         write_data(ysign);
  290.         delay_50us(10);
  291.         write_com(0xC4);
  292.         write_data(table4[y1]);
  293.         delay_50us(10);
  294.         write_com(0xC6);
  295.         write_data(table4[y2]);
  296.         delay_50us(10);
  297.         write_com(0xC7);
  298.         write_data(table4[y3]);
  299.         delay_50us(20);
  300. }

  301. void sendz()        //函數功能:向1602發送z軸測量數據
  302. {
  303.         uchar z1,z2,z3,zsign;
  304.         char z;

  305.         z=iic_read(0x08);
  306.         if((z&0x80)==0x00)
  307.         {
  308.                 zsign=0x2b;        //+
  309.         }
  310.         else
  311.         {
  312.                 zsign=0x2d;        //-
  313.                 z=z-0x01;
  314.                 z=~z;
  315.         }

  316.         z1=(z/63);
  317.         z2=((z*100/63)%100)/10;
  318.         z3=(z*100/63)%10;

  319.         write_com(0xCB);
  320.         write_data(zsign);
  321.         delay_50us(10);
  322.         write_com(0xCC);
  323.         write_data(table4[z1]);
  324.         delay_50us(10);
  325.         write_com(0xCE);
  326.         write_data(table4[z2]);
  327.         delay_50us(10);
  328.         write_com(0xCF);
  329.         write_data(table4[z3]);
  330.         delay_50us(20);
  331. }

  332. /***********************************************************/
  333. /****************          主函數           ****************/
  334. /***********************************************************/

  335. void main()
  336. {
  337.         uchar j;

  338.         init1602();
  339.         self_test7455();

  340.         iic_write(0x10,0x15);//校正X值
  341.         iic_write(0x12,0x25);//校正Y值
  342.         iic_write(0x14,0x10);//校正Z值

  343.         delay_50ms(2);

  344.         write_com(0x80);
  345.         for(j=0;j<8;j++)
  346.         {
  347. ……………………

  348. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼



所有資料51hei提供下載:
MMA7455模塊.rar (729.26 KB, 下載次數: 16)




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本色高清 | 亚洲一区亚洲二区 | 91精品国产综合久久久密闭 | 一区二区在线看 | 日韩精品在线观看视频 | 亚洲欧美日韩精品久久亚洲区 | 亚洲一区三区在线观看 | 偷拍亚洲色图 | 国产中文在线 | 99热精品在线观看 | 青青久久久 | 亚洲免费精品一区 | 北条麻妃99精品青青久久 | 日韩欧美在线视频观看 | 亚洲精品综合 | 成人影院在线视频 | 日韩第一页 | 性天堂网| 亚洲一区不卡在线 | 免费观看黄色一级片 | 日韩在线免费观看视频 | 久久成人精品视频 | 国产精品久久久久久久久久了 | 成人精品免费 | 日韩国产一区二区 | 久久精品国产亚洲一区二区 | 国产色视频网站 | 亚洲人精品午夜 | 99亚洲精品 | 欧美一级在线 | av黄色免费| 一区二区三区免费在线观看 | 99精品视频在线观看 | 久久成人免费 | 久久99精品国产99久久6男男 | 中文字幕乱码一区二区三区 | 极品销魂美女一区二区 | 成人午夜视频在线观看 | 欧产日产国产精品视频 | 久久国产精品免费一区二区三区 | 国产精品一区二区久久久久 |