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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F103C8T6單片機+ADXL345+OLED計步器 (手表,運動手環(huán))源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:249376 發(fā)表于 2022-10-13 22:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
看到網(wǎng)上都是用 LCD1602作為輸出的,參考一些論壇的文章,拼成STM32+ADXL345+OLED 計步器。
制作出來的實物圖如下:


單片機源程序如下:
  1. /*
  2. STM32F103C8T6
  3. iic通信0.96寸OLED顯示屏;顯示中英文、數(shù)字、圖片
  4. 18B20溫度傳感器
  5. HC-SR04超聲波傳感器

  6. OLED接線定義:
  7.                                         VCC--3.3V/5V
  8.                                         GND--GND
  9.                                         SCL--PB8
  10.                                         SDA--PB9
  11. 18B20接線定義:
  12.                                         DQ--PA5
  13. HC-SR04超聲波接線定義:
  14.                                         Trig--PB7
  15.                                         Echo--PB6
  16. */

  17. #include "sys.h"  
  18. #include "delay.h"
  19. #include "oled_iic.h"
  20. #include "stdio.h"
  21. #include "wave.h"
  22. #include "timer.h"
  23. #include "usart.h"          
  24. #include "ds18b20.h"
  25. #include "lcd1602.h"
  26. #include "led.h"
  27. #include <stdio.h>
  28. #include "key.h"
  29. #include "exti.h"
  30. #include "adxl345.h"



  31. //Add bgn
  32. unsigned char ReadAdxl345;           //定時讀取adxl345數(shù)據(jù)
  33. unsigned char ErrorNum=0;   //記錄錯誤次數(shù)
  34. unsigned char CheckNum=0;   //檢測次數(shù)
  35.           
  36. char dis0[16];//液晶數(shù)組顯示暫存
  37. char dis1[35];

  38. unsigned int xlTab[5];//心率數(shù)組
  39. unsigned char count=0;        //心率濾波計數(shù)
  40. unsigned int xinLater=0;//        心率延時處理
  41. unsigned int xinLv =0;    //心率值

  42. unsigned int BuShu=0;//步數(shù)
  43. unsigned int Normal_num=0;                        //正常次數(shù)
  44. unsigned int Error_num=0;                        //傾斜次數(shù)

  45. unsigned int disBuShu = 0;  //顯示步數(shù)
  46. float disJuLi = 0;//顯示距離
  47. float temperature;  //溫度
  48. unsigned char readTemp = 0;        //讀取溫度標志



  49. //Add end

  50. int main(void)
  51. {               
  52.        
  53. //Add bgn
  54.         delay_init();                     //延時函數(shù)初始化          
  55.         uart_init(9600);                 //串口初始化為9600
  56.   TIM3_Int_Init(49,7199);//50ms         
  57. //EXTIX_Init();                // 初始化外部中斷
  58. LED_Init();                                  //初始化與LED連接的硬件接口
  59. KEY_Init();                        //初始化按鍵

  60. //lcd_GPIO_init();  //初始化lcd引腳
  61. //lcd_Init();                  //初始化lcd屏幕
  62.         delay_ms(200);
  63.          
  64.   Init_ADXL345();
  65.   if(Single_Read_ADXL345(0X00)==0xe5)       
  66.   {
  67.     delay_ms(5);
  68.   }
  69.   else
  70.   {
  71.     delay_ms(3);
  72.   }
  73. //Add end
  74.        
  75.         u8 a=0;       
  76.         u8 t=20;//trig引腳高電平持續(xù)時間
  77.          double  temperature;                                             
  78. //        u8 Distance;
  79. //        u8 disFlag=0;
  80.        
  81.         uart_init(115200);//串口初始化
  82.         Wave_SRD_Init();//初始化超聲波
  83.         Timer_SRD_Init(9998,7199);//定時器初始化       

  84.         extern const u8 BMP1[];
  85.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
  86.         delay_init();
  87.         OLED_Init();                         //OLED屏幕初始化               
  88.         DS18B20_Init();                //DS18B20初始化       
  89.        
  90.         while(Wave_SRD_Strat(t))
  91.         {
  92.         }
  93.        
  94.         OLED_Clear();       
  95.        
  96.         while(1)
  97.         {               
  98.                 ReadAdxl345= 1;
  99. //Add bgn
  100.             if(ReadAdxl345== 1)   //定時讀取adxl345數(shù)據(jù)
  101.     {
  102.       ReadAdxl345= 0;
  103.       ReadData_x();                                                  //三軸檢測函數(shù)
  104.       CheckNum++;
  105.       if((temp_Y>450)||(temp_Y<-450)) //查看正常次數(shù)     
  106.       {
  107.         Normal_num++;  //正常次數(shù)++
  108.       }
  109.       else
  110.       {
  111.         Error_num++;//傾斜次數(shù)
  112.       }
  113.       if((Error_num!=0)&&(Normal_num!=0))//檢測到步數(shù)
  114.         //                if (Normal_num!=0)//檢測到步數(shù)       
  115.       {
  116.                                 BuShu++;   //步數(shù)脈沖量++
  117.         Error_num=0;    //清除一個周期檢測
  118.         Normal_num=0;
  119.       }
  120.     }
  121.                
  122.                 if(disFlag==1)           //顯示標志
  123.                 {
  124.                         disFlag = 0;

  125.                         readTemp++;  //定時計數(shù)
  126.                         if(readTemp >= 8)//約800ms處理一次數(shù)據(jù) 溫度
  127.                         {
  128.                                 readTemp =0;//重新計數(shù)
  129.                                 temperature=(float)DS18B20_Get_Temp()/10;        //縮小10倍為實際值                       
  130.                         }
  131.                                                
  132.                         disBuShu = BuShu/2;  //顯示步數(shù)
  133.                         disJuLi = disBuShu*0.45;//顯示距離
  134.                        
  135.                         sprintf(dis0,"X:%03d/min %4.1f C",xinLv,temperature);//打印
  136.                         Lcd_Puts(0,0,(unsigned char *)dis0);        //顯示
  137.                         Lcd_1Put(14,0,0xdf);//顯示符號
  138.                         sprintf(dis1,"BS:%03d JL:%4.1fm  ",disBuShu,disJuLi);//打印
  139.                         Lcd_Puts(0,1,(unsigned char *)dis1);        //顯示
  140.        
  141.                 }               
  142.                
  143. //Add end
  144.                
  145.                
  146.                
  147.                 //18B20讀取溫度               
  148.                 if(a%10==0)                        //每100ms讀取一次
  149.                 {                                                                          
  150.                         temperature=DS18B20_Get_Temp();
  151.                         if(temperature<0)
  152.                         {
  153.                                 OLED_ShowCH(50,6,"-");                        //顯示負號
  154.                                 temperature=-temperature;                        //轉為正數(shù)
  155.                         }else{
  156.                                 OLED_ShowCH(50,6," ");                        //去掉負號
  157.                         }
  158.                 //        OLED_ShowNum(60,6,temperature/10,2,16);                        //顯示整數(shù)部分            
  159. //                           OLED_ShowNum(60+28,6,temperature%10,1,16);        //顯示小數(shù)部分                   
  160.                 }                                  
  161.                  delay_ms(10);
  162.                 a++;
  163.                 if(a==20)
  164.                 {
  165.                         a=0;
  166.                 }

  167.         //        OLED_ShowCH(15,0,"屏幕顯示測試y2");                //測試顯示中文
  168.                 OLED_ShowCH(0,0,"BuShu:");                //測試顯示中文
  169.                 OLED_ShowNum(50,0,BuShu,6,16);

  170.                 OLED_ShowCH(0,3,"Dist.: ");        //顯示英文
  171.                 OLED_ShowNum(50,3,disJuLi,6,16);


  172. //                //產(chǎn)生高于10Us的高電平與OLED上顯示超聲波所測距離               
  173. //                Wave_SRD_Strat(t);
  174. //                Distance = TIM_GetCounter(TIM3)*340/200.0;
  175. //                if(Distance>0)
  176. //                {
  177. //                        OLED_ShowNum(50,3,Distance,6,16);                //顯示超聲波測量距離
  178. //                        delay_ms(10);
  179. //                }

  180. /*               

  181.                 OLED_DrawBMP(0,0,128,8,(u8 *)BMP1);                //測試顯示圖片
  182. */
  183.         }
  184. }
復制代碼

Keil代碼下載:
Keil代碼.7z (212.43 KB, 下載次數(shù): 83)



評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:668601 發(fā)表于 2024-9-7 23:36 | 只看該作者
謝謝UP的代碼,可以使用
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品国产一区二区青青牛奶 | 久久一级 | 日韩在线观看中文字幕 | 免费国产视频在线观看 | 国产日韩欧美精品一区二区三区 | 欧美一区二区三区四区视频 | 久久精品免费看 | 中文字幕在线观看一区 | 久久乐国产精品 | 欧美韩一区二区 | 久久不卡 | 99久久婷婷 | 91在线视频观看免费 | 男女视频在线观看免费 | 国产视频精品在线观看 | 午夜免费福利电影 | 国产精品久久久久久久久免费丝袜 | 久久国产一区二区 | 99精品视频在线 | 91精品国产91久久久久久吃药 | 亚洲精品九九 | 日韩成人影院在线观看 | 久久一区二区三区免费 | 久久中文一区二区 | 日韩中文字幕免费在线 | 国产成人精品高清久久 | 性做久久久久久免费观看欧美 | 中文字幕日韩在线 | 人人干人人艹 | 久久久激情视频 | 亚洲国产精品美女 | 精品久久精品 | 欧美中文字幕在线 | 亚洲福利电影网 | 久久久精品 | 亚洲网站在线观看 | 成人亚洲片 | 狠狠狠色丁香婷婷综合久久五月 | 伊人久久综合影院 | 99热视 | 欧美一区二区免费视频 |