找回密码
 立即注册

QQ登录

只需一步,快速开始

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

空气PM2.5和PM10等测定(51单片机+攀藤PMS5003)源程序

  [复制链接]
跳转到指定楼层
楼主
ID:407089 发表于 2019-4-17 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
攀藤PMS5003主动式传输协议:

官方推荐的电路:


我的连接方式:




主程序:
  1. /*
  2.   功能说明:
  3.   读取攀藤PMS5003空气质量传感器数据并显示PM2.5和PM10的值。
  4. */

  5. #include "config.h"
  6. #include "lcd1602.h"

  7. void UART_init()
  8. {
  9.         TMOD = 0x20;          //T1工作模式2  8位自动重装
  10.         TH1 = 0xfd;
  11.         TL1 = 0xfd;              //比特率9600
  12.         TR1 = 1;                  //启动T1定时器
  13.         SM0 = 0;
  14.         SM1 = 1;                 //串口工作方式1 10位异步
  15.         REN = 1;                 //串口读数使能
  16.         ET1 = 0;                 //禁止T1中断
  17.         ES  = 0;                 //禁止串口中断
  18. }

  19. void main()
  20. {
  21.         uint8 i, strf;
  22.         uint8 strDEC[4];                                      //用于LCD显示的字符串
  23.         uint8 tmp[32];                                        //用于保存PMS5003发送的32位数据
  24.         uint16 local_code, check_code;                //校验码相关
  25.         uint16 pm5, pm6;                                   //5和6对应的是PMS5003数据5、6(大气环境下PM2.5和PM10)

  26.         UART_init(); //串口初始化
  27.         LCD1602_init();
  28.         LCD1602_dis_str(0, 0, "PM2.5:");
  29.         LCD1602_dis_str(0, 1, "PM10 :");

  30.         local_code = 0;

  31.         while(1)
  32.         {
  33.                 //从第1个字节开始读取32字节数据
  34.                 do{
  35.                         while(RI==0); RI = 0;         //等待1帧数据接收完毕,完了会自动置1,软件重新置0接收数据
  36.                         strf = SBUF;
  37.                         if (strf == 0x42) i = 0;         //PMS5003数据串第1个字节为0x42
  38.                         tmp[i] = strf;
  39.                         i++;
  40.                 }while(i<32);

  41.                 for(i=0; i<30; i++)
  42.                 {
  43.                          local_code = local_code + tmp[i];                      //本地校验码
  44.                 }
  45.                 check_code = ((uint16)tmp[30] << 8) + tmp[31];       //PMS5003发送的校验码
  46.                 if (local_code == check_code)
  47.                 {
  48.                         pm5 = ((uint16)tmp[12] << 8) + tmp[13];
  49.                         pm6 = ((uint16)tmp[14] << 8) + tmp[15];
  50.                         int2str(pm5, strDEC);
  51.                         LCD1602_dis_str(7, 0, "        ");
  52.                         LCD1602_dis_str(7, 0, strDEC);
  53.                         int2str(pm6, strDEC);
  54.                         LCD1602_dis_str(7, 1, "        ");
  55.                         LCD1602_dis_str(7, 1, strDEC);
  56.                 }
  57.                 check_code = 0;
  58.                 local_code = 0;
  59.         }
  60. }
复制代码

评分

参与人数 2黑币 +80 收起 理由
阿庆永不言弃 + 30 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:529477 发表于 2019-5-29 20:28 | 只看该作者
你好,有完整的程序吗?想学习一下 谢谢啦。
回复

使用道具 举报

板凳
ID:391847 发表于 2019-10-17 12:01 | 只看该作者
大佬能给个完整程序文件吗?非常感谢
回复

使用道具 举报

地板
ID:403916 发表于 2020-4-20 11:47 | 只看该作者
同求完整程序~
回复

使用道具 举报

5#
ID:585866 发表于 2020-9-11 13:23 | 只看该作者
大佬能给个完整程序吗。想学习一下。非常感谢
回复

使用道具 举报

6#
ID:953335 发表于 2021-7-15 10:28 | 只看该作者
请问能给个完整程序吗大佬 谢谢
回复

使用道具 举报

7#
ID:93341 发表于 2021-7-15 19:25 | 只看该作者
不全呀。分享一下。谢谢。
回复

使用道具 举报

8#
ID:810045 发表于 2022-3-23 20:41 | 只看该作者
请问大佬可以给一份完整程序吗,希望可以跟大佬学习一下
回复

使用道具 举报

9#
ID:166284 发表于 2023-9-12 12:40 | 只看该作者
ther 发表于 2019-5-29 20:28
你好,有完整的程序吗?想学习一下 谢谢啦。

主要是 PMS5003的程序,    其他的没必要了吧
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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