虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

空气<b>质量检测</b>系统

  • 12345

    /****************temic*********t5557***********************************/    #include   <at892051.h>     #include   <string.h>    #include   <intrins.h>     #include   <stdio.h>     #define    uchar    unsigned char     #define    uint     unsigned int     #define    ulong    unsigned long     //STC12C2051AD的SFR定义     sfr  WDT_CONTR = 0xe1;//stc2051的看门狗??????     /**********全局常量************/    //写卡的命令     #define    write_command0       0//写密码     #define    write_command1       1//写配置字     #define    write_command2       2//密码写数据     #define    write_command3       3//唤醒     #define    write_command4       4//停止命令     #define    TRUE       1     #define    FALSE      0     #define    OK         0     #define    ERROR      255     //读卡的时间参数us     #define ts_min          250//270*11.0592/12=249//取近似的整数     #define ts_max          304//330*11.0592/12=304     #define t1_min          73//90*11.0592/12=83:-10调整     #define t1_max          156//180*11.0592/12=166     #define t2_min          184//210*11.0592/12=194     #define t2_max          267//300*11.0592/12=276     //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/     sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13     sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE     PIN=6     sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut  PIN=2     sbit wtd_sck = P1^7;//SPI总线     sbit wtd_si = P1^3;    sbit wtd_so = P1^2;    sbit iic_data = P1^2;//lcd IIC     sbit iic_clk = P1^7;    sbit led_light = P1^6;//测试绿灯     sbit led_light1 = P1^5;//测试红灯     sbit led_light_ok  = P1^1;//读卡成功标志     sbit fengmingqi = P1^5;    /***********全局变量************************************/       uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码             //uchar idata card_snr[4];   //配置字     uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7};     //存储卡上用户数据(1-7)7*4=28     uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram     uchar command; //第一个命令     uchar command1;//     //uint  temp;     uchar j,i;    uchar myaddr = 8;    //uchar ywqz_count,time_count;             //ywqz jishu:     uchar bdata DATA;    sbit BIT0 = DATA^0;    sbit BIT1 = DATA^1;    sbit BIT2 = DATA^2;    sbit BIT3 = DATA^3;    sbit BIT4 = DATA^4;    sbit BIT5 = DATA^5;    sbit BIT6 = DATA^6;    sbit BIT7 = DATA^7;    uchar bdata DATA1;    sbit BIT10 = DATA1^0;    sbit BIT11 = DATA1^1;    sbit BIT12 = DATA1^2;    sbit BIT13 = DATA1^3;    sbit BIT14 = DATA1^4;    sbit BIT15 = DATA1^5;    sbit BIT16 = DATA1^6;    sbit BIT17 = DATA1^7;    bit i_CurrentLevel;//i_CurrentLevel  BIT 00H(Saves current level of OutPut pin of U2270B)     bit timer1_end;    bit read_ok = 0;    //缓存定时值,因用同一个定时器     union HLint { uint W;    struct   {    uchar H;uchar L;   }   B; };//union HLint idata a     union HLint data a;    //缓存定时值,因用同一个定时器     union HLint0 { uint W;    struct {   uchar H;   uchar L; } B; };//union HLint idata a     union HLint0 data b;    /**********************函数原型*****************/    //读写操作     void f_readcard(void);//全部读出1~7 AOR唤醒     void f_writecard(uchar x);//根据命令写不同的内容和操作     void f_clearpassword(void);//清除密码     void f_changepassword(void);//修改密码     //功能子函数     void write_password(uchar data *data p);//写初始密码或数据     void write_block(uchar x,uchar data *data p);//不能用通用指针     void write_bit(bit x);//写位     /*子函数区*****************************************************/    void delay_2(uint x)    //延时,时间x*10us@12mhz,最小20us@12mhz     {    x--; x--;    while(x)    {      _nop_();      _nop_();      x--;    }    _nop_();//WDT_CONTR=0X3C;不能频繁的复位     _nop_();    }    /////////////////////////////////////////////////////////////////////     void initial(void)    {    SCON = 0x50; //串口方式1,允许接收     //SCON  =0x50;     //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1,     //REN=1允许接收     TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位)     TCON = 0x40; //设定时器1 允许开始计时(IT1=1)     TH1 = 0xfD;  //FB 18.432MHz 9600 波特率     TL1 = 0xfD;  //fd 11.0592 9600     IE = 0X90;     //EA=ES=1     TR1 = 1;     //启动定时器     WDT_CONTR = 0x3c;//使能看门狗     p_U2270B_Standby = 0;//单电源     PCON = 0x00;    IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0     led_light1 = 1;    led_light = 0;    p_U2270B_OutPut = 1;    }    /************************************************/    void f_readcard()//读卡     {    EA = 0;//全关,防止影响跳变的定时器计时     WDT_CONTR = 0X3C;//喂狗     p_U2270B_CFE = 1;//      delay_2(232);  //>2.5ms            /*   //   aor    用唤醒功能来防碰撞   p_U2270B_CFE = 0; delay_2(18);//start gap>150us   write_bit(1);//10=操作码读0页   write_bit(0);       write_password(&bankdata[24]);//密码block7   p_U2270B_CFE =1 ;//    delay_2(516);//编程及确认时间5.6ms   */    WDT_CONTR = 0X3C;//喂狗     led_light = 0;    b.W = 0;    while(!(read_ok == 1))    {             //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断?              while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1       TR0 = 1;      //deng xia jiang       while(p_U2270B_OutPut);//等待下降沿       TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//定时器晚启动10个周期       //同步头       if((324 < a.W) && (a.W < 353)) ;//检测同步信号1                  else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //等待上升沿        while(!p_U2270B_OutPut);   TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//b.N1<<=8;            if(a.B.L < 195);//0.5p       else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //读0~7块的数据       for(j = 0;j < 28;j++)      {       //uchar i;                  for(i = 0;i < 16;i++)//8个位        {        //等待下降沿的到来         while(p_U2270B_OutPut);                TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;              if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;//先左移再赋值          b.B.L += 0xc0;                             i++;        }        else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p         {         b.W >>= 1;         b.B.L += 0x80;                           }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;        while(!p_U2270B_OutPut);//上升                   TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;                      if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;         i++;        }        else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P         //else if(!(a.W==0))         {         b.W >>= 1;         //temp+=0x00;          //led_light1=0;led_light=1;delay_2(40000);         }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;       }       //取出奇位        DATA = b.B.L;       BIT13 = BIT7;    BIT12 = BIT5;    BIT11 = BIT3;    BIT10 = BIT1;       DATA = b.B.H;       BIT17 = BIT7;    BIT16 = BIT5;    BIT15 = BIT3;    BIT14 = BIT1;       bankdata[j] = DATA1;      }              read_ok = 1;//读卡完成了     read_error:    _nop_();    }       }    /***************************************************/    void f_writecard(uchar x)//写卡     {    p_U2270B_CFE = 1;    delay_2(232);  //>2.5ms            //psw=0 standard write     if (x == write_command0)//写密码:初始化密码     {      uchar i;      uchar data *data p;      p = cominceptbuff;      p_U2270B_CFE = 0;   delay_2(31);//start gap>330us       write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0       for(i = 0;i < 35;i++)      {       write_bit(1);//写数据位1       }      p_U2270B_CFE = 1;      led_light1 = 0;   led_light = 1;   delay_2(40000);//测试使用       //write_block(cominceptbuff[4],p);       p_U2270B_CFE = 1;      bankdata[20] = cominceptbuff[0];//密码存入       bankdata[21] = cominceptbuff[1];      bankdata[22] = cominceptbuff[2];      bankdata[23] = cominceptbuff[3];    }    else if (x == write_command1)//配置卡参数:初始化     {      uchar data *data p;      p = cominceptbuff;      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0               write_block(cominceptbuff[4],p);      p_U2270B_CFE=  1;    }    //psw=1  pssword mode     else if(x == write_command2)  //密码写数据    {      uchar data*data p;      p = &bankdata[24];      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_password(p);//发口令       write_bit(0);//写锁定位0       p = cominceptbuff;      write_block(cominceptbuff[4],p);//写数据            }    else if(x == write_command3)//aor    //唤醒 {      //cominceptbuff[1]操作码10 X xxxxxB       uchar data *data p;      p = cominceptbuff;      write_bit(1);//10       write_bit(0);             write_password(p);//密码       p_U2270B_CFE = 1;//此时数据不停的循环传出     }    else //停止操作码     {      write_bit(1);//11       write_bit(1);             p_U2270B_CFE = 1;         }    p_U2270B_CFE = 1;    delay_2(560);//5.6ms     }    /************************************/    void f_clearpassword()//清除密码     {    uchar data *data p;    uchar i,x;          p = &bankdata[24];//原密码     p_U2270B_CFE = 0; delay_2(18);//start gap>150us     //操作码10:10xxxxxxB     write_bit(1);    write_bit(0);              for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x00,p);//写新配置参数:pwd=0             //密码无效:即清除密码     DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {    write_bit(BIT7);    DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /*********************************/    void f_changepassword()//修改密码            {       uchar data *data p;    uchar i,x,addr;    addr = 0x07;//block7     p = &Nkey_a[0];//原密码     DATA = 0x80;//操作码10:10xxxxxxB     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT7);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x07,p);//写新密码     p_U2270B_CFE = 1;    bankdata[24] = cominceptbuff[0];//密码存入     bankdata[25] = cominceptbuff[1];    bankdata[26] = cominceptbuff[2];    bankdata[27] = cominceptbuff[3];    DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /***************************子函数***********************************/    void write_bit(bit x)//写一位     {    if(x)    {      p_U2270B_CFE = 1;   delay_2(32);//448*11.0592/120=42延时448us       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写1     }    else    {      p_U2270B_CFE = 1;   delay_2(92);//192*11.0592/120=18       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写0     }    }    /*******************写一个block*******************/    void write_block(uchar addr,uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//block0数据     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    DATA = addr <<= 5;//0地址     for(i = 0;i < 3;i++)    {      write_bit(BIT7);      DATA <<= 1;    }                   }    /*************************************************/    void write_password(uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }        }   /*************************************************/   void main()    {    initial();    TI = RI = 0;    ES = 1;    EA = 1;  delay_2(28);   //f_readcard();     while(1) {   f_readcard();      //读卡   f_writecard(command1);  //写卡    f_clearpassword();   //清除密码     f_changepassword();    //修改密码 } }

    标签: 12345

    上传时间: 2017-10-20

    上传用户:my_lcs

  • 智能温室大棚控制系统设计

    近年来反季节种植已成火热趋势,温室大棚的普及十分迅速,而温室大棚对自动化、智能化的要求也越来越迫切,本系统将温室大棚的温湿度、二氧化碳浓度各个方面的检测,通风、浇灌、温度、喷洒农药等各个方面的控制进行综合系统研究,实现温室大棚对自动化、智能化的要求。这一系统是基于单片机控制的智能检测,控制系统包含单片机主控模块、感应检测模块、传感模块,显示、控制模块等[1]。从而提高温室大棚的种植效率,减少劳动力,提高利润等。In recent years,counter-season planting has become a hot trend featuring the rapid popularization of greenhouse and urgent requirement for the automation and intellectualization of greenhouse.This paper offers a comprehensive and systematic study of the monitoring of temperature,humidity and carbon dioxide concentration in the greenhouse and the control of ventilation,irrigation,temperature and pesticide spraying in order to achieve automation and intellectualization in greenhouse.This system is based on the intelligent detection controlled by single chip computer with the control system including the main control module,induction detection module,sensing module,display and control module of single chip computer,which is effective in improving planting efficiency of greenhouse,reducing labor force and increasing profits.

    标签: 智能温室大棚 控制系统

    上传时间: 2022-03-27

    上传用户:

  • ModelSim do文件使用技巧

    1 do文件简介do文件是一次执行多条命令的脚本,通过do文件可以把多个操作步骤简化成一条命令。2 do文件建立do文件建立方式较多,常用的建立方式有如下两种:a)在ModelSim软件中执行【File]->【New】->【Sourcel-【do1,会在ModelSim的MDI窗口中打开一个新的文件窗口,编辑完该do文件后执行【File]->【Save As.】即可保存成do文件:b)在Windows系统中新建一个记事本,在“另存为”的时候把后缀名改为.do也可以保存为do文件,可以以记事本的形式进行编辑,也可在ModelSim中打开进行编辑。3 do文件编写步骤ModelSim仿真的一般步骤如下:a)创建一个工程和工程库;b)加载设计文件,包括源文件和testbench文件:c)编译源文件;d)运行仿真,并查看结果:e)进行工程调试。

    标签: do文件

    上传时间: 2022-06-26

    上传用户:

  • 单片机应用技术(C语言版)[王静霞][程序源代码].zip

    主要程序代码有 单片机与LED数码管接口 LED大屏幕显示器和接口 字符LCD 液晶显示和接口 单片机与键盘接口 A/D转换器接口 D/A 转换器接口 串行通信基础 MCS-51的串行接口 MCS-51单片机双机通信 RS-232C串行通信总线标准及其接口 存储器的扩展 串行口的I/O口扩展 数字钟的设计与制作 单片机温度检测记录系统

    标签: zip 单片机 C语言 应用技术

    上传时间: 2013-08-01

    上传用户:shwjl

  • 动态光谱数据采集与预处理

    人体血液成份的无创检测是生物医学领域尚未攻克的前沿课题之一,动态光谱法在理论上克服了其它检测方法难以逾越的障碍——个体差异和测量条件对检测结果的影响。实现动态光谱检测,其关键在于采集多波长的光电容积脉搏波信号,并对其进行处理。针对动态光谱检测中信号微弱、信噪比低、处理数据量大的特点,本文设计了基于FPGA和面阵CCD摄像头的动态光谱数据采集与预处理系统,提高检测精度,采集出满足动态光谱信号提取要求的光电脉搏波;并对动态光谱频域提取法的核心算法FFT的FPGA实现进行研究。 课题提出用高灵敏度的面阵CCD摄像头替代常规光栅光谱仪中的光电接收器,实现对多波长的光电容积脉搏波的检测。结合面阵CCD的二维图像特点,采用信号累加法去除噪声,提高信号的信噪比。 创新性的提出一种不同于以往的信号累加方法——将处于同一行的视频信号在采样过程中直接累加,然后再进行传输和存储。不同于帧累加和异行累加,这种同行累加方式不但大大的提高了信号的信噪比,同时减小了数据的传输速度和传输量,降低了对存储器容量的要求,改善了动态光谱信号检测系统的性能。 针对面阵CCD摄像头输出的复合视频信号的特点,设计视频信号解调电路,得到高速、高精度的数字视频信号和准确的视频同步信号,用于后续的视频信号采集与处理。 根据动态光谱信号检测和视频信号采集的要求,选择可编程逻辑器件FPGA作为硬件平台,设计并实现了基于FPGA和面阵CCD摄像头的光电脉搏波采集与预处理系统。该系统实现了视频信号的精确定位,通过光谱信号的高速同行累加,实现了光电脉搏波信号的高精度检测。系统采用基于FPGA的Nios II嵌入式处理器系统,通过对其应用程序的开发,可靠的实现了数据的采集、传输和存储,提高了系统的集成度,降低了开发成本。 为实现动态光谱信号的频域提取,研究了基于FPGA的FFT实现方案,对各关键模块进行设计,为动态光谱信号的进一步处理打下良好的基础。 最后,通过实验证明了系统数据采集的正确性和信号预处理的可行性,得到了符合动态光谱信号提取要求的脉搏波信号。

    标签: 动态 光谱数据采集 预处理

    上传时间: 2013-04-24

    上传用户:cknck

  • 基于FPGA的空时分组码的设计与实现

    随着第三代移动通信系统(3G)向商业化的迈进,以及超三代(Beyond 3G) 或被称之为第四代(4G)移动通信系统的发展,对更高速率、更大容量和更好服务质量的通信系统的需求正在不断增长。另一方面,可利用的无线频谱资源是有限...

    标签: FPGA 空时分组码

    上传时间: 2013-04-24

    上传用户:mslj2008

  • 微电脑型数学演算式隔离传送器

    特点: 精确度0.1%满刻度 可作各式數學演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A|/ 16 BIT类比输出功能 输入与输出绝缘耐压2仟伏特/1分钟(input/output/power) 宽范围交直流兩用電源設計 尺寸小,穩定性高

    标签: 微电脑 数学演算 隔离传送器

    上传时间: 2014-12-23

    上传用户:ydd3625

  • 应用电子技术

    应用电子技术是一门学科,培养具备智能电子产品设计、质量检测、生产管理等方面的基本理论知识和基本技能,能在电子领域和部门生产第一线从事智能电子产品的设计与开发、质量检测、生产管理、智能电子产品的销售和技术支持技能应用型人才。也有同名书籍,一般作为教材使用。

    标签: 应用电子技术

    上传时间: 2014-12-23

    上传用户:qlpqlq

  • 微电脑型数学演算式双输出隔离传送器

    特点(FEATURES) 精确度0.1%满刻度 (Accuracy 0.1%F.S.) 可作各式数学演算式功能如:A+B/A-B/AxB/A/B/A&B(Hi or Lo)/|A| (Math functioA+B/A-B/AxB/A/B/A&B(Hi&Lo)/|A|/etc.....) 16 BIT 类比输出功能(16 bit DAC isolating analog output function) 输入/输出1/输出2绝缘耐压2仟伏特/1分钟(Dielectric strength 2KVac/1min. (input/output1/output2/power)) 宽范围交直流两用电源设计(Wide input range for auxiliary power) 尺寸小,稳定性高(Dimension small and High stability)

    标签: 微电脑 数学演算 输出 隔离传送器

    上传时间: 2013-11-24

    上传用户:541657925

  • 单片直接驱动数码管的计数器程序

      a_bit equ 20h ;个位数存放处   b_bit equ 21h ;十位数存放处   temp equ 22h ;计数器寄存器   star: mov temp,#0 ;初始化计数器   stlop: acall display   inc temp   mov a,temp   cjne a,#100,next ;=100重来   mov temp,#0   next: ljmp stlop   ;显示子程序   display: mov a,temp ;将temp中的十六进制数转换成10进制   mov b,#10 ;10进制/10=10进制   div ab   mov b_bit,a ;十位在a   mov a_bit,b ;个位在b   mov dptr,#numtab ;指定查表启始地址   mov r0,#4   dpl1: mov r1,#250 ;显示1000次   dplop: mov a,a_bit ;取个位数   MOVC A,@A+DPTR ;查个位数的7段代码   mov p0,a ;送出个位的7段代码

    标签: 直接驱动 数码管 计数器 程序

    上传时间: 2013-11-06

    上传用户:lx9076