完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我打算用1051的烟尘传感器组一个pm2.5的检测,1051的传感器是数字输出的,不需要AD0832的模数转换,通过串口向51单片机发送数据,我现在打算把1051发送的7位数据放入一个数组里,通过利用这个数组中的数据进行运算,得到结果,但是不知道如何把传感器输出的数据写入一维数组里,有没有大神帮忙写一下具体的程序!!!急求
|
|
相关推荐
1个回答
|
|
没有用过这款传感器,根据传感器资料,7位数据分为起始位、有效H位、有效L位、随机H位、随机L位、结束位。给你写了一个验证程序,用串口助手模拟及数码管检验无误,供参考: //AA 00 10 00 4B 5B FF #include #define uint unsigned int #define uchar unsigned char ***it dula=P2^6; //段选 ***it wela=P2^7; //位选 uchar code table[]={ //共阴数码管0~F数组 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uchar table0[] ="OK "; //用于串口助手返回验证 uchar table1[]="ERROR ";//用于串口助手返回验证 uchar rec_buf[7]; //缓存 uint V_data; //收到的16位有效数据变量 uint swan,wan,qian,bai,shi,ge;//数码管显示位 bit flag=0; //接收完成标 /*************初始化串口**************/ void InitUART() //2400波特率@11.0592MHz { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 TMOD= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xF4; //设定定时初值 TH1 = 0xF4; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 EA = 1; //开总中断 ES = 1; //开串口中断 TR1 = 1; //启动定时器1 } /**********串口发送函数*************/ void SendOneByte(uchar c) { SBUF = c; //发送数据 while(!TI); //等待发送完成 TI = 0; //发送中断请求标志位清0 } /************数据解析程序*************/ void analysis() { uchar i,j; //临时变量 if(flag==1) //7位数据串接收完成 { ES=0; //关串口中断 flag=0; //接收完成标志清0 j=rec_buf[1]+rec_buf[2]+rec_buf[3]+rec_buf[4];//数据和 if(rec_buf[5]==j)//验证数据和 { V_data=(rec_buf[1]<<8)|rec_buf[2];//恢复16位有效数据 for(i=0;i<3;i++) SendOneByte(table0);//返回OK } else for(i=0;i<6;i++) SendOneByte(table1);//返回ERROR ES=1; //开串口中断 } } /*************数据分解***************/ void Transformation() { swan = V_data/100000; // 十万位 wan = V_data%100000/10000; // 万位 qian = V_data%10000/1000; // 千位 bai = V_data%1000/100; // 百位 shi = V_data%100/10; // 十位 ge = V_data%10; // 个位 } /**********6位数码管显示程序************/ void display() { static uchar xx=0; //分时显示变量 switch(xx) { case 0: dula=0; P0=table[swan]; //显示十万位段码 dula=1; dula=0; wela=0; P0=0x7e; //显示十万位码 wela=1; wela=0; xx=1; break; case 1: dula=0; P0=table[wan]; //显示万位段码 dula=1; dula=0; wela=0; P0=0x7d; //显示万位位码 wela=1; wela=0; xx=2; break; case 2: P0=table[qian]; //显示千位段码 dula=1; dula=0; P0=0x7b; //显示千位位码 wela=1; wela=0; xx=3; break; case 3: P0=table[bai]; //显示百位段码 dula=1; dula=0; P0=0x77; //显示百位位码 wela=1; wela=0; xx=4; break; case 4: P0=table[shi]; //显示十位段码 dula=1; dula=0; P0=0xef; //显示十位位码 wela=1; wela=0; xx=5; break; case 5: P0=table[ge]; //显示个位段码 dula=1; dula=0; P0=0xdf; //显示个位位码 wela=1; wela=0; xx=0; break; } } /**************主程序**************/ void main() { InitUART(); //初始化串口 while(1) { analysis(); //数据解析 Transformation();//数据分解 display(); //数码管显示 } } /*********串口中断服务程序**********/ void UARTInterrupt() interrupt 4 { static uchar num=0; //静态计数变量 RI=0; //接收中断请求标志位清0 rec_buf[num]=SBUF; //接收到的数据串保存在缓存数组 if(rec_buf[0]==0xAA) //验证数据头(起始位) { num++; if(num>=7) { flag=1; //接收完成标志置1 num=0; //计数变量清0 } } } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
157 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
825 浏览 0 评论
2372 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2226 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1694 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5713 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-23 15:29 , Processed in 0.576323 second(s), Total 70, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号