欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: ADXL345單片機計步器程序 [打印本頁]

作者: 51黑ele    時間: 2016-5-11 00:00
標題: ADXL345單片機計步器程序

adxl345芯片實現(xiàn)的計步器,顯示用的是1602液晶屏,下面可以下載完整的程序.


完整的源代碼下載: adxl345計步器程序設(shè)計.rar (39.38 KB, 下載次數(shù): 760)

部分源碼預(yù)覽:
程序1:1602液晶顯示的adxl345加速度 計步器版本:
  1. #include<reg52.h>
  2. #include<math.h>
  3. #include"1602.h"
  4. #include  <INTRINS.H>

  5. #define        SlaveAddress   0xA6          //1010 0110    定義器件在IIC總線中的從地址,根據(jù)ALT  ADDRESS地址引腳不同修改
  6.                               //ALT  ADDRESS引腳接地時地址為0xA6,接電源時地址為0x3A 0011 1010
  7. sbit sclk=P0^0;
  8. sbit sda=P0^1;

  9. float  dis_datax,dis_datay,dis_dataz,acc,acc1=1000;
  10. uchar BUF[8];
  11. uchar wan, qian, bai, shi ,ge,flag,miao,miao1,n;
  12. uint count;

  13. void conversion(uint temp_data)  
  14. {  
  15.     wan=temp_data/10000+0x30 ;
  16.     temp_data=temp_data%10000;   //取余運算
  17.         qian=temp_data/1000+0x30 ;
  18.     temp_data=temp_data%1000;    //取余運算
  19.     bai=temp_data/100+0x30   ;
  20.     temp_data=temp_data%100;     //取余運算                                 -e----------------eee-e
  21.     shi=temp_data/10+0x30    ;
  22.     temp_data=temp_data%10;      //取余運算
  23.     ge=temp_data+0x30;        
  24. }
  25. void delay6us()                 //6us延時函數(shù)
  26. {

  27.         _nop_();        _nop_();          



  28. }

  29. void delay_ms(uint n)       //N ms延時函數(shù)
  30. {
  31.         uint x,y;
  32.         for(x=n;x>0;x--)
  33.                 for(y=110;y>0;y--);       
  34. }

  35.                                                                                                                                                                 /////

  36. void ADXL345_Start()
  37. {
  38.     sda = 1;                    //拉高數(shù)據(jù)線
  39.     sclk = 1;                    //拉高時鐘線
  40.     delay6us();                 //延時
  41.     sda = 0;                    //產(chǎn)生下降沿
  42.     delay6us();                 //延時
  43.     sclk = 0;                    //拉低時鐘線
  44. }

  45. void ADXL345_Stop()
  46. {
  47.     sda = 0;                    //拉低數(shù)據(jù)線
  48.     sclk = 1;                    //拉高時鐘線
  49.     delay6us();                 //延時
  50.     sda = 1;                    //產(chǎn)生上升沿
  51.     delay6us();                 //延時
  52. }

  53. void ADXL345_SendACK(bit ack)
  54. {
  55.     sda = ack;                  //寫應(yīng)答信號
  56.     sclk = 1;                    //拉高時鐘線
  57.     delay6us();                 //延時
  58.     sclk = 0;                    //拉低時鐘線
  59.     delay6us();                 //延時
  60. }


  61. bit ADXL345_RecvACK()
  62. {
  63.     sclk = 1;                    //拉高時鐘線
  64.     delay6us();                 //延時
  65.     CY = sda;                   //讀應(yīng)答信號
  66.     sclk = 0;                    //拉低時鐘線
  67.     delay6us();                 //延時

  68.     return CY;
  69. }


  70. void ADXL345_SendByte(uchar dat)
  71. {
  72.     uchar i;
  73. //        sclk = 0;                //拉低時鐘線

  74.     for (i=0; i<8; i++)         //8位計數(shù)器
  75.     {
  76.         dat <<= 1;              //移出數(shù)據(jù)的最高位
  77.         sda = CY;               //送數(shù)據(jù)口
  78.         sclk = 1;                //拉高時鐘線
  79.         delay6us();             //延時
  80.         sclk = 0;                //拉低時鐘線
  81.         delay6us();             //延時
  82.     }
  83.     ADXL345_RecvACK();
  84. }


  85. uchar ADXL345_RecvByte()
  86. {
  87.     uchar i;
  88.     uchar dat = 0;

  89.     sda = 1;
  90.         //        write_com(0x80);
  91.                    //使能內(nèi)部上拉,準備讀取數(shù)據(jù),
  92.     for (i=0; i<8; i++)         //8位計數(shù)器
  93.     {
  94.         dat <<= 1;
  95.         sclk = 1;                //拉高時鐘線
  96.         delay6us();             //延時
  97.         dat |= sda;             //讀數(shù)據(jù)               
  98.         sclk = 0;                //拉低時鐘線
  99.         delay6us();             //延時

  100.     }


  101.     return dat;
  102. }

  103. void Single_Write_ADXL345(uchar REG_Address,uchar REG_data)
  104. {
  105.     ADXL345_Start();                  //起始信號
  106.     ADXL345_SendByte(SlaveAddress);   //發(fā)送設(shè)備地址+寫信號
  107.     ADXL345_SendByte(REG_Address);    //內(nèi)部寄存器地址,請參考中文pdf22頁
  108.     ADXL345_SendByte(REG_data);       //內(nèi)部寄存器數(shù)據(jù),請參考中文pdf22頁
  109.     ADXL345_Stop();                   //發(fā)送停止信號
  110. }

  111. uchar Single_Read_ADXL345(uchar REG_Address)
  112. {
  113.         uchar REG_data;
  114.     ADXL345_Start();            
  115.        
  116.        
  117.        
  118.                       //起始信號
  119.     ADXL345_SendByte(SlaveAddress);           //發(fā)送設(shè)備地址+寫信號
  120.     ADXL345_SendByte(REG_Address);                   //發(fā)送存儲單元地址,從0開始       
  121.     ADXL345_Start();                          //起始信號
  122.     ADXL345_SendByte(SlaveAddress+1);         //發(fā)送設(shè)備地址+讀信號
  123.     REG_data=ADXL345_RecvByte();              //讀出寄存器數(shù)據(jù)
  124.         ADXL345_SendACK(1);   
  125.         ADXL345_Stop();                           //停止信號
  126.     return REG_data;
  127. }

  128. void Multiple_read_ADXL345()
  129. {   
  130.         uchar i;
  131.     ADXL345_Start();                          //起始信號
  132.     ADXL345_SendByte(SlaveAddress);           //發(fā)送設(shè)備地址+寫信號           1010 0110
  133.     ADXL345_SendByte(0x32);                   //發(fā)送存儲單元地址,從0x32開始 0011 0010
  134.     ADXL345_Start();                          //起始信號
  135.     ADXL345_SendByte(SlaveAddress+1);         //發(fā)送設(shè)備地址+讀信號           1010 0111
  136.         for (i=0; i<6; i++)                      //連續(xù)讀取6個地址數(shù)據(jù),存儲中BUF
  137.     {
  138.         BUF[i] = ADXL345_RecvByte();          //BUF[0]存儲0x32地址中的數(shù)據(jù)
  139.         if(i == 5)        ADXL345_SendACK(1);       //最后一個數(shù)據(jù)需要回NOACK
  140.         else        ADXL345_SendACK(0);           //回應(yīng)ACK
  141.     }
  142.     ADXL345_Stop();                          //停止信號
  143.     delay_ms(10);
  144. }

  145. void Init_ADXL345()           //初始化ADXL345,根據(jù)需要請參考pdf進行修改***********************
  146. {
  147. //        delay(500);                                          //上電延時
  148.    Single_Write_ADXL345(0x31,0x2B);   //測量范圍,正負16g,13位模式
  149.    Single_Write_ADXL345(0x2C,0x06);   //0000 0110速率設(shè)定為6.25 參考pdf13頁
  150.    Single_Write_ADXL345(0x2D,0x08);   //選擇電源模式   參考pdf24頁
  151.    Single_Write_ADXL345(0x2E,0x80);   //使能 DATA_READY 中斷
  152.    Single_Write_ADXL345(0x1E,0x00);   //X 偏移量 根據(jù)測試傳感器的狀態(tài)寫入pdf29頁
  153.    Single_Write_ADXL345(0x1F,0x00);   //Y 偏移量 根據(jù)測試傳感器的狀態(tài)寫入pdf29頁
  154.    Single_Write_ADXL345(0x20,0x05);   //Z 偏移量 根據(jù)測試傳感器的狀態(tài)寫入pdf29頁
  155. }


  156. float operation(uchar starti)
  157. {
  158.         float  dis_data        ;
  159.         int temp;
  160.         temp=(BUF[starti+1]<<8)+BUF[starti];  //合成數(shù)據(jù)
  161. //        write_com(0x80);  
  162.         if(temp<0)
  163.         {
  164.                 temp=-temp;
  165.                 flag=1;

  166.         }
  167.         else flag=0; //顯示空格

  168.     dis_data=(float)temp*3.9;  //計算數(shù)據(jù)和顯示,查考ADXL345快速入門第4頁
  169.   return dis_data;
  170. }
  171. void display_x()         //顯示x軸
  172. {   
  173.    conversion(dis_datax);          //轉(zhuǎn)換出顯示需要的數(shù)據(jù)
  174.    
  175.         write_com(0x80);
  176.         if(flag==0)        write_dat(' ');
  177.         else write_dat('-');
  178.         write_dat('X');
  179.         write_dat(':');
  180.         write_dat(qian);

  181.         write_dat('.');
  182.         write_dat(bai);
  183.         write_dat(shi);
  184.         write_dat('g');       
  185. }

  186. void display_y()        //顯示y軸
  187. {   
  188.    
  189.   // dis_datay=operation(2);
  190.     conversion(dis_datay);          //轉(zhuǎn)換出顯示需要的數(shù)據(jù)
  191.         write_com(0x80+8);
  192.         if(flag==0)         write_dat(' ');
  193.         else write_dat('-');
  194.         write_dat('Y');
  195.         write_dat(':');
  196.         write_dat(qian);

  197.         write_dat('.');
  198.         write_dat(bai);
  199.         write_dat(shi);
  200.         write_dat('g');

  201. }

  202. void display_z()           //顯示z軸
  203. {  

  204. //  dis_dataz=operation(4);
  205.     conversion(dis_dataz);           //轉(zhuǎn)換出顯示需要的數(shù)據(jù)
  206.         write_com(0x80+0x40);
  207.         if(flag==0)                  write_dat(' ');
  208.         else write_dat('-');
  209.         write_dat('Z');
  210.         write_dat(':');
  211.         write_dat(qian);

  212.         write_dat('.');
  213.         write_dat(bai);
  214.         write_dat(shi);
  215.         write_dat('g');
  216. }

  217. void countstep()
  218. {
  219.         dis_datax=operation(0);
  220.         dis_datay=operation(2);
  221.    dis_dataz=operation(4);

  222.         acc1=acc;
  223.         acc=sqrt(dis_dataz*dis_dataz+dis_datax*dis_datax+dis_datay*dis_datay)  ;
  224.         if(acc1<990&&acc>1010)
  225. //        if(fabs(acc-acc1)>140&&miao1!=miao)

  226.         {
  227.         //        miao1=miao;
  228.                 count++;
  229.         }
  230.         write_com(0x80);
  231.         conversion(acc);
  232.         write_dat('A');
  233.         write_dat(':');
  234.         write_dat(qian);

  235.         write_dat('.');
  236.         write_dat(bai);
  237.         write_dat(shi);
  238.         write_dat('g');



  239.         write_com(0x80+0x40);
  240.         write_dat('C');
  241.         write_dat('o');
  242.         write_dat('u');
  243.         write_dat('n');
  244.         write_dat('t');
  245.         write_dat(':');
  246.         write_dat(count/100+0x30);
  247.         write_dat((count%100)/10+0x30);
  248.         write_dat(count%10+0x30);


  249. }
  250. void ADXL345_Measure()                         //測量角度值并顯示
  251. {
  252.         Multiple_read_ADXL345();     //連續(xù)讀出數(shù)據(jù),存儲在BUF中
  253. //        display_x();                 //---------顯示X軸
  254. //        display_y();                 //---------顯示Y軸
  255. //        display_z();                 //---------顯示Z軸       
  256.         countstep();

  257. }



  258. void main()
  259. {
  260.         init();
  261.         Init_ADXL345();
  262.         while(1)
  263.         {
  264.         ADXL345_Measure();
  265.            }       
  266. }
復(fù)制代碼

程序2:ds1302+5110液晶顯示的adxl345加速度 計步器版本:http://m.raoushi.com/bbs/dpj-50084-1.html



作者: 陳念陽    時間: 2016-5-11 11:08
我也想做,希望得到幫助
作者: 克羅弗多    時間: 2016-5-12 12:51
感謝樓主分享!
作者: 愛玩單片機    時間: 2016-5-12 21:21
下來學(xué)習(xí)adxl345那里可以買到
作者: lewinxu    時間: 2016-5-15 13:13
感謝分享

作者: 無敵的饅頭    時間: 2016-5-20 14:31
感謝分享
作者: 無敵的饅頭    時間: 2016-5-20 14:31
正是急需的時候 謝謝大神分享
作者: niso    時間: 2016-7-22 13:51
感謝分享!!
作者: wutong    時間: 2016-8-26 00:56
感謝分享!找了好久,還是論壇有貨
作者: qq627472819    時間: 2016-8-30 20:23
好東西!!!!謝謝
作者: keepstudying    時間: 2016-10-5 17:15
謝謝樓主
作者: fresh    時間: 2016-10-17 21:57
這個壓縮包有仿真圖嗎

作者: fresh    時間: 2016-10-19 18:53
可以給個仿真圖嗎
作者: fresh    時間: 2016-10-19 22:32
void conversion(uint temp_data)  
{  
    wan=temp_data/10000+0x30 ;
    temp_data=temp_data%10000;   //取余運算
        qian=temp_data/1000+0x30 ;
    temp_data=temp_data%1000;    //取余運算
    bai=temp_data/100+0x30   ;
    temp_data=temp_data%100;     //取余運算                                 -e----------------eee-e
    shi=temp_data/10+0x30    ;
    temp_data=temp_data%10;      //取余運算
    ge=temp_data+0x30;         
}
為什么加0x30
作者: qq779089973    時間: 2016-11-24 23:49
正需要呢  謝謝分享
作者: zhahl    時間: 2016-11-29 22:07
大神,能給個原圖嗎?
作者: zhahl    時間: 2016-11-29 22:09
大神能給個元器件清單嗎?
作者: lobagoo    時間: 2016-12-3 12:13
求全部程序

作者: 大小管    時間: 2016-12-12 17:54
感謝分享
作者: 小時候可花    時間: 2016-12-15 00:02
不錯不錯 正想做這個呢
作者: 小時候可花    時間: 2016-12-15 00:13
Tbucuo 不錯  可是 我燒錄不行學(xué)習(xí)學(xué)習(xí)吧
作者: 慢慢2    時間: 2017-2-28 19:50
正需要
作者: zhangtaoopen    時間: 2017-2-28 22:09
請問記步數(shù)原理是什么,要怎么做才能記一步
作者: qiang275129042    時間: 2017-3-2 09:32
感謝分享
作者: 您的照片    時間: 2017-3-10 10:35

 感謝樓主分享!

作者: 您的照片    時間: 2017-3-11 15:23
謝謝大神的分享
作者: ygxdh    時間: 2017-4-6 21:44
謝謝大神
作者: 得不到    時間: 2017-4-9 20:33
準備學(xué)習(xí)學(xué)習(xí)
作者: xiaocaiyimei    時間: 2017-4-11 20:19
fresh 發(fā)表于 2016-10-19 22:32
void conversion(uint temp_data)  
{  
    wan=temp_data/10000+0x30 ;

0x30的ASCII碼是0
作者: xiaocaiyimei    時間: 2017-4-11 20:23
非常感謝分享!
作者: zhulu1990    時間: 2017-4-13 15:44

感謝分享
作者: 此生休    時間: 2017-4-15 14:14
感謝分享
作者: lmlssg    時間: 2017-4-22 15:24
非常感謝分享!
作者: 鎮(zhèn)魂調(diào)    時間: 2017-5-5 10:11
請問樓主ADXL345有沒仿真?是用什么代替的?
作者: discover123    時間: 2017-5-8 21:36
zhahl 發(fā)表于 2016-11-29 22:07
大神,能給個原圖嗎?

你用哪種軟件進行仿真?
作者: boen    時間: 2017-5-12 14:28
請問stc板子 怎么修改管腳
作者: reboot    時間: 2017-5-12 19:08
正是急需的時候 謝謝大神分享!!!!
作者: wangxia    時間: 2017-6-1 16:03
大神  怎么獲得黑幣
作者: wangxia    時間: 2017-6-1 16:04
小時候可花 發(fā)表于 2016-12-15 00:13
Tbucuo 不錯  可是 我燒錄不行學(xué)習(xí)學(xué)習(xí)吧

加油加油加油加油
作者: wangxia    時間: 2017-6-1 16:05
lobagoo 發(fā)表于 2016-12-3 12:13
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

我也想要知道全部的  你有嗎
作者: 清風(fēng)1234    時間: 2017-6-1 16:06
很想下載,但是下載不了
作者: wangxia    時間: 2017-6-1 16:18
用的是lcd1602顯示屏嗎
作者: huanx    時間: 2017-7-10 18:12
這個可以!是個參考
作者: lilanzl    時間: 2017-12-5 10:43
感謝分享!
作者: 曼殊姓蘇    時間: 2017-12-19 14:41
有個小問題,這個程序燒進單片機后液晶屏為什么沒亮呢?
作者: 12.22    時間: 2017-12-22 15:34
感謝大神分享
作者: ssk1va    時間: 2018-3-15 09:56
急需,感謝分享
作者: AAA電子    時間: 2018-3-28 07:21
正需要,試試可以不
作者: ccccy007    時間: 2018-4-16 09:33
下載下來是假的 不要被騙了
作者: djgogo    時間: 2018-4-20 16:27
請問一個程序是基于51還是52的呢?
作者: djgogo    時間: 2018-4-24 11:17
敢問大神用的可是SPI通信方式/

作者: 空小白格    時間: 2018-5-7 17:24
boen 發(fā)表于 2017-5-12 14:28
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

你的STC板子的管腳怎么修改的

作者: 楓林谷    時間: 2018-7-6 17:10
我這個也是在51上找的,但是只亮屏,不顯示

adxl345.rar

133.75 KB, 下載次數(shù): 12, 下載積分: 黑幣 -5


作者: hwasun    時間: 2019-2-15 20:31
感謝樓主分享!
作者: 我不知道-    時間: 2019-3-30 21:59
鎮(zhèn)魂調(diào) 發(fā)表于 2017-5-5 10:11
**** 作者被禁止或刪除 內(nèi)容自動屏蔽 ****

同問,現(xiàn)在擬解決了嗎
作者: 25Hzzz    時間: 2019-4-3 16:41
很不錯,收藏了
作者: 15650170171    時間: 2019-4-12 15:43
fresh 發(fā)表于 2016-10-19 22:32
void conversion(uint temp_data)  
{  
    wan=temp_data/10000+0x30 ;

0x30對應(yīng)字符'0'
作者: 15650170171    時間: 2019-4-12 15:44
感謝大神分享

作者: gyt    時間: 2019-4-15 13:07
感謝分享,已經(jīng)在測試了
作者: 劉敏夫    時間: 2019-5-8 17:51
fresh 發(fā)表于 2016-10-19 18:53
可以給個仿真圖嗎

adxl345在仿真里庫里找不到
作者: DZD    時間: 2019-5-13 10:12
acc=sqrt(dis_dataz*dis_dataz+dis_datax*dis_datax+dis_datay*dis_datay)  ;這是什么意思

作者: DZD    時間: 2019-5-13 10:45
acc1=acc;
        acc=sqrt(dis_dataz*dis_dataz+dis_datax*dis_datax+dis_datay*dis_datay)  ;
        if(acc1<990&&acc>1010)
什么意思

作者: zctwss321    時間: 2019-5-13 14:41
硬件連接圖呢?拍幾張啊
作者: fy12    時間: 2019-12-3 19:40
想要一個基于mpu6050的計步程序
作者: 王超c    時間: 2020-3-4 16:29
主函數(shù)空?

作者: LISIQI    時間: 2021-5-12 14:30
Proteus里面找不到ADXL怎么辦
作者: 小草半年    時間: 2022-3-31 12:52
感謝分享!找了好久,還是論壇有貨
作者: zw8957    時間: 2022-4-24 14:01
LISIQI 發(fā)表于 2021-5-12 14:30
Proteus里面找不到ADXL怎么辦

同問,這個仿真怎么解決啊?




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1