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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4780|回復(fù): 5
收起左側(cè)

STM32F103C8T6_LCD2004_BMP280 顯示氣壓溫度

  [復(fù)制鏈接]
ID:87716 發(fā)表于 2019-9-30 22:49 | 顯示全部樓層 |閱讀模式
LCD200顯示氣壓溫度

單片機(jī)源程序如下:
  1. #include "bsp.h"
  2. #include "usart.h"
  3. #include "usb_lib.h"
  4. #include "hw_config.h"
  5. #include "memory.h"
  6. #include "usbio.h"
  7. #include "delay.h"
  8. #include "timer.h"
  9. #include "mpuiic.h"
  10. #include "mpu9250.h"
  11. #include "bmp280.h"
  12. #include "lcd1602.h"
  13. #include "1602iic.h"
  14. #include "LiquidCrystal_I2C.h"

  15. extern uint8_t USB_Received_Flag;
  16. uint8_t USB_ReceData[64];
  17. uint8_t IDxxx[32];
  18. Update_Set_TypeDef update;
  19. my_time TIME={0};//顯示時(shí)間的結(jié)構(gòu)體
  20. volatile SerialBuffType m_Usart1Recv = SerialBuffDefault();
  21. unsigned char LCD_data = 0x08;//全局變量 缺省狀態(tài) 00001000使背光開啟  00000000背光關(guān)閉

  22. #define N 12
  23. u32 bmp280_tempValue[N]={0};
  24. u32 bmp280_pressValue[N]={0};
  25. s32 bmp280_temp;
  26. u32 bmp280_press;
  27. u8 nCount=0,nFlag=0;
  28. char buf[20]={0};

  29. static void Usart1_RecvOneChar(u8 RecvCharacter);
  30. static void TimEndHandle(void);

  31. int main(void)
  32. {
  33.         uint32_t i=0;

  34. //        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x5000);
  35. //        ENABLE_INT();//使能全局中斷
  36.        
  37.         delay_init();
  38.         LED_Init();//初始化
  39.         TIM2_Init();//通用定時(shí)器2初始化
  40.         TIM_Delay_Init();//(TIM3)
  41.         TIM4_Init();//
  42.         USART1_Init(115200);//串口1初始化
  43.         IIC_Init();       
  44.         BMP280_Init();
  45.        
  46.         Set_System();//系統(tǒng)時(shí)鐘初始化
  47.         USB_Interrupts_Config();
  48.         Set_USBClock();
  49.         USB_Init();  // 初始化完成后 就等待設(shè)備枚舉成功
  50.         //USB打開的中斷
  51.         /********************************************
  52.         IMR_MSK (CNTR_CTRM  | CNTR_WKUPM | CNTR_SUSPM | CNTR_ERRM  | CNTR_SOFM \
  53.                                          | CNTR_ESOFM | CNTR_RESETM )
  54.         ********************************************/
  55.        
  56.         //LCDI2C_init(0x27,16,2);//初始化LCD1602
  57.         LCDI2C_init(0x27,20,4);//初始化LCD2004
  58.         // Quick 3 blinks of backlight
  59.         for( i = 0; i< 3; i++)
  60.         {
  61.                 LCDI2C_setBacklight(1);//背光開關(guān)
  62.                 Delay(250);
  63.                 LCDI2C_setBacklight(0);
  64.                 Delay(250);
  65.         }
  66.         LCDI2C_setBacklight(1); // finish with backlight on
  67.         Delay(2000);
  68.         LCDI2C_clear();
  69.         LCDI2C_write_String("STM32F103C8T6_TEST  ");

  70.         Usart1_SetIRQCallBack(Usart1_RecvOneChar);
  71.         TIM4_SetIRQCallBack(TimEndHandle);

  72.         MemSet((u8 *)&update,0,sizeof(Update_Set_TypeDef));
  73.         if(EE_IsHaveStoreData(STORE_FLAG,STORE_ADDRESS))
  74.         {
  75.                 EE_FlashReadFlag(STORE_FLAG,STORE_ADDRESS,(u8 *)&update,sizeof(Update_Set_TypeDef));
  76.                 Get_ChipID(IDxxx);
  77.                 if(update.OldOrNew==0xaa)
  78.                 {
  79.                         if(!strstr((char *)IDxxx,(char *)update.IDxxx))
  80.                         {
  81.                                 while(1)
  82.                                 {
  83.                                         delay_ms(5000);
  84.                                         printf("Eorror\r\n");
  85.                                 }
  86.                                
  87.                         }
  88.                 }
  89.         }
  90.         else
  91.         {
  92.                 printf("ReadStoerEorror\r\n");
  93.         }

  94.         i=0xffffff;
  95.         while(i--);  //等待usb枚舉完成
  96.        
  97.         printf("\r\nAPP 初始化完成\r\n");
  98.         while(1)
  99.         {
  100.                 if(IS_TIMEOUT_10MS(3, 100))//間隔1000毫秒執(zhí)行1次
  101.         {
  102.                         LED0=!LED0;
  103.                         BMP280_ReadPressureTemperature(&bmp280_press,&bmp280_temp);//bmp280獲取氣壓值和溫度
  104.                         bmp280_tempValue[nCount]=bmp280_temp;
  105.                         bmp280_pressValue[nCount]=bmp280_press;
  106.                         nCount++;
  107.                         if(nCount>=N)
  108.                         {
  109.                                 nCount=0;
  110.                                 bmp280_temp=FILTER_median(bmp280_tempValue,N,1);//中位值平均濾波
  111.                                 bmp280_press=FILTER_median(bmp280_pressValue,N-1,0);//中位值濾波
  112.                                 MemSet((u8 *)buf,0,20);
  113.                                 sprintf(buf,"press:%d",bmp280_press);
  114.                                 printf("bmp280_%s\r\n",buf);
  115.                                 LCDI2C_Show_Str(0,2,buf);//(2004)
  116.                                 MemSet((u8 *)buf,0,20);
  117.                                 sprintf(buf,"temp:%d",bmp280_temp);
  118.                                 printf("bmp280_%s\r\n",buf);
  119.                                 LCDI2C_Show_Str(0,3,buf);//(2004)
  120.                         }
  121.                         TIME.second++;
  122.                         if(TIME.second>59)
  123.                         {
  124.                                 TIME.second=0;
  125.                                 TIME.minute++;
  126.                                 if(TIME.minute>59)
  127.                                 {
  128.                                         TIME.minute=0;
  129.                                         TIME.hour++;
  130.                                         if(TIME.hour>23)
  131.                                         {
  132.                                                 TIME.hour=0;
  133.                                                 TIME.date++;
  134.                                         }
  135.                                 }
  136.                         }
  137.                         MemSet((u8 *)buf,0,20);
  138.                         sprintf(buf,"run %03d %02d:%02d:%02d",TIME.date,TIME.hour,TIME.minute,TIME.second);
  139.                         LCDI2C_Show_Str(0,1,buf);//(2004)
  140.                 }
  141.                 if(USB_Received_Flag)//判斷usb是否接收到數(shù)據(jù)
  142.                 {
  143.                         USB_Received_Flag=0;
  144.                         USB_GetData(USB_ReceData,64);
  145.                         printf("%s\r\n",USB_ReceData);
  146.                         //delay_ms(20);
  147.                         USB_SendData(USB_ReceData,64);
  148.                 }
  149.                 if(m_Usart1Recv.len > 0)
  150.                 {
  151.                         if(m_Usart1Recv.len > 1)
  152.                         {
  153.                                 printf("%s",m_Usart1Recv.buf);
  154.                         }
  155.                         else
  156.                         {
  157.                                 switch (m_Usart1Recv.buf[0])
  158.                                 {
  159.                                         case 0x6f: //o
  160.                                                 i2cWriteByte(BACKLIGHT_ON);
  161.                                         break;
  162.                                         case 0x63: //c
  163.                                                 i2cWriteByte(BACKLIGHT_OFF);
  164.                                         break;
  165.                                         case 0x02: //Ctrl+b
  166.                                                 //功能待定
  167.                                                 update.boot_type=1;//1為Bootloader
  168.                                                 //EE_FlashWrite(STORE_FLAG,STORE_ADDRESS,(u8 *)&update,sizeof(Update_Set_TypeDef));//寫flash
  169.                                                 printf("重啟進(jìn)入Bootloader模式\r\n");
  170.                                         break;   
  171.                                         default :
  172.                                                 printf("Error 0x%02x\r\n",m_Usart1Recv.buf[0]);                       
  173.                                         break;
  174.                                 }
  175.                         }
  176.                         MemSet((u8 *)&m_Usart1Recv.buf,0,USART1_BUFF_LANGTH);
  177.                         m_Usart1Recv.len = 0;
  178.                 }
  179.         }
  180. }

  181. //USART1接收到一個(gè)字符
  182. static void Usart1_RecvOneChar(u8 RecvCharacter)
  183. {
  184.     if(m_Usart1Recv.ind >= USART1_BUFF_LANGTH)
  185.         return;
  186.         
  187.     if(m_Usart1Recv.len > 0)
  188.         return;
  189.         
  190.     m_Usart1Recv.buf[m_Usart1Recv.ind++] = RecvCharacter;
  191.         TIM_Open(TIM4);//定時(shí)器重新計(jì)數(shù)
  192. }

  193. //USART1接收字符超時(shí)回調(diào)函數(shù)
  194. static void TimEndHandle(void)
  195. {
  196.         TIM_Close(TIM4);//關(guān)閉定時(shí)器
  197.     m_Usart1Recv.len = m_Usart1Recv.ind;
  198.     m_Usart1Recv.ind = 0;
  199. }

  200. #ifdef  USE_FULL_ASSERT
  201. /**
  202.   * @brief  報(bào)告在檢查參數(shù)發(fā)生錯(cuò)誤時(shí)的源文件名和錯(cuò)誤行數(shù)
  203.   * @param  file 源文件名
  204.   * @param  line 錯(cuò)誤所在行數(shù)
  205.   * @retval None
  206.   */
  207. void assert_failed(uint8_t* file, uint32_t line)
  208. {
  209.     /* 用戶可以增加自己的代碼用于報(bào)告錯(cuò)誤的文件名和所在行數(shù),
  210.        例如:printf("錯(cuò)誤參數(shù)值: 文件名 %s 在 %d行\(zhòng)r\n", file, line) */

  211.     /* 無限循環(huán) */
  212.     while (1)
  213.     {
  214.     }
  215. }
  216. #endif

  217. /*********************************END OF FILE**********************************/
復(fù)制代碼

所有資料51hei提供下載:
STM32F103C8T6_LCD2004_BMP280.7z (373.16 KB, 下載次數(shù): 198)
回復(fù)

使用道具 舉報(bào)

ID:127004 發(fā)表于 2019-10-18 20:11 | 顯示全部樓層
自己寫了程序,調(diào)試了一天都調(diào)試不成功,下載下來參考一下
回復(fù)

使用道具 舉報(bào)

ID:820243 發(fā)表于 2022-11-25 16:15 | 顯示全部樓層
樓主厲害
自己寫了程序,調(diào)試了一天都調(diào)試不成功,下載下來參考一下
回復(fù)

使用道具 舉報(bào)

ID:950976 發(fā)表于 2022-12-4 16:47 | 顯示全部樓層
自己寫了程序,調(diào)試了一天都調(diào)試不成功,下載下來參考一下
回復(fù)

使用道具 舉報(bào)

ID:337280 發(fā)表于 2022-12-15 14:36 | 顯示全部樓層
謝謝作者。。。
回復(fù)

使用道具 舉報(bào)

ID:735831 發(fā)表于 2024-6-6 21:24 | 顯示全部樓層
多謝樓主分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人免费在线观看高清 | 日韩三级电影一区二区 | 成人国产一区二区三区精品麻豆 | 韩国毛片视频 | 国产精品一码二码三码在线 | 亚洲一区二区三区四区在线观看 | 能看的av网站 | 国产高清视频在线播放 | 中文字幕 在线观看 | 国产一区二区久久 | 国产一区三区在线 | 免费能直接在线观看黄的视频 | 视频在线一区 | 成人精品一区二区三区中文字幕 | 97久久久| 色播久久 | 午夜精品一区二区三区在线观看 | 亚洲精品国产综合区久久久久久久 | 亚洲一区二区电影网 | 国产免费自拍 | 久久精品国产一区二区三区不卡 | 欧美精品v国产精品v日韩精品 | 精品无码久久久久久国产 | 自拍偷拍小视频 | 国精产品一区一区三区免费完 | 久草在线 | 国产午夜精品一区二区三区四区 | 日本一区二区三区在线观看 | 国产视频久久 | 成人a免费 | 91在线看 | 国产一级淫片免费视频 | 日韩精品在线播放 | 国产精品久久久久久52avav | 精精国产xxxx视频在线野外 | 色欧美片视频在线观看 | 日韩一区二区三区视频在线观看 | 999精品视频 | 少妇精品亚洲一区二区成人 | 欧美激情亚洲 | 国产精品一卡 |