亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.#3

?? 一個采用C8051F020+CH372實現的帶USB功能的流量測控系統
?? #3
?? 第 1 頁 / 共 3 頁
字號:
/********************************************************************************************************
**				                                  RidenFlow
**
**                                          版權所有 (c) 2007,羅建
**                                               保留所有權利
**
**                                                  V1.0
**
**
**-------------------------------------------------文件信息----------------------------------------------
**文   件   名: Main.C
**設   計   者: 羅建
**最后修改日期: 2007年11月24日
**描        述: 源程序。
**其        它:MCU采用C8051F020,外部晶振為22.1184MHz,采用臺達3.8'LCD觸摸屏顯示測量數據和輸入配置信息,
**              并控制電磁閥和比例閥對,
**所屬項目概述:RIDEN FLOW流量計是用于測試氣體流量的裝置,其工作原理為:壓縮空氣經空氣過濾器到達比例控制閥,
**              經比例控制閥調壓穩定后,通過氣路通斷控制閥,到達氣體流量計,然后進入產品。該裝置功能就是測
**              量流過氣體的質量流量。
**              各部件的作用如下:
**              1、比例控制閥:其作用是調節前端的高壓氣體以使其穩定在設置的壓力值附近,為測試提供一個穩定的
**                 氣源。
**              2、氣路通斷控制閥:在每一個測量周期內,此閥通斷一次,即在測試檢測過程中打開,測試完成后關閉,
**                 直到下一個測試開始。
**              3、氣體流量計:用于測量流經該傳感器的壓縮空氣的流量。
**基本技術參數:1、被測介質:            壓縮空氣,<0.8MPa;
**              2、氣體流量范圍:        0-50L/min(超量程50% 顯示 Out Range);
**              3、流量精度:            0.01L/min;
**              4、采集及顯示頻率:      3Hz;
**              5、測試壓力:            0-50KPa(自動調節,穩壓);
**              6、測試壓力精度:        0.1KPa;
**              7、充氣時間:            0-999.9S;
**              8、測試時間:            0-999.9S;
**              9、校準系數:            5段;
**              10、通訊接口(To PC):  RS232。
**
**-----------------------------------------------歷史版本信息--------------------------------------------
** 設計者: 羅建
** 版  本: V1.00
** 日 期: 2007年11月24日
** 描 述: 原始版本
**
**-----------------------------------------------當前版本修訂--------------------------------------------
** 修改者: 羅建
** 版  本: V1.00
** 日 期: 2007年11月24日
** 描 述: 原始版本。
**
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <c8051f020.h>                      // SFR declarations
//#include <Intrins.h>
//#include <String.h>
#include "GlobeDef.h"

//-------------------------------------------------------------------------------------------------------
/* C8051F02x單片機的16位SFR定義 */
sfr16 DP          =  0x82;                  // data pointer
sfr16 TMR3RL      =  0x92;                  // Timer3 reload value
sfr16 TMR3        =  0x94;                  // Timer3 counter
sfr16 ADC0        =  0xbe;                  // ADC0 data
sfr16 ADC0GT      =  0xc4;                  // ADC0 greater than window
sfr16 ADC0LT      =  0xc6;                  // ADC0 less than window
sfr16 RCAP2       =  0xca;                  // Timer2 capture/reload
sfr16 T2          =  0xcc;                  // Timer2
sfr16 RCAP4       =  0xe4;                  // Timer4 capture/reload
sfr16 T4          =  0xf4;                  // Timer4
sfr16 DAC0        =  0xd2;                  // DAC0 data
sfr16 DAC1        =  0xd5;                  // DAC1 data

//-------------------------------------------------------------------------------------------------------
/* 本項目對C8051F02x單片機的引腳重定義,其中,XBR0 = 0x1F,XBR1 = 0x14,XBR2 = 0x44,P0MDOUT = 0x15,P1MDOUT = 0x01,P2MDOUT = 0x00,P3MDOUT = 0x80 */
// P0
sbit  UART0_TX    =  P0^0;                  // XBR0.2 = 1(UART0EN = 1),P0MDOUT.0 = 1,TX0作為推挽方式
sbit  UART0_RX    =  P0^1;
sbit  SPI_SCK     =  P0^2;                  // XBR0.1 = 1(SPI0EN = 1),P0MDOUT.2 = 1,P0MDOUT.4 = 1,SPI_SCK和SPI_MOSI作為推挽方式
sbit  SPI_MISO    =  P0^3;
sbit  SPI_MOSI    =  P0^4;
sbit  SPI_NSS     =  P0^5;
sbit  I2C_SDA     =  P0^6;                  // XBR0.0 = 1(SMB0EN = 1)
sbit  I2C_SCL     =  P0^7;
// P1
sbit  UART1_TX    =  P1^0;                  // XBR2.2 = 1(UART1EN = 1),P1MDOUT.0 = 1,TX1作為推挽方式
sbit  UART1_RX    =  P1^1;
sbit  PCA0_CEX0   =  P1^2;                  // XBR0.[5..3] = 011(PCA0ME = 011),CEX0、CEX1和CEX2連到三個端口上
sbit  PCA0_CEX1   =  P1^3;
sbit  PCA0_CEX2   =  P1^4;
sbit  INT0_SCK    =  P1^5;                  // XBR1.2 = 1(INT0E = 1),P1MDOUT.5 = 0,漏極開路方式,并使INT0_SCK = 1將其配置為數字輸入
sbit  INT1_CS     =  P1^6;                  // XBR1.4 = 1(INT1E = 1),P1MDOUT.6 = 0,漏極開路方式,并使INT1_CS = 1將其配置為數字輸入
sbit  INT2_MOSI   =  P1^7;                  // GPIO,P1MDOUT.7 = 0,漏極開路方式,并使INT2_MOSI = 1將其配置為數字輸入
// P2
sbit  KEY_START   =  P2^0;                  // P2MDOUT.0 = 0,漏極開路方式,并使KEY_START = 1將其配置為數字輸入
sbit  KEY_STOP    =  P2^1;                  // P2MDOUT.1 = 0,漏極開路方式,并使KEY_STOP = 1將其配置為數字輸入
sbit  PORT_P22    =  P2^2;                  // 保留
sbit  PORT_P23    =  P2^3;                  // 保留
sbit  DRV_PASS    =  P2^4;                  // P2MDOUT.4 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  DRV_FAIL    =  P2^5;                  // P2MDOUT.5 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  DRV_WARN    =  P2^6;                  // P2MDOUT.6 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  DRV_VALVE   =  P2^7;                  // P2MDOUT.7 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
// P3
sbit  LCD_RS      =  P3^0;                  // P3MDOUT.0 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  LCD_RW      =  P3^1;                  // P3MDOUT.1 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  LCD_E       =  P3^2;                  // P3MDOUT.2 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  LCD_CS1     =  P3^3;                  // P3MDOUT.3 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  LCD_CS2     =  P3^4;                  // P3MDOUT.4 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  LCD_LED     =  P3^5;                  // P3MDOUT.5 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  LCD_RST     =  P3^6;                  // P3MDOUT.6 = 0,漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定
sbit  SPI_CS      =  P3^7;                  // P3MDOUT.7 = 1,推挽方式,作為數字輸出,高電平由內部弱上拉電阻確定
// P4
sfr   LCD_DBX     =  0x84;                  // P4,P74OUT = 0x00,P4口被配置為漏極開路方式,作為數字輸出,高電平由外部上拉電阻確定

// ------------------------------------------------------------------------------------------------------
/* 定義位變量 */
bit       gbReadyWarn;                           /* 指示是否進入告警超時檢測過程,0~否,1~是 */
bit       gbCanGetKey;                           /* 指示是否可以再次檢測按鍵,0~否,1~是 */
bit       gbTimeOver;                            /* 指示規定的定時間隔時間(100ms)時否到,0~未到,1~已到 */
bit       gbTestOver;                            /* 指示當前是否已完成或退出了檢測狀態,0~非檢測狀態或檢測過程未結束,1~檢測完成(但未退出檢測進程) */
bit       gbSyncOneOK0;                          /* 指示串口0數據幀的第一個同步字節是否接收完畢,0~未收到,1~收到 */
bit       gbSyncTwoOK0;                          /* 指示串口0數據幀的第二個同步字節是否接收完畢,0~未收到,1~收到 */
bit       gbSyncOneOK1;                          /* 指示串口1數據幀的第一個同步字節是否接收完畢,0~未收到,1~收到 */
bit       gbSyncTwoOK1;                          /* 指示串口1數據幀的第二個同步字節是否接收完畢,0~未收到,1~收到 */
bit       gbStarted;                             /* 指示<啟動鍵>是否按下,0~未按下,1~按下 */
bit       gbFilling;                             /* 指示當前是否工作于充氣狀態,0~否,1~是 */
bit       gbTesting;                             /* 指示當前是否工作于測試狀態,0~否,1~是 */

/* 定義字節變量 */
INT8U     data  gnCntADC;                        /* ADC0采集間隔時間計數器(為了降低LCD的刷新率) */
INT8U     data  gnCntWarn;                       /* 壓力告警超時計數器 */
INT8U     data  gnCntAdjust;                     /* 壓力調節時間計數器 */
INT8U     data  gnCnt10ms;                       /* 10ms定時計數器,用于實現100ms定時 */
INT8U     data  gnCntGetKey;                     /* 兩次檢測按鍵之間的時間間隔(實際間隔是該值乘以100ms */
INT8U     data  gnTxdID0;                        /* 串口UART0發送緩沖區數組索引 */
INT8U     data  gnRxdID0;                        /* 串口UART0接收緩沖區數組索引 */
INT8U     data  gnRxdID1;                        /* 串口UART1接收緩沖區數組索引 */
INT8U     data  gnTxdNums0;                      /* 串口UART0發送緩沖區數組中的數據個數,即要發送的數據個數 */
INT8U     data  gnT0OverCnt;                     /* 代表T0中斷溢出的次數 */
INT8U     idata gnRxdBuf0[64];                   /* 代表串口UART0接收緩沖區數組 */
INT8U     idata gnRxdBuf1[2];                    /* 代表串口UART1接收緩沖區數組,高字節在前 */
INT8U     idata gnTxdBuf0[16];                   /* 代表串口UART0發送緩沖區數組 */

/* 定義字變量 */

INT16U    data  gnPressGet=0;                    /* 測得的氣體壓力(單位為0.1KPa) */
INT16U    data  gnLeakGet=0;                     /* 測得的氣體流量(單位為0.01L/min) */
INT16U    data  gnPressSet=0;                    /* 用戶通過觸摸屏設定的氣體壓力(單位為0.1KPa) */
INT16U    data  gnPressMax=0;                    /* 用戶通過觸摸屏設定的允許最大氣體壓力(單位為0.1KPa) */
INT16U    data  gnPressMin=0;                    /* 用戶通過觸摸屏設定的允許最小氣體壓力(單位為0.1KPa) */
INT16U    data  gnLeakMax =0;                    /* 用戶通過觸摸屏設定的允許最大氣體流量(單位為0.01L/min) */
INT16U    data  gnCurrTime=0;                    /* 代表當前操作正在進行的時間 */
INT16U    data  gnFillTime=0;                    /* 用戶通過觸摸屏設定的充氣時間 */
INT16U    data  gnTestTime=0;                    /* 用戶通過觸摸屏設定的測試時間 */
INT16U    idata gnLeakAreaMax[6];                /* 用戶通過觸摸屏設定的分段修正流量最大值(單位為0.01L/min) */
INT16U    idata gnLeakAreaCoef[6];               /* 用戶通過觸摸屏設定的分段修正流量系數 */
INT16U    data  gnPressOut=0;                    /* 輸出到比例控制閥的壓力信號值(單位為0.1KPa) */

INT32U    data  gnADC0Res=0;                     /* ADC0的轉換結果(數字量) */
INT32U    data  gnLeakRes=0;
// ------------------------------------------------------------------------------------------------------
/* 函數聲明 */
void DeviceInit(void);
void SysInit(void);
void SetRxd0OK(void);
void SetRxd1OK(void);
void AdjustPress(void);
void DoneKey(void);
void DoneTest(void);

// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函數名稱: main
** 功能描述: 主程序。
** 輸  入: 無
** 輸  出: 無
** 全局變量: 略
** 全局常量:略
** 調用模塊:略
** 設 計 者:羅建                                                                日  期:2007年12月09日
** 版    本:V1.00,原始版本
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void main(void)
{
  WDTCN = 0xDE;                             // 禁止看門狗定時器
  WDTCN = 0xAD;
  DeviceInit();                             // 初始化片上系統外圍設備   
  EIP2|=0x40;
  SysInit();                                // 初始化系統變量

  //
  PCA0_CEX0 = 0;

  while (TRUE)                              // 主程序循環
  {
    while (!gbTimeOver);                    // 檢查定時間隔是否到(0.1秒)
    gbTimeOver = FALSE;                     // 準備重新延時
	if (gnCntADC-- == 0)
	{
	  gnCntADC = ADC_WAIT;
      AD0EN = TRUE;
    }
	// 檢查壓力是否超出設定的最大與最小值,是則警告  
    if ((gnPressGet > gnPressMax) || (gnPressGet < gnPressMin))
	{
	  if (!gbReadyWarn)                     // 當首次檢測到壓力超出設定值時,開始計時
	  {
	    gbReadyWarn = TRUE;
	    gnCntWarn = WARN_WAIT;
      }
      else if (gnCntWarn-- == 0)            // 當壓力超出設定值的時間持續10秒后,輸出報警指示
	  {
	    gbReadyWarn = FALSE;
        DRV_WARN = OPEN;        
	  }
    }
	else                                    // 壓力在設定值區間內,不用報警
	{
	  gbReadyWarn = FALSE;
      gnCntWarn = 0;
      DRV_WARN = CLOSE;
    }
    AdjustPress();                          // 進行壓力調節
    DoneKey();                              // 按鍵檢測處理
    DoneTest();                             // 執行流量測試
  }
}

// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函數名稱: DeviceInit
** 功能描述: 片上系統外圍設備初始化子程序。
** 輸  入: 無
** 輸  出: 無
** 全局變量: 略
** 全局常量:略
** 調用模塊:略
** 其它說明:外部系統時鐘啟動過程建議為:
**           1)允許外部振蕩器;
**           2)等待至少1ms;
**           3)查詢XTLVLD是否由“0”=>“1”;
**           4)將系統時鐘切換到外部振蕩器。
**
** 設 計 者:羅建                                                                日  期:2007年12月09日
** 版    本:V1.00,原始版本
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void DeviceInit(void)
{
  int i;                                    // 延時計數器

  // 系統時鐘初始化
  OSCXCN = 0x67;                            // 啟動外部22.1184MHz晶體振蕩器
  for (i=0;i<3000;i++);                     // 等待XTLVLD消隱期(>1ms)
  while ((OSCXCN & 0x80) == 0);             // 等待外部晶振穩定
  OSCICN = 0x08;                            // 選擇外部振蕩器作為系統時鐘SYSCLK,同時禁止時鐘丟失檢測功能

  // 數字量輸入輸出端口初始化
  P0MDOUT = 0x15;                           // TX0、SPI_SCK和SPI_MOSI作為推挽方式
  P1MDOUT = 0x01;                           // TX1作為推挽方式
  P2MDOUT = 0x00;                           // (默認)
  P3MDOUT = 0x80;                           // SPI_CS作為推挽方式
  XBR0 = 0x1F;                              // 允許UART0、SPI、SMBus、PCA0_CEX0、PCA0_CEX1、PCA0_CEX2

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美亚洲另类制服综合在线 | 精品国产一区二区三区四区四 | 亚洲精品国产a久久久久久| 日韩区在线观看| 欧美一区二区三区啪啪| 69堂精品视频| 日韩视频一区二区三区在线播放| 色先锋aa成人| 欧美午夜在线一二页| 欧美在线观看一区二区| 精品视频1区2区| 在线播放91灌醉迷j高跟美女| 欧美色国产精品| 欧美日韩亚洲另类| 日韩一区二区三区电影在线观看| 欧美一区二区黄| 精品国产乱码久久久久久1区2区| 精品国产一二三区| 欧美激情一区不卡| 亚洲人精品一区| 日韩专区一卡二卡| 国产尤物一区二区在线| jvid福利写真一区二区三区| 在线精品观看国产| 欧美va亚洲va国产综合| 国产精品网站在线| 一区二区三区波多野结衣在线观看| 亚洲国产综合91精品麻豆| 蜜臀久久99精品久久久久久9| 久久福利视频一区二区| 国产成人精品影院| 欧美日韩一区精品| 精品国产91乱码一区二区三区 | 在线看不卡av| 日韩精品一区二区三区在线| 国产精品免费久久| 肉色丝袜一区二区| 成人午夜激情在线| 欧美日韩一区二区不卡| 国产亚洲精品久| 日日夜夜免费精品视频| 成人精品一区二区三区中文字幕| 欧美在线观看一区二区| 久久久久久久综合日本| 亚洲一区欧美一区| 国产精品亚洲а∨天堂免在线| 欧美综合色免费| 欧美国产精品一区| 麻豆成人久久精品二区三区小说| 在线中文字幕不卡| 欧美激情资源网| 国内精品久久久久影院薰衣草 | 久久精品国产一区二区| 色噜噜狠狠成人网p站| 久久精品人人做人人综合| 婷婷综合另类小说色区| 色综合久久久网| 国产亚洲精品bt天堂精选| 蜜桃免费网站一区二区三区| 91成人免费在线视频| 国产精品久久三区| 国产电影一区二区三区| 精品福利二区三区| 蜜桃精品在线观看| 5月丁香婷婷综合| 洋洋成人永久网站入口| www.日本不卡| 中文字幕第一区综合| 国产精品一区二区在线观看不卡 | 美女网站色91| 欧美一区二区三区小说| 五月天激情小说综合| 在线免费亚洲电影| 中文字幕一区二区三区蜜月| 国产一区二区三区日韩| 精品嫩草影院久久| 激情小说亚洲一区| 精品精品欲导航| 狠狠色丁香久久婷婷综合丁香| 日韩三区在线观看| 日本视频一区二区| 欧美电视剧免费观看| 久久精品国产亚洲一区二区三区| 日韩亚洲欧美成人一区| 精品在线视频一区| 精品国免费一区二区三区| 国产麻豆91精品| 欧美精彩视频一区二区三区| 国产一区二区三区免费播放| 国产香蕉久久精品综合网| 国产福利视频一区二区三区| 欧美激情一区二区三区不卡| av亚洲产国偷v产偷v自拍| 17c精品麻豆一区二区免费| 波多野结衣在线一区| 自拍偷拍亚洲激情| 欧美视频一区二区| 看电视剧不卡顿的网站| 国产欧美精品一区二区色综合| 99riav久久精品riav| 亚洲午夜免费福利视频| 欧美成人午夜电影| 粉嫩aⅴ一区二区三区四区| 亚洲欧美日韩一区二区三区在线观看| 欧美性三三影院| 精品一区免费av| 亚洲日本免费电影| 91麻豆精品国产91久久久资源速度| 麻豆精品视频在线观看| 日韩理论片一区二区| 欧美久久久久久久久久| 国产麻豆91精品| 亚洲成人av资源| 国产精品美女一区二区| 欧美日本一区二区三区四区| 粉嫩高潮美女一区二区三区 | 国产成人啪免费观看软件| 亚洲精选在线视频| 精品国产91乱码一区二区三区 | 爽好多水快深点欧美视频| 欧美一级电影网站| 一本久久精品一区二区 | 国产网站一区二区| 91国产免费观看| 懂色av中文字幕一区二区三区| 天天色综合成人网| 一区在线观看免费| 久久午夜免费电影| 欧美美女一区二区三区| 9人人澡人人爽人人精品| 美女在线视频一区| 性做久久久久久免费观看 | 欧美精品xxxxbbbb| www.亚洲色图.com| 国产精品综合在线视频| 午夜欧美视频在线观看| 亚洲欧美一区二区三区孕妇| 久久久久久久久伊人| 欧美一区三区二区| 精品视频1区2区| 色综合久久精品| 成人网男人的天堂| 国产一区视频导航| 久久99国产精品久久| 午夜影视日本亚洲欧洲精品| 日韩美女视频19| 国产精品美女一区二区三区| 久久精品亚洲乱码伦伦中文| 精品国产sm最大网站| 久久无码av三级| 久久久夜色精品亚洲| 国产亚洲欧美激情| 国产欧美日产一区| 中文字幕av一区二区三区| 国产拍揄自揄精品视频麻豆| 日本一区二区三区四区在线视频| 久久一区二区三区四区| 欧美精品一区男女天堂| 久久日韩粉嫩一区二区三区| 欧美xxxx在线观看| 亚洲精品在线电影| 久久久精品国产99久久精品芒果 | 久久69国产一区二区蜜臀| 中文字幕亚洲精品在线观看| 欧美国产一区二区在线观看 | 成人av在线播放网站| 国产精品自拍三区| 成人做爰69片免费看网站| 成人午夜碰碰视频| 日本高清免费不卡视频| 欧美一区日韩一区| 久久精品一区四区| 亚洲欧美自拍偷拍色图| 亚洲综合丝袜美腿| 麻豆国产欧美一区二区三区| 粉嫩av一区二区三区粉嫩| 91首页免费视频| 91精品国产品国语在线不卡 | www.欧美精品一二区| 91传媒视频在线播放| 日韩一区二区在线免费观看| 久久久精品综合| 一区二区三区精品在线观看| 成人高清av在线| 高清beeg欧美| 欧美放荡的少妇| 久久久久久综合| 一区二区三区成人| 精品一区二区免费在线观看| 91香蕉国产在线观看软件| 51午夜精品国产| 国产精品午夜春色av| 青青草成人在线观看| 不卡av电影在线播放| 日韩一区二区三区在线视频| 18涩涩午夜精品.www| 国模少妇一区二区三区| 欧美日韩三级在线| 国产精品天美传媒| 另类调教123区 |