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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

adxl345加速度 計步器 ds1302+5110液晶顯示 c8051單片機控制

  [復制鏈接]
跳轉到指定樓層
樓主


計步器程序下載(用c8051f單片機ds1302時間芯片和5110液晶屏顯示):
adxl345加速度計ds1302 5110液晶和51單片機實現的簡單計步器.zip (90.38 KB, 下載次數: 214)

51單片機的版本:http://www.zg4o1577.cn/bbs/dpj-50085-1.html
程序2:ds1302+5110液晶顯示的adxl345加速度 計步器版本用的c8051f單片機芯片:
  1. #include <c8051f330.h>
  2. #include <string.h>
  3. #include  <intrins.h>
  4. //===============================================================
  5. #include "sys.h"
  6. #include "5110.h"
  7. #include "adxl345.h"
  8. #include "ds1302.h"
  9. /*==============================================================*/
  10. sbit K1=P1^3;
  11. sbit K2=P1^2;
  12. sbit speak=P0^5;

  13. unsigned char ADXL345_FLAG=0;
  14. unsigned char START_FLAG=0;
  15. unsigned char number=0;

  16. unsigned char idata bad_flag[3];
  17. unsigned int idata array0[3]={1,1,1};
  18. unsigned int idata array1[3]={1,1,1};
  19. unsigned int idata array2[3]={0,0,0};
  20. unsigned int idata adresult[3];
  21. unsigned int idata max[3]={0,0,0};
  22. unsigned int idata min[3]={1000,1000,1000};
  23. unsigned int idata dc[3]={500,500,500};
  24. unsigned int idata vpp[3]={30,30,30};        
  25. unsigned int idata precision[3]={5,5,5};        
  26. unsigned int idata old_fixed[3];
  27. unsigned int idata new_fixed[3];
  28. unsigned int idata STEPS=0;
  29. unsigned int idata time=0;
  30.                                                                                 
  31. float xdata speed=0;
  32. float xdata dist=0;
  33. float xdata kalul=0;

  34. SYSTEMTIME CurrentTime;
  35. //獲取時鐘函數
  36. void get_clock(void)
  37. {
  38.         DS1302_GetTime(&CurrentTime);
  39.         DateToStr(&CurrentTime);
  40.         TimeToStr(&CurrentTime);
  41. }
  42. //時鐘顯示函數
  43. void show_time(void)
  44. {
  45.         Set_R_C_5110(0,12);
  46.         Write_String_5110(CurrentTime.DateString);
  47.         Set_R_C_5110(0,60);
  48.         Write_String_5110("---");
  49.         Write_Char_5110(CurrentTime.DateString[9]);
  50.         
  51.         Set_R_C_5110(1,0);
  52.         Write_String_5110(CurrentTime.TimeString);
  53. }
  54. //BCD碼轉化成十進制碼
  55. uchar zh(uchar temp)
  56. {
  57.     temp=((temp&0x70)>>4)*10 + (temp&0x0F);
  58.         return temp;
  59. }
  60. void first_picture(void)
  61. {
  62.     DS1302_SetTime(DS1302_YEAR,12);
  63.         DS1302_SetTime(DS1302_MONTH,1);
  64.         DS1302_SetTime(DS1302_DAY,11);
  65.         DS1302_SetTime(DS1302_WEEK,5);
  66.         DS1302_SetTime(DS1302_HOUR,12);
  67.         DS1302_SetTime(DS1302_MINUTE,12);
  68.         DS1302_SetTime(DS1302_SECOND,12);
  69.         Set_R_C_5110(0,0);
  70.         Write_String_5110("20");
  71.                
  72.         Set_R_C_5110(1,54);
  73.         Write_String_5110("SET- ");
  74.         
  75.         Set_R_C_5110(2,0);
  76.         Write_String_5110("B=00000 b");
  77.         
  78.     Set_R_C_5110(3,0);
  79.         Write_String_5110("L=00000 m");
  80.         
  81.         Set_R_C_5110(4,0);
  82.         Write_String_5110("S=00.00 m/s");
  83.         
  84.         Set_R_C_5110(5,0);
  85.         Write_String_5110("C=00.00 c/kg/h");         
  86. }

  87. void delay_ms(uint n)
  88. {
  89.     uint i,j;
  90.     for(i=0;i<n;i++)
  91.       for(j=0;j<1000;j++);
  92. }
  93. /*------------------------------------------------------------------------------------------------------------------------
  94. *Name:                 step_counter()
  95. *Function:        實現Pedometer的基本算法.
  96. *Input:                void
  97. *Output:         void
  98. *------------------------------------------------------------------------------------------------------------------------*/
  99. void step_counter(void)
  100. {
  101.         static uchar sampling_counter=0;
  102.         uchar jtemp;

  103.         ADXL345_FLAG=0;
  104.         Multiple_read_ADXL345();    //連續讀出數據,存儲在BUF中
  105.         //------------------------------------------采樣濾波----------------------//
  106.         for(jtemp=0;jtemp<=2;jtemp++)
  107.         {               
  108.                 array2[jtemp]=array1[jtemp];
  109.                 array1[jtemp]=array0[jtemp];                        
  110.                    array0[jtemp]=BUF[2*jtemp]+(BUF[2*jtemp+1]<<8);
  111.                   
  112.                    adresult[jtemp]=array0[jtemp]+array1[jtemp]+array2[jtemp];
  113.                    adresult[jtemp]=adresult[jtemp]/3;
  114.                 if(adresult[jtemp]>max[jtemp])               {max[jtemp]=adresult[jtemp];}
  115.                 if(adresult[jtemp]<min[jtemp])               {min[jtemp]=adresult[jtemp];}
  116.         }
  117.           sampling_counter=sampling_counter+1;
  118.         //----------------------------------計算動態門限和動態精度-----------------------//
  119.     if(sampling_counter>=50)
  120.     {               
  121.               sampling_counter=0;                        
  122.                 for(jtemp=0;jtemp<=2;jtemp++)
  123.                 {
  124.                         vpp[jtemp]=max[jtemp]-min[jtemp];
  125.                 dc[jtemp] =min[jtemp]+(vpp[jtemp]>>1);
  126.                         max[jtemp]=0;
  127.                 min[jtemp]=1023;
  128.                         bad_flag[jtemp]=0;
  129.                         if(vpp[jtemp]>=160)
  130.                         {
  131.                                 precision[jtemp]=vpp[jtemp]/32; //8
  132.                         }
  133.                 else if((vpp[jtemp]>=50)&& (vpp[jtemp]<160))            
  134.                         {
  135.                                 precision[jtemp]=4;
  136.                         }
  137.                        else if((vpp[jtemp]>=15) && (vpp[jtemp]<50))  
  138.             {
  139.                                 precision[jtemp]=3;
  140.                         }                          
  141.                         else
  142.                        {
  143.                           precision[jtemp]=2;
  144.                     bad_flag[jtemp]=1;
  145.                 }
  146.                 }
  147.           }               
  148.         //--------------------------線性移位寄存器--------------------------------------
  149.         for(jtemp=0;jtemp<=2;jtemp++)
  150.         {
  151.                 old_fixed[jtemp]=new_fixed[jtemp];

  152.             if(adresult[jtemp]>=new_fixed[jtemp])                        
  153.             {   
  154.                      if((adresult[jtemp]-new_fixed[jtemp])>=precision[jtemp])   {new_fixed[jtemp]=adresult[jtemp];}
  155.             }
  156.             else if(adresult[jtemp]<new_fixed[jtemp])
  157.                     {   
  158.                        if((new_fixed[jtemp]-adresult[jtemp])>=precision[jtemp])   {new_fixed[jtemp]=adresult[jtemp];}
  159.             }
  160.         }
  161.         //------------------------- 動態門限判決 ----------------------------------
  162.         if((vpp[0]>=vpp[1])&&(vpp[0]>=vpp[2]))
  163.         {
  164.                 if((old_fixed[0]>=dc[0])&&(new_fixed[0]<dc[0])&&(bad_flag[0]==0))        
  165.                 {
  166.                         STEPS=STEPS+1;
  167.                 }
  168.         }
  169.         else if((vpp[1]>=vpp[0])&&(vpp[1]>=vpp[2]))
  170.         {
  171.                 if((old_fixed[1]>=dc[1])&&(new_fixed[1]<dc[1])&&(bad_flag[1]==0))        
  172.                 {
  173.                         STEPS=STEPS+1;
  174.                 }
  175.         }
  176.         else if((vpp[2]>=vpp[1])&&(vpp[2]>=vpp[0]))
  177.         {
  178.                 if((old_fixed[2]>=dc[2])&&(new_fixed[2]<dc[2])&&(bad_flag[2]==0))        
  179.                 {
  180.                         STEPS=STEPS+1;
  181.                 }
  182.         }
  183. }
  184. //鍵盤掃描
  185. void key_scan(void)
  186. {
  187.         uchar temp=0;
  188.         if(K1==0)      //功能選擇功能
  189.         {
  190.             delay_ms(50);
  191.                 speak=0;
  192.                 delay_ms(10);
  193.                 speak=1;
  194.                 number++;
  195.                 if(number>8)  number=0;
  196.                 if(number!=1)
  197.                 {
  198.                     START_FLAG=0;
  199.                     Write_Char_5110_rc(2,78,'N');
  200.                 }                  
  201.                 if(number==0)   Write_Char_5110_rc(1,78,' ');
  202.                 else if(number==1)   Write_Char_5110_rc(1,78,'J');
  203.                 else if(number==2)   Write_Char_5110_rc(1,78,'S');
  204.                 else if(number==3)   Write_Char_5110_rc(1,78,'M');
  205.                 else if(number==4)   Write_Char_5110_rc(1,78,'H');
  206.                 else if(number==5)   Write_Char_5110_rc(1,78,'W');
  207.                 else if(number==6)   Write_Char_5110_rc(1,78,'D');
  208.                 else if(number==7)   Write_Char_5110_rc(1,78,'Y');
  209.                 else if(number==8)   Write_Char_5110_rc(1,78,'N');
  210.                 while(K1==0);
  211.         }
  212.         if(K2==0)           //確定、調節按鍵
  213.         {
  214.             delay_ms(50);
  215.                 switch(number)
  216.                 {
  217.                     case 1:                              //計步器
  218.                                   if(START_FLAG==1)   
  219.                                   {
  220.                                       START_FLAG=0;
  221.                                           speak=0;
  222.                                           delay_ms(10);
  223.                                           speak=1;
  224.                                           Write_Char_5110_rc(2,78,'N');
  225.                                           dist=STEPS*0.5;            //路程
  226.                                           speed=dist/time;           //速度
  227.                                           kalul=1.25*speed*3.6;      //卡路里   
  228.                                           
  229.                                           Write_variable_5110(3,12,dist);
  230.                               Write_variable_5110_dian(4,12,speed*100);
  231.                               Write_variable_5110_dian(5,12,kalul*100);
  232.                                           
  233.                                           STEPS=0;
  234.                                           time=0;
  235.                                   }
  236.                                   else
  237.                                   {
  238.                                       START_FLAG=1;
  239.                                           speak=0;
  240.                                           delay_ms(10);
  241.                                           speak=1;
  242.                                           Write_Char_5110_rc(2,78,'Y');
  243.                                           Write_variable_5110(3,12,0);
  244.                               Write_variable_5110_dian(4,12,0);
  245.                               Write_variable_5110_dian(5,12,0);
  246.                                   }            
  247.                                   break;
  248.                         case 2:
  249.                               temp=Read1302(DS1302_SECOND);  //讀取秒數
  250.                                   temp=zh(temp);
  251.                                   temp=temp+1;  //秒數加1
  252.                                   if(temp>59)   //超過59秒,清零
  253.                               temp=0;
  254.                                   DS1302_SetTime(DS1302_SECOND,temp);                                                                  
  255.                                   break;
  256.                         case 3:
  257.                               temp=Read1302(DS1302_MINUTE);  //讀取分數
  258.                                   temp=zh(temp);
  259.                                   temp=temp+1;  //分數加1
  260.                                   if(temp>59)          //超過59分,清零
  261.                                   temp=0;
  262.                                   DS1302_SetTime(DS1302_MINUTE,temp);
  263.                                   break;
  264.                         case 4:
  265.                               temp=Read1302(DS1302_HOUR);    //讀取小時數
  266.                                   temp=zh(temp);
  267.                                   temp=temp+1;  //小時數加1
  268.                                   if(temp>23)          //超過23小時,清零
  269.                                   temp=0;
  270.                                   DS1302_SetTime(DS1302_HOUR,temp);
  271.                                   break;
  272.                         case 5:
  273.                               temp=Read1302(DS1302_WEEK);    //讀取星期數
  274.                                   temp=zh(temp);
  275.                                   temp=temp+1;  //星期數加1
  276.                                   if(temp>7)  
  277.                                   temp=1;
  278.                                   DS1302_SetTime(DS1302_WEEK,temp);
  279.                                   break;
  280.                         case 6:
  281.                               temp=Read1302(DS1302_DAY);     //讀取日數
  282.                                   temp=zh(temp);
  283.                                   temp=temp+1;  //日數加1
  284.                                   if(temp>31)
  285.                                   temp=1;
  286.                                   DS1302_SetTime(DS1302_DAY,temp);
  287.                                   break;
  288.                         case 7:
  289.                               temp=Read1302(DS1302_MONTH);   //讀取月數
  290.                                   temp=zh(temp);
  291.                                   temp=temp+1;  //月數加1
  292.                                   if(temp>12)
  293.                                   temp=1;
  294.                                   DS1302_SetTime(DS1302_MONTH,temp);
  295.                                   break;
  296.                         case 8:
  297.                               temp=Read1302(DS1302_YEAR);    //讀取年數
  298.                                   temp=zh(temp);
  299.                                   temp=temp+1;                   //年數加1
  300.                                   if(temp>15)
  301.                                   temp=0;
  302.                                   DS1302_SetTime(DS1302_YEAR,temp);
  303.                                   break;
  304.                         default:break;
  305.                 }
  306.                 while(K2==0);
  307.         }
  308. }
  309. void main(void)
  310. {
  311.         Init_Device();     //單片機初始化
  312.     Init_5110();       //液晶初始化
  313.     Clear_5110();      //液晶清屏

  314.         Init_ADXL345();    //加速度模塊初始化
  315.         Initial_DS1302();  //時鐘芯片初始化
  316.         first_picture();   //液晶界面初顯示
  317.       
  318.     while(1)
  319.     {
  320.         //日期顯示開始
  321.         get_clock();
  322.             show_time();
  323.             //日期顯示結束
  324.                 //鍵盤掃描
  325.                 key_scan();
  326.                 //計步器工作
  327.                 if(ADXL345_FLAG==1 && START_FLAG==1)
  328.             {
  329.                     ADXL345_FLAG=0;
  330.                         step_counter();
  331.                         Write_variable_5110(2,12,STEPS);
  332.                 }
  333.     }
  334. }
  335. void timer0(void) interrupt 1    //約0.02s 進一次中斷
  336. {
  337.     static uchar cnt=0,cnt1=0;
  338.     TL0=0X96;
  339.         TH0=0Xc3;
  340.         cnt++;
  341.         cnt1++;
  342.         if(cnt>=10)
  343.         {
  344.             ADXL345_FLAG=1;
  345.                 cnt=0;
  346.         }
  347.         if(START_FLAG==1)
  348.         {
  349.             if(cnt1>=50)
  350.                 {
  351.                     cnt1=0;
  352.                         time++;
  353.                 }
  354.         }
  355. }
復制代碼




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

使用道具 舉報

沙發
ID:73345 發表于 2016-5-11 01:46 | 只看該作者
感謝分享。。
回復

使用道具 舉報

板凳
ID:86621 發表于 2016-5-12 00:03 | 只看該作者
樓主你忙
回復

使用道具 舉報

地板
ID:120268 發表于 2016-5-12 12:52 | 只看該作者
我也想做可惜不會寫程序
回復

使用道具 舉報

5#
ID:120620 發表于 2016-5-14 09:24 來自手機 | 只看該作者
樓主能發份原理圖跟PCB給我嘛?急求!麻煩樓主了 1281503280@qq.com
回復

使用道具 舉報

6#
ID:120772 發表于 2016-5-14 18:09 | 只看該作者
請問sys.h中的函數是什么作用啊,是聲明中斷嗎?
回復

使用道具 舉報

7#
ID:128779 發表于 2016-7-1 09:28 | 只看該作者
你好.樓主,可以詳細介紹一下嗎
回復

使用道具 舉報

8#
ID:128779 發表于 2016-7-1 09:31 | 只看該作者
A小白 發表于 2016-5-14 09:24
樓主能發份原理圖跟PCB給我嘛?急求!麻煩樓主了 1281503280@qq.com

你好,有原理圖跟PCB了嗎,可否發給我一份
回復

使用道具 舉報

9#
ID:130363 發表于 2016-7-14 16:09 | 只看該作者
謝謝樓主
回復

使用道具 舉報

10#
ID:133756 發表于 2016-7-21 16:18 | 只看該作者
樓主能發份原理圖給我嘛?急求!麻煩樓主了 2923133214@qq.com
回復

使用道具 舉報

11#
ID:135954 發表于 2016-8-4 11:48 | 只看該作者
感謝樓主的代碼!
回復

使用道具 舉報

12#
ID:137625 發表于 2016-8-27 00:30 | 只看該作者
我手上只有AT89C51的單片機,可以用上面鏈接中c8051f單片機的程序么?
回復

使用道具 舉報

13#
ID:139377 發表于 2016-9-14 10:11 | 只看該作者
學習一下      
回復

使用道具 舉報

14#
ID:140039 發表于 2016-9-21 16:02 | 只看該作者
跟樓主學習學習
回復

使用道具 舉報

15#
ID:143128 發表于 2016-11-1 14:17 | 只看該作者
能發個仿真圖來看看嘛? 謝謝
回復

使用道具 舉報

16#
ID:150971 發表于 2016-11-29 13:17 | 只看該作者
頂一個!
回復

使用道具 舉報

17#
ID:153672 發表于 2016-12-10 13:24 | 只看該作者
謝謝,參考一下。
回復

使用道具 舉報

18#
ID:150971 發表于 2017-1-4 17:34 | 只看該作者
頂一個
回復

使用道具 舉報

19#
ID:166173 發表于 2017-2-23 14:16 | 只看該作者
謝謝分享
回復

使用道具 舉報

20#
ID:186896 發表于 2017-4-6 21:44 | 只看該作者
謝謝樓主
回復

使用道具 舉報

21#
ID:188124 發表于 2017-4-11 20:52 | 只看該作者
那個ADXL345的是空的
回復

使用道具 舉報

22#
ID:188124 發表于 2017-5-8 20:22 | 只看該作者
我試了一下您的代碼,只是最基本的記步,感覺不太準,不靈敏,都記不了10步,不知道是哪里出的問題,希望能與您交流一下。
回復

使用道具 舉報

23#
ID:201575 發表于 2017-5-16 21:56 | 只看該作者
A小白 發表于 2016-5-14 09:24
樓主能發份原理圖跟PCB給我嘛?急求!麻煩樓主了 1281503280@qq.com

你好 有原理圖和程序嗎可以給我發一份嗎?
回復

使用道具 舉報

24#
ID:201575 發表于 2017-5-16 21:57 | 只看該作者
wutong 發表于 2016-8-27 00:30
**** 作者被禁止或刪除 內容自動屏蔽 ****

你好  可以給我發一分嗎
回復

使用道具 舉報

25#
ID:204636 發表于 2017-5-25 17:39 | 只看該作者
樓主發一份仿真圖給我吧,謝謝樓主了2749974377@qq.com
回復

使用道具 舉報

26#
ID:33848 發表于 2017-6-30 10:26 | 只看該作者
好東西,謝謝了
回復

使用道具 舉報

27#
ID:33848 發表于 2017-6-30 10:26 | 只看該作者
我怎么不能發言?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清在线精品 | 怡红院免费的全部视频 | 伊人春色成人 | 日本在线观看视频 | 中文在线视频 | 久久中文网 | 日韩精品一区二区三区中文在线 | 久久精品国产亚洲一区二区三区 | 中国美女撒尿txxxxx视频 | 国产欧美视频一区 | 亚州精品天堂中文字幕 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲午夜久久久 | 色综合久久天天综合网 | 国产日韩亚洲欧美 | 三级av免费 | 成人精品在线视频 | 中文字幕精品一区 | 91在线网站 | 色婷婷综合成人av | 麻豆国产一区二区三区四区 | 欧美日韩不卡 | 嫩草视频入口 | 天天久 | 久久久精品影院 | 亚洲精品国产电影 | 日日夜夜精品视频 | 国产伦精品一区二区三区照片91 | 国产精品成人久久久久 | 一级毛片色一级 | 国产91久久久久久 | www天天操| 成人高清网站 | 亚洲精品中文字幕在线 | 日本不卡一区二区三区 | 一区二区三区免费 | 美女天天干天天操 | 欧美日韩亚洲国产 | 精品无码久久久久久国产 | 干狠狠| 热99|