DSM501A灰尘传感器+51单片机C语言程序完整版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
//*********************************************************
//***********************主程序****************************
//*********************************************************
//qian=temp_data/1000 ;
//temp_data=temp_data%1000; //取余运算;
//bai=temp_data/100;
temp_data=temp_data%100; //取余运算
shi=temp_data/10;
temp_data=temp_data%10; //取余运算
#define uint unsigned int
//*********************************************
//MON51必须用到的
code unsigned char stop[3] _at_ 0x3b;
//*********************************************
#include <REG51.H>
#include <math.h> //Keil library
#include <stdio.h> //Keil library
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
uint lt_time=0; //低脉冲时间
uchar lt_rate=0; //低脉冲率
void delay_nms(unsigned int k);
void conversion(uint temp_data);
typedef unsigned short WORD;
BYTE BUF[8]; //接收数据缓存区
uchar ge,shi,bai,qian,wan; //显示变量
uint number_t0=0;
ge=temp_data;
//disbuff[0]=0;
//disbuff[1]=wan;
//disbuff[2]=qian;
//disbuff[3]=bai;
disbuff[4]=shi;
disbuff[5]=ge;
}
/********************************************************/
//***************************************
// 空气质量测试仪设计
// 使用单片机STC90C516RD
// 晶振:11.0592M
// 显示:LED数码管(适用DICE-5212K实验箱)
// 编译环境 Keil uVision2
// 时间:2014年6月24日
void main()
{
com8155=0x43; //8155控制字
TMOD=0x01;
TH0=0xfc; //晶振:11.0592MHz,定时1ms
TL0=0x66;
ET0=1;
TR0=1;
EA=1;
while(1) //循环
{
conversion(lt_rate); //计算数据和显示
Display(); //显示光照度
number_t0=0; //30S时间计数器和低脉冲率变量初始化为0,开始下一个测量周期
lt_time=0;
TR0=1; // 启动定时器0
}
TH0=0xfc;
TL0=0x66;
}
}
void Display(void); //扫描数码管
//------------------------------------
void Delay5us();
void Delay5ms();
//-----------------------------------
//*********************************************************
timer0() interrupt 1 using 1 //T/C0中断服务程序, 每1ms中断一次
{
number_t0++;
if(PWM==0) lt_time++; //每1ms检测PWM脉冲是否为低电平
//毫秒延时*****************nt k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}}
unsigned char const positon[6]={ 0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char disbuff[6] = { 0,0,0,0,0,0};
sbit PWM=P1^0; //脉冲输出
typedef unsigned char BYTE;
#define com8155 XBYTE[0xff20] //控制字
#define pa8155 XBYTE[0xff21] //位扫描
#define pb8155 XBYTE[0xff22] //段码位
unsigned char posit=0;
unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
void Display(void) //扫描数码管
{
for(posit=4;posit<6;posit++)
{
pb8155=discode[disbuff[posit]];
pa8155=positon[posit];
//编程思路:
//简单的就是做一个1ms的定时中断(要准点可以定时时间减少,反之定时时间加大)
//在中断中检测IO口的电平,是低就 加1
//30s内总共检测30000次 ,用你检测累加的值除以300就是百分数,也就是低脉冲率。
//用数码管最后两位显示
//****************************************
}
//*********************************************************
void conversion(uint temp_data) // 数据转换出 个,十,百,千,万
{
//wan=temp_data/10000 ;
//temp_data=temp_data%10000; //取余运算
delay_nms(4); //延时2ms ;
}
}
//*********************************************************
//*********************定时器T0用于定时1MS********
if(number_t0==30000) //munber_t0计数到30000MS,即30S,计算低脉冲率
{ TR0=0; //关闭定时器0
lt_rate=(int)(lt_time/300); //计算低脉冲率
相关文档
最新文档