亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美主播一区二区三区| 最新不卡av在线| 一区二区欧美视频| 韩国精品主播一区二区在线观看| 99国产精品久久久| 久久夜色精品国产噜噜av| 亚洲成人动漫在线免费观看| 成人视屏免费看| wwww国产精品欧美| 免费人成黄页网站在线一区二区| 99久久综合精品| 国产日韩综合av| 国产一区在线看| 精品国产污污免费网站入口| 亚洲高清免费在线| 在线观看av不卡| 亚洲精品成人精品456| 91视频com| 一区二区三区在线观看视频| 99视频精品全部免费在线| 国产精品成人在线观看| 国产精品亚洲专一区二区三区| 欧美电影免费观看完整版| 日本中文字幕一区| 4438成人网| 日韩高清一级片| 欧美精品在线一区二区三区| 亚洲国产中文字幕| 欧美日韩1区2区| 日本aⅴ亚洲精品中文乱码| 欧美日韩一二三| 日本在线不卡视频| 欧美高清一级片在线观看| 国产一区二区视频在线播放| 久久尤物电影视频在线观看| 国产福利91精品一区二区三区| 欧美精品一区男女天堂| 国产一区二区精品久久91| 久久精品一区二区三区不卡 | 亚洲成av人片www| 欧美日韩精品一区二区| 日韩在线一二三区| www亚洲一区| 丁香五精品蜜臀久久久久99网站| 国产精品人成在线观看免费| av动漫一区二区| 亚洲成人资源网| 5566中文字幕一区二区电影| 国产一区二区三区在线观看免费| 国产精品人人做人人爽人人添 | 日韩亚洲欧美高清| 国产综合久久久久影院| 中文字幕一区日韩精品欧美| 欧美性色黄大片| 激情图片小说一区| 国产精品国产三级国产a| 91丨porny丨首页| 奇米四色…亚洲| 国产精品沙发午睡系列990531| 色网站国产精品| 蜜桃视频在线一区| 亚洲欧洲av色图| 日韩欧美123| 一本到不卡免费一区二区| 日本vs亚洲vs韩国一区三区二区| 久久精品人人爽人人爽| 欧美三级乱人伦电影| 国产一区二区三区香蕉| 亚洲一区免费在线观看| 久久先锋资源网| 欧美日本韩国一区| 不卡av电影在线播放| 日本欧洲一区二区| 国产精品国产三级国产aⅴ入口 | 99久久伊人久久99| 蜜桃视频在线观看一区| 中文字幕日韩欧美一区二区三区| 91精品国产黑色紧身裤美女| 91免费观看视频| 国产精品原创巨作av| 亚洲一区二区三区在线| 国产精品久久久久久亚洲毛片 | 久久免费午夜影院| 91国偷自产一区二区三区观看| 国产在线精品免费av| 亚洲福利一区二区三区| 国产精品短视频| 精品国精品自拍自在线| 制服视频三区第一页精品| 99久久精品国产麻豆演员表| 国产剧情一区二区三区| 日韩电影在线免费| 亚洲小少妇裸体bbw| 国产精品久久久久久久浪潮网站 | 高清在线观看日韩| 美女在线观看视频一区二区| 亚洲成人av免费| 一区二区三区资源| 亚洲欧美日韩成人高清在线一区| 国产三级精品视频| 久久精品夜色噜噜亚洲aⅴ| 欧美大黄免费观看| 91精品国产综合久久香蕉的特点 | 欧美性色aⅴ视频一区日韩精品| 99久久99久久精品国产片果冻| 成人免费看片app下载| 国产精品一卡二卡在线观看| 激情另类小说区图片区视频区| 日一区二区三区| 午夜精品123| 日韩国产欧美在线播放| 人禽交欧美网站| 另类调教123区 | 精品一区二区在线免费观看| 蜜桃一区二区三区在线观看| 美女爽到高潮91| 精品亚洲免费视频| 国产一区在线看| 国产成a人亚洲精品| 大桥未久av一区二区三区中文| 成人精品一区二区三区四区| av在线不卡电影| 欧美唯美清纯偷拍| 欧美另类久久久品| 日韩免费电影一区| 国产日韩欧美精品综合| 中文字幕永久在线不卡| 一区二区三区资源| 日本欧美大码aⅴ在线播放| 日本女人一区二区三区| 国产大陆精品国产| 日本精品一区二区三区高清| 欧美高清视频www夜色资源网| 欧美一区二区三区视频免费| 久久综合久久鬼色中文字| 亚洲国产激情av| 亚洲一区二区黄色| 日本成人在线电影网| 国v精品久久久网| 欧洲日韩一区二区三区| 91精品国产欧美日韩| 亚洲国产精华液网站w| 亚洲1区2区3区4区| 国产精品乡下勾搭老头1| 日本精品免费观看高清观看| 欧美一区二区三区色| 国产精品国产精品国产专区不片 | 欧美一区二区视频在线观看2022 | 蜜臀久久99精品久久久画质超高清| 国产久卡久卡久卡久卡视频精品| 精品人在线二区三区| 国产精品久久久久久久久果冻传媒| 亚洲成a人在线观看| 岛国av在线一区| 9191精品国产综合久久久久久| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲美女一区二区三区| 麻豆成人免费电影| 色狠狠桃花综合| 国产视频一区在线播放| 天天综合色天天| 99精品热视频| 蜜臀av在线播放一区二区三区| 亚洲成人精品影院| 国产电影精品久久禁18| 欧美亚洲一区二区三区四区| 久久久午夜电影| 亚洲.国产.中文慕字在线| 成人晚上爱看视频| 日韩欧美不卡在线观看视频| 亚洲综合自拍偷拍| 不卡一区二区中文字幕| 精品久久人人做人人爽| 五月激情丁香一区二区三区| 99久久精品久久久久久清纯| 久久久一区二区三区| 奇米一区二区三区| 欧美日韩国产首页在线观看| 中文字幕一区二区三区四区 | 日韩理论电影院| 日韩中文字幕亚洲一区二区va在线| 成人综合婷婷国产精品久久免费| 日韩一区二区免费在线电影 | 蜜桃一区二区三区在线| 精品视频在线视频| 亚洲欧美二区三区| k8久久久一区二区三区| 国产欧美一区二区精品性色超碰| 免费观看一级欧美片| 欧美日韩大陆在线| 一区二区三区加勒比av| 福利91精品一区二区三区| 精品久久久久久久人人人人传媒| 午夜婷婷国产麻豆精品| 欧美日韩精品电影| 亚洲国产wwwccc36天堂| 欧美日韩综合色| 天天综合日日夜夜精品| 欧美高清www午色夜在线视频| 婷婷久久综合九色国产成人|