最近在用SDS011激光PM2.5传感器,想用数码管显示数值,但是一直收不到数据,,求助

2019-03-24 16:55发布

代码如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit led=P1^1;
uchar rebuf[32],renum=0,flagRI=0,numpm25=0;
uchar code table[]={
   0x3f,0x06,0x5b,0x4f,
   0x66,0x6d,0x7d,0x07,
   0x7f,0x6f,0x77,0x7c,
   0x39,0x5e,0x79,0x71};
void delayms(uint xms);
void display(uchar t)
{
uchar ge,shi,bai;
ge=t%10;
shi=t%100/10;
bai=t/100;
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);

dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(5);
}

void init()
{
TMOD=0x20; //设定T1定时器工作方式2
TH1=0xfd;  //装初值
TL1=0xfd;
TR1=1;    //启动T1定时器
REN=1;//允许串口接收
SM0=0;  //设定串口工作方式
SM1=1;
EA=1; //开总中断
ES=1; //开串口中断
}
void main()
{
init();
while(1)
{
  if(flagRI==1)
  {
  // led=0;
  
  // display(numpm25);
   flagRI=0;
  }
}
}
void receive() interrupt 4
{
if(RI==1)
{
// led=0;
  RI=0;  //清除标志位
  rebuf[renum++]=SBUF; //单片机接收串口数据
  
  if(!(rebuf[0]==0xaa))  //如果帧头错误,清缓存
  {
   renum=0;
   rebuf[0]=0;
  }
  led=0;
  if(renum==10)    //数据接收完毕
  { //led=0;
   if(rebuf[9]==0xab)    //判断帧尾
   {
    numpm25=(rebuf[3]*256+rebuf[2])/10;
   
    flagRI=1;
   }
   renum=0;  //清缓存
  }
}
}
有没有大佬能帮我看一下,,

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
ienglgge
1楼-- · 2019-03-25 09:07
 精彩回答 2  元偷偷看……
gaoyingjia
2楼-- · 2019-03-25 14:39
非常感谢,程序已经编出
倪波
3楼-- · 2019-03-25 16:37
gaoyingjia 发表于 2018-7-21 16:45
非常感谢,程序已经编出

能麻烦楼主分享一下完整的程序和仿真电路图吗,谢谢你
gaoyingjia
4楼-- · 2019-03-25 21:36
 精彩回答 2  元偷偷看……
gaoyingjia
5楼-- · 2019-03-26 02:24
在文件里
张振谦
6楼-- · 2019-03-26 08:24
gaoyingjia 发表于 2018-11-10 15:46
在文件里

值得学习

一周热门 更多>