找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6036|回复: 4
打印 上一主题 下一主题
收起左侧

STM32F103控制ds18b20温度采集,带电脑端上位机源码

[复制链接]
跳转到指定楼层
楼主
STM32F103控制ds18b20温度采集,带电脑端上位机源码。

vs源码与上位机的执行文件都有


stm32单片机下位机源程序如下:
  1. /*************************************************
  2. Template:远程传输设备
  3. author:ncy
  4. date:2017-6-26
  5. complete data:2017-6-27
  6. **************************************************/
  7. #include "sys.h"
  8. #include "delay.h"
  9. #include "led.h"
  10. #include "rtc.h"
  11. #include "time.h"
  12. #include "stmflash.h"
  13. #include "exti.h"
  14. #include "adc.h"
  15. #include "key.h"
  16. #include "timer.h"
  17. #include "ds18b20.h"
  18. #include "DS18B20_2.h"
  19. #include "24cxx.h"
  20. #include "usart.h"
  21. #include "mlx90614.h"
  22. #define Write_Base_Address 0x0807F800//保存参数
  23. u8 Set_Cal_Time=10;
  24. u16 data_cnt=0x00;
  25. u8 Send_Led_Flag=0x00;
  26. u8 Recv_Led_Flag=0x00;
  27.         float tm_mlx=0.0;
  28. int main(void)
  29. {
  30.   float AD_values;
  31.   u16 year;
  32.         u16 write_address=50;//start address 读写的基地址
  33.   u8 month,day,hour,min,sec;
  34.         u8 time_buf[8];
  35.         u8 data_buf[10];
  36.         u8 tm1_buf[4],tm2_buf[4];
  37.         u8 ad_buf[6];
  38.         u8 write_buf[41];//暂时100个字
  39.   u8 read_buf[40];
  40.         u8 i=0;
  41.         u8 set_time_ok[2]={0x4F,0x4B};
  42.         u8 set_cj_ok[2]={0x1c,0xc1};
  43.         float tm1,tm2;         
  44.         delay_init();           
  45.         LED_Init();                          
  46.         RTC_Init();      
  47.   uart_init(115200);
  48.         TIM2_Int_Init(999,7199);//定时器2初始化
  49.         TIM3_Int_Init(999,7199);
  50.         TIM4_Int_Init(999,7199);
  51.   EXTIX_Init();
  52.         Adc_Init();
  53.         DS18B20_Init();
  54.         DS18B20_2_Init();
  55.   AT24CXX_Init();               
  56.         SMBus_Init();        
  57.   while(AT24CXX_Check())//cheak 24c02 is valid
  58.         {
  59.          //AT24C02 IS NOT
  60.         }         
  61.         //读取参数配置信息
  62.         //1.当前配置的定时器读取时间参数
  63.         AT24CXX_WriteOneByte(0x00,data_cnt);
  64.         data_cnt=AT24CXX_ReadOneByte(0X00);
  65.         Set_Cal_Time=AT24CXX_ReadOneByte(0X01);
  66.         //当前存取的条目数字
  67.         //record


  68.         while(1)
  69.         {
  70. /****************设置定时时长和日期******************************************************************/        

  71.         
  72.                  if(USART_RX_STA&0X4000)
  73.                  {
  74.                                 if(USART_RX_STA&0X1000)
  75.                                 {
  76.                                          Set_Cal_Time=USART_RX_BUF[2];
  77.                                          USART1_SendNums(set_cj_ok,2);
  78.                                          AT24CXX_WriteOneByte(0x01,Set_Cal_Time);
  79.                                 }
  80.                                 if(USART_RX_STA&0X0400)
  81.                                 {
  82.                                 //设置的格式
  83.                                         u16 year;
  84.                                         u8 month,day,hour,min,sec,temp;
  85.                                         year=2000+10*(USART_RX_BUF[2]/16)+USART_RX_BUF[2]%16;
  86.                                         month=10*(USART_RX_BUF[3]/16)+USART_RX_BUF[3]%16;
  87.                                         day=10*(USART_RX_BUF[4]/16)+USART_RX_BUF[4]%16;
  88.                                         hour=10*(USART_RX_BUF[5]/16)+USART_RX_BUF[5]%16;
  89.                                         min=10*(USART_RX_BUF[6]/16)+USART_RX_BUF[6]%16;
  90.                                         sec=10*(USART_RX_BUF[7]/16)+USART_RX_BUF[7]%16;
  91.                                         RTC_Set(year,month,day,hour,min,sec);//set local time
  92.                                         USART1_SendNums(set_time_ok,2);
  93.                                 }
  94.                                 count=0;
  95.                                 USART_RX_STA=0;
  96.                         }
  97. /*****************获取各个物理量*************************************************************/        
  98.                 tm1=DS18B20_Get_Temp(); //get tm1
  99.   
  100.                 tm_mlx=SMBus_ReadTemp();        
  101.                 //读取ADvalues
  102.                 AD_values=Get_Adc_Average(0x01,10);
  103.                         
  104.                 year=calendar.w_year; //
  105.                 month=calendar.w_month;
  106.                 day=calendar.w_date;
  107.                 //AD values
  108.                 ad_buf[0]='0';//暂时不上传
  109.                 ad_buf[1]='.';
  110.                 ad_buf[2]=(u8)AD_values*10%10+'0';
  111.                 ad_buf[3]=(u8)AD_values*100%10+'0';
  112.                 ad_buf[4]=(u8)AD_values*1000%10+'0';
  113.                 ad_buf[5]=(u8)AD_values*10000%10+'0';
  114.                 //报文格式
  115.     write_buf[0]=0xee;
  116.     for(i=0;i<6;i++)
  117.                 {
  118.                     write_buf[1+i]=ad_buf[i];
  119.                 }
  120.                
  121.     write_buf[7]=0x20;
  122.     //tm1
  123.                 tm1_buf[0]=(u8)tm1/10+'0';
  124.                 tm1_buf[1]=(u8)tm1%10+'0';
  125.                 tm1_buf[2]='.';
  126.                 tm1_buf[3]=(u8)tm1*10%10+'0';
  127.           for(i=0;i<4;i++)
  128.                 {
  129.                     write_buf[8+i]=tm1_buf[i];
  130.                 }
  131.                 write_buf[12]=0x20;
  132.     //tm2
  133.                 tm2_buf[0]=(u8)tm_mlx/10+'0';
  134.                 tm2_buf[1]=(u8)tm_mlx%10+'0';
  135.                 tm2_buf[2]='.';
  136.                 tm2_buf[3]=(u8)(tm_mlx*10)%10+'0';
  137.                 for(i=0;i<4;i++)
  138.                 {
  139.                     write_buf[13+i]=tm2_buf[i];
  140.                 }
  141.                 write_buf[17]=0x20;
  142.                
  143.                 //date
  144.                 data_buf[0]=year/1000+'0';
  145.                 data_buf[1]=year/100%10+'0';
  146.                 data_buf[2]=year/10%10+'0';
  147.                 data_buf[3]=year%10+'0';
  148.                 data_buf[4]='-';
  149.                 data_buf[5]=month/10+'0';
  150.                 data_buf[6]=month%10+'0';
  151.                 data_buf[7]='-';
  152.                 data_buf[8]=day/10+'0';
  153.                 data_buf[9]=day%10+'0';
  154.     for(i=0;i<10;i++)
  155.                 {
  156.                     write_buf[18+i]=data_buf[i];
  157.                 }
  158.                 write_buf[28]=0x20;
  159.                 //time
  160.                 hour=calendar.hour;
  161.                 min=calendar.min;
  162.                 sec=calendar.sec;
  163.                 time_buf[0]=hour/10+'0';
  164.                 time_buf[1]=hour%10+'0';
  165.                 time_buf[2]=':';
  166.                 time_buf[3]=min/10+'0';
  167.                 time_buf[4]=min%10+'0';
  168.                 time_buf[5]=':';
  169.                 time_buf[6]=sec/10+'0';
  170.                 time_buf[7]=sec%10+'0';
  171.                 for(i=0;i<8;i++)
  172.                 {
  173.                     write_buf[29+i]=time_buf[i];
  174.                 }
  175.                 write_buf[37]=0xff;
  176.                 write_buf[38]=0xfc;
  177.                 write_buf[39]=0xff;
  178.                 write_buf[40]=0xff;
  179.                 //USART1_SendNums(write_buf,41);//发送偏移的计算
  180.                 if(read_flag==1&&write_flag==0)
  181.                 {
  182.                     TIM_Cmd(TIM3, DISABLE);//OPEN
  183.                           TIM_Cmd(TIM4, ENABLE);//OPEN
  184.         if((time4_flag==1)&&(data_cnt>0))
  185.                                 {               
  186.                                         data_cnt--;
  187.           AT24CXX_Read((data_cnt*41+write_address),(u8*)read_buf,41);//读取read_buf
  188.                                         USART1_SendNums(read_buf,41);//发送偏移的计算
  189.                                         AT24CXX_WriteOneByte(0x00,data_cnt);//write one byte to 24Cxx
  190.                                         time4_flag=0;
  191.                                         Recv_Led_Flag=0X00;
  192.                                         Send_Led_Flag=0x01;
  193.                                 }               
  194.                                 if(data_cnt==0)
  195.                                 {
  196.                                         Send_Led_Flag=0x00;
  197.                                         TIM_Cmd(TIM4,DISABLE);//定时器3close
  198.                                 }
  199.                 }
  200.                 if(read_flag==0&&write_flag==1)
  201.                 {
  202.                     TIM_Cmd(TIM3, ENABLE);  //OPEN
  203.                           TIM_Cmd(TIM4, DISABLE);  //OPEN
  204.         if(time3_flag==1)
  205.                                 {
  206.                 AT24CXX_Write((write_address+data_cnt*41),(u8*)write_buf,41);
  207.                                         data_cnt++;
  208.                                         if(data_cnt==100)//存储了100条,表示空间已满
  209.                                         {
  210.                                            data_cnt=0;//归位
  211.                                         }
  212.                                         //保存基地址
  213.                                         AT24CXX_WriteOneByte(0x00,data_cnt);//write one byte to 24Cxx
  214.                                         Send_Led_Flag=0x00;
  215.                                         Recv_Led_Flag=0X01;
  216.                                         time3_flag=0;
  217.                                 }                                       
  218.                 }        
  219.         }
  220. }
复制代码

所有资料51hei提供下载:
远程温湿度采集.rar (2.5 MB, 下载次数: 146)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:482998 发表于 2019-3-1 22:13 | 只看该作者
很好,谢谢
回复

使用道具 举报

板凳
ID:482998 发表于 2019-3-1 22:36 | 只看该作者
我下载压缩包,怎么不能打开上位机,麻烦说一下,谢谢了
回复

使用道具 举报

地板
ID:488051 发表于 2019-3-17 13:30 | 只看该作者
谢谢楼主分享!!
回复

使用道具 举报

5#
ID:249826 发表于 2019-9-25 15:54 | 只看该作者
quyuan 发表于 2019-3-1 22:36
我下载压缩包,怎么不能打开上位机,麻烦说一下,谢谢了

你重新试试,vs的工程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表