久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1863|回復: 0
打印 上一主題 下一主題
收起左側

粉塵濃度檢測儀的設計程序

[復制鏈接]
跳轉到指定樓層
樓主
主要程序
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
***********************************************************************/
void main()
{
       uchar h;
       uint sum;
    EA = 0;
       Timer0_Init();  //定時器0初始化
       EA = 1;
       RW=0;
       L1602_init();
       while(1)
       {
               if (FlagStartRH== 1&&set==0)   //溫濕度轉換標志檢查
               {
                  TR0 = 0;
                     for(h=0;h<50;h++)
                     {
                            DA=adc0832(0);
                            sum=sum+DA;
                            delay_ms(100);
                            Key();
                     }
                     DA=sum/50;
                     sum=0;
                     DA=DA*(float)(DA/5);
                     ALARM();
                     if(set==0)
                     display();
                     TR0 = 1;
              }
              Key();
              ALARM();
       }
}
uchar ADC0832(bit mode,bit channel)     //AD轉換,返回結果
{
       uchari,dat,ndat;
      
       ADCS= 0;//拉低CS
       _nop_();
       _nop_();
      
       ADDI = 1;      //1個下降沿為高電平
       ADCLK = 1;//拉高CLK
       _nop_();
       _nop_();
       ADCLK= 0;//拉低CLK,形成下降沿1
       _nop_();
       _nop_();
      
       ADDI= mode;     //低電平為差分模式,高電平為單通道模式。     
       ADCLK= 1;//拉高CLK
       _nop_();
       _nop_();
       ADCLK= 0;//拉低CLK,形成下降沿2
       _nop_();
       _nop_();
      
       ADDI= channel;  //低電平為CH0,高電平為CH1
       ADCLK= 1;//拉高CLK
       _nop_();
       _nop_();
       ADCLK= 0;//拉低CLK,形成下降沿3
      
       ADDI= 1;//控制命令結束(經試驗必需)
       dat = 0;
       //下面開始讀取轉換后的數據,從最高位開始依次輸出(D7~D0
       for(i = 0;i <8;i++)
       {
              dat<<= 1;
              ADCLK=1;//拉高晶振
              _nop_();
              _nop_();
              ADCLK=0;//拉低晶振端形成一次晶振脈沖
              _nop_();
              _nop_();
              dat|= ADDO;
       }
       ndat= 0;         //記錄D0
       if(ADDO== 1)
       ndat|= 0x80;
       //下面開始繼續讀取反序的數據(從D1D7
       for(i= 0;i < 7;i++)
       {
              ndat>>= 1;
              ADCLK= 1;//拉高晶振
              _nop_();
              _nop_();
              ADCLK=0;//拉低晶振端形成一次晶振脈沖
              _nop_();
              _nop_();
              if(ADDO==1)
              ndat|= 0x80;
       }        
       ADCS=1;//拉高CS,結束轉換
       ADCLK=0;//拉低CLK
       ADDI=1;//拉高數據端,回到初始狀態
       if(dat==ndat)
       return(dat);
       else
       return0;   
}
/******************************************************************************
文 件 名   : adc0832.c

@file adc0832.c
@brief ADC0832驅動(8位ADC)

******************************************************************************/

/*----------------------------------------------*
* 包含頭文件                                   *
*----------------------------------------------*/
#include "main.h"

#ifdef ADC0832_DEV_DRIVER

/*----------------------------------------------*
* 宏定義                                 *
*----------------------------------------------*/
#define DEBUG   ( 1 )

#if DEBUG
#define log(X)    print_string(X)
#else
#define log(X)
#endif

///ADC0832 IO口引腳定義
sbit ADC0832_PIN_CS  = P1^2;
sbit ADC0832_PIN_DO  = P1^3;
sbit ADC0832_PIN_DI  = P1^4;
sbit ADC0832_PIN_CLK = P1^5;

///ADC0832 IO操作
#define ADC0832_do_pin_read()      ADC0832_PIN_DO

#define ADC0832_di_pin_reset()     ADC0832_PIN_DI = 0
#define ADC0832_di_pin_set()       ADC0832_PIN_DI = 1

#define ADC0832_clk_pin_reset()    ADC0832_PIN_CLK = 0
#define ADC0832_clk_pin_set()      ADC0832_PIN_CLK = 1

#define ADC0832_cs_pin_reset()     ADC0832_PIN_CS = 0
#define ADC0832_cs_pin_set()       ADC0832_PIN_CS = 1

///ADC0832參考電壓
#define ADC0832_AD_REF_VALTAGE    (5000ul)
/*----------------------------------------------*
* 枚舉定義                            *
*----------------------------------------------*/

/*----------------------------------------------*
* 結構體定義                              *
*----------------------------------------------*/

/*----------------------------------------------*
* 外部函數原型說明                                     *
*----------------------------------------------*/

/*----------------------------------------------*
* 內部函數原型說明                                   *
*----------------------------------------------*/

/*----------------------------------------------*
* 全局變量                                     *
*----------------------------------------------*/

/*----------------------------------------------*
* 常量定義                                       *
*----------------------------------------------*/

/*---------------------------------------------------------------------------*/
/**
*@brief 讀取adc0832的AD值
*
*
*@param channel 取值: 0/1, 其他值錯誤
*
*@return
*
*
*@note
*
*/
uint16_t adc0832_read_ad(uint8_t channel)
{
  uint8_t i = 0;
  uint8_t j;
  uint16_t dat = 0;
  uint8_t ndat = 0;

  if(channel == 0){
    channel = 2;
  }else if(channel == 1){
    channel = 3;
  }else{
    log("adc0832 channel err\r\n");
    return 0;
  }

  ADC0832_di_pin_set();
  _nop_();
  _nop_();
  ADC0832_cs_pin_reset();
  _nop_();
  _nop_();
  ADC0832_clk_pin_set();
  _nop_();
  _nop_();
  ADC0832_clk_pin_reset();
  _nop_();
  _nop_();
  ADC0832_clk_pin_set();
  if(channel&0x1){
    ADC0832_di_pin_set();
  }else{
    ADC0832_di_pin_reset();
  }
  _nop_();
  _nop_();
  ADC0832_clk_pin_reset();
  _nop_();
  _nop_();
  ADC0832_clk_pin_set();
  if((channel>>1)&0x1){
    ADC0832_di_pin_set();
  }else{
    ADC0832_di_pin_reset();
  }
  _nop_();
  _nop_();
  ADC0832_clk_pin_reset();
  ADC0832_di_pin_set();
  _nop_();
  _nop_();
  dat=0;
  for(i = 0; i < 8; i++)
  {
    dat |= ADC0832_do_pin_read();
    ADC0832_clk_pin_set();
    _nop_();
    _nop_();
    ADC0832_clk_pin_reset();
    _nop_();
    _nop_();
    dat <<= 1;
    if(i == 7){
      dat |= ADC0832_do_pin_read();
    }

  }  
  for(i = 0; i < 8; i++)
  {
    j = 0;
    j |= ADC0832_do_pin_read();/* 收數據 */
    ADC0832_clk_pin_set();
    _nop_();
    _nop_();
    ADC0832_clk_pin_reset();
    _nop_();
    _nop_();
    j <<= 7;
    ndat |= j;
    if( i < 7 ){
      ndat >>= 1;
    }
  }

  ADC0832_cs_pin_set();
  ADC0832_clk_pin_reset();
  dat <<= 8;
  dat |= ndat;
  dat >>= 8;

  return dat;
}
/*---------------------------------------------------------------------------*/
/**
*@brief 讀取adc0832電壓值
*
*
*@param channel 取值: 0/1, 其他值錯誤
*
*@return
*
*
*@note
*
*/
uint16_t adc0832_read_voltage_mv(uint8_t channel)
{
  uint32_t ad;

  ad = adc0832_read_ad(channel);

  ///計算電壓值
  ad *= ADC0832_AD_REF_VALTAGE;
  ad >>= 8;

  return ad;
}
/*---------------------------------------------------------------------------*/
/**
*@brief adc0832初始化
*
*
*@param none
*
*@return
*
*
*@note
*
*/
void adc0832_init(void)
{
  adc0832_read_ad(0);///<讀取Adc0832值,丟棄,防止第一次讀取值時錯誤
}
/*---------------------------------------------------------------------------*/

#endif//ADC0832_DEV_DRIVER



1.png (67.24 KB, 下載次數: 109)

1.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线播放第一页 | 粉嫩一区二区三区性色av | 欧美激情综合五月色丁香小说 | 亚洲精品电影网在线观看 | 色接久久| 久草在线高清 | 国产精品色一区二区三区 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 国产精品一区二区福利视频 | 欧美日韩在线一区二区 | 天天干天天操 | 国产日韩精品视频 | 蜜桃一区二区三区 | 国产精品日韩一区二区 | 欧美日韩精品区 | 成人国产精品久久久 | 91在线精品播放 | 亚洲精品国产第一综合99久久 | 欧美日韩成人网 | 亚洲一区自拍 | 日本免费黄色一级片 | 欧美国产亚洲一区二区 | 国产日韩精品久久 | 大伊人久久 | 高清人人天天夜夜曰狠狠狠狠 | 欧美高清视频 | 国产精品一区二区视频 | 91精品国产综合久久久久蜜臀 | 成人18亚洲xxoo | 精品九九九 | 欧美精品一区二区三区在线 | 精品欧美一区二区三区久久久 | 亚洲夜射 | 国产三级在线观看播放 | 久久999 | 国产一区二区 | 精品久久久久久久久久久久久久 | 久久精品网 | 亚洲一区视频在线 | 日韩一区在线播放 | 亚洲免费影院 |