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

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

?? vaccum.c

?? C8051f020與氣壓傳感器HP03S制作的氣壓測試儀
?? C
?? 第 1 頁 / 共 2 頁
字號:
/************************************************************************
        copyright (c) 2007                                                           
Titl    Altitud meter
Current version:          v1.0 
Function:      		Measure temperature / pressure / altitude           
Processor                    C8051F230 + HP03S
Clock:                          22.1184MHz Crystal 
Author:                       jIM tIEN 
Company:                      cROSSMIND
Contact:                      +86-0755-3880100 
E-MAIL:                        txj@crossmind.cn
Date:                            2008-4-11                                        

                        P0.4---------------->SCL         
                        P0.5<--------------->SDA 
                        P0.6---------------->XCLR 
                        P0.7---------------->MCLK 
********************************************************************/ 
#include <c8051f200.h>
#include <stdio.h>
//#include <reg52.h>
#include <math.h> 
#define MaxPress    1100      //1100Hpa 
#define SYSCLK		22118400		//11059200
#define HP03SMCLK	32768
//V3.1
//#define BAUDRATE	115200

//V3.2
#define BAUDRATE 	38400

#define RS485
#define TIMEOUT		60 				//unit: =60*0.5 second

#define INBUF_LEN 	5   		//數據長度
#define STARTBYTE	0x24		//
#define MYADD		0xE4		//Barmeter Add = 0xE4
//MOTOR MODULE ADD = 0xE3	, 0xE2 - LDDRIVER, 0xE1 - PZT DRIVER	
#define GETTEMP		0xAA		//取溫度/壓力值命令
#define GETPRESS	0XBB		//壓力值命令
#define SETDATA		0xCC		//設置相對氣壓值
#define ORIGNAL		0xDD		//設置當前氣壓為基準氣壓
#define VACCUMON	0x01		//啟動抽氣機
#define VACCUMOFF	0x00		//關閉抽氣機
#define RELEASEON	0x02		//排空閥ON
#define RELEASEOFF	0x03		//排空閥OFF

unsigned char inbuf1[INBUF_LEN];
unsigned char count;
bit read_flag = 0;

//function declaration 
//*****************
void IIC_ReadCalData(void); 
void ReadTemperaturePreesureAD(void);
unsigned int IIC_ReadTempretureAD(void);
unsigned int IIC_ReadPressureAD(void); 
void CalculatePressTemp(bit); 
void CalculateAltitude(void); 
void IIC_ReadCalData(void); 
unsigned char IIC_ReadByte(void);
void IIC_WriteByte( unsigned char);
void IIC_Start(void); 
void IIC_Stop(void); 
void IIC_ACK(void); 
void IIC_NoAck(void);
void IIC_SDA_HIGH(void);
void IIC_SDA_LOW(void); 
void IIC_SCL_HIGH(void); 
void IIC_SCL_LOW(void); 
void IIC_XCLR_LOW(void); 
void IIC_XCLR_HIGH(void); 
void SysDelay2ms(unsigned int);//
void SysDelay20us(void);// 
void ClockDelay2ms(unsigned int);//

void MCLKOn(void);

//symbol defined   
sbit SCL = P2^0;
sbit SDA = P2^1; 
sbit XCLR = P2^2;
sbit MCLK = P2^3; 
#ifdef RS485
sbit    RS485_DE = P1^0;
#endif
sbit RELAY = P1^1;      //CONTROL VACCUM
sbit RELAY2 = P1^3;		//排空閥 
sbit TestPin = P1^2;

unsigned int C1;
unsigned int C2 ; 
unsigned int C3 ; 
unsigned int C4 ; 
unsigned int C5 ; 
unsigned int C6 ; 
unsigned int C7 ; 

unsigned char AAA;
unsigned char BB ; 
unsigned char CC ; 
unsigned char DD ; 
unsigned int D1;
unsigned int D2 ;
long float DUT;
long float OFF; 
long float SENS;
long float X; 
long float    Press;
long float    Temp; 
long    Altitude;

bit bMCLKOn = 0; 
unsigned int systimer1;

//**********************************   
//comparison table for pressure and altitude 
//***********************************
long code Tab_BasicAltitude[80]={-6983,-6201,-5413,-4620,-3820,-3015,-2203,-1385,-560, 270,    //0.1m 
    //    1100    1090    1080    1070    1060    1050    1040    1030    1020    1010  //hpa
    1108, 1953, 2805, 3664, 4224, 5403, 6284, 7172, 8068, 8972,     
    //    1000    990      980      970      960      950      940      930      920    910     //hpa 
    9885, 10805,11734,12671,13617,14572,15537,16510,17494,18486, 
    //    900      890      880      870      860      850      840      830      820      810       //hpa
    19489,20502,21526,22560,23605,24662,25730,26809,27901,29005, 
    //    800      790      780      770      760      750      740      730      720      710    //hpa
    30121,31251,32394,33551,34721,35906,37106,38322,39553,40800, 
    //    700      690      680      670      660      650      640      630      620      610    //hpa
    42060,43345,44644,45961,47296,48652,50027,51423,52841,54281, 
    //    600      590      580      570      560      550      540      530      520      510    //hpa
    55744,57231,58742,60280,61844,63436,65056,66707,68390,70105, 
    //    500      490      480      470      460      450      440      430      420      410    //hpa
    71854,73639,75461,77323,79226,81172,83164,85204,87294,89438}; 
//    400      390      380      370      360      350      340      330      320      310    //hpa


void SYSCLK_Init(void)
{
    int i;                              // delay counter
    //initial system clock
    OSCXCN = 0x67;                      // start external oscillator with 22.1184MHz crystal
    for (i=0; i < 256; i++) ;           // Wait for osc. to start up
    while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
    OSCICN = 0x88;                      // select external oscillator as SYSCLK source and enable missing clock detector
}

void PORT_Init (void)
{
    //uart0, p1.0/p1.1/P1.2/P1.3/p2.0/p2.2/p2.3 push-pull

    PRT0MX    = 0x01;
    PRT1CF    = 0x0F;
    PRT2CF    = 0x0D;
    RELAY     = 0;
}

void Serial_Init(void)
{
    SCON  = 0x50;                      // SCON1: mode 1, 8-bit UART, enable RX
    TMOD  &= 0x0F;
    TMOD  |= 0x20;                      // TMOD: timer 1, mode 2, 8-bit reload
    TH1    = -(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
    TL1    = -(SYSCLK/BAUDRATE/16);     // set Timer1 reload value for baudrate
    TR1    = 1;                         // start Timer1
    CKCON |= 0x10;                      // Timer1 uses SYSCLK as time base
    PCON  |= 0x80;                      // SMOD0 = 1
    ES = 1;
    TI = 0;
}


//向串口發送一個字符 
void send_char_com(unsigned char ch)  
{
#ifdef RS485
    RS485_DE = 1;
#endif

    SBUF = ch;
    while (TI == 0);
    TI = 0;
#ifdef RS485
    RS485_DE = 0;
#endif

}

//向串口發送一個字符串,strlen為該字符串長度 
void send_string_com(unsigned char *str,unsigned int strlen)
{
    unsigned int k=0;
    do {
        send_char_com(*(str + k));
        k++;
    } while (k < strlen);
}


//串口接收中斷函數 
void serial () interrupt 4 using 3 
{
    unsigned char ch;

    ES = 0;
    if (RI && read_flag==0) {
        RI = 0;
        ch = SBUF;
        if ( count ==0) {          //startbyte
            if (ch == STARTBYTE)
                inbuf1[count++] = ch;
        } else
            if (count == 1) {      //add
            if (ch == MYADD)
                inbuf1[count++] = ch;
            else
                count = 0;
        } else {
            inbuf1[count++] = ch;
            if ( inbuf1[2]== SETDATA) {
                if ( count == INBUF_LEN) {
                    count =0;
                    read_flag = 1;
                }
            } else
                if (count == INBUF_LEN -1) {
                count =0;
                read_flag = 1;
            }
        }
    }
    ES = 1;

}


void Timer_Init(void) 
{   
    TMOD &= 0xF0;
    TMOD |= 0x02;           //TIMER0: MODE2, 8BIT AUTO-RELOAD, TIMER1: MODE 1, 16BIT
    TH0 = 256 - SYSCLK/12/(2*HP03SMCLK);
    TL0 = 256 - SYSCLK/12/(2*HP03SMCLK);
    PT0 = 1;
    ET0 = 1; 
    TR0 = 1; 

}

bit SetVaccum(int Vaccum)
{
    unsigned int i=0,testpress;
    unsigned char breach = 0;

    RELAY = 1;              //start bumper
    while (1) 
	{
        TestPin = ~TestPin;          
        i++;
        ClockDelay2ms(250);     //delay 500ms

        //check pressure
        ReadTemperaturePreesureAD(); 
        CalculatePressTemp(0);          //don't test temperature

        testpress =  (unsigned int)(Press/10.0);

        if (testpress < Vaccum)
            breach ++;
        else
            breach = 0;

        if (breach >= 3) {
            RELAY = 0;
            return 1;
        } else if (i >= TIMEOUT) {       //
            RELAY = 0;
            return 0;
    }
    }
}

void main(void) 
{
    unsigned int ipress, ipress0 = 0;
    int ripress=0;
    int itemp;
	P1 = 0;
    WDTCN = 0xDE;       //0xDE and 0xAD:disable, 0xA5:enable
    WDTCN = 0xAD;
    SYSCLK_Init();
    PORT_Init();
    RELAY = 0;
	RELAY2 = 0;

    Serial_Init();
    Timer_Init();
    EA = 1; 

    SysDelay2ms(50); 
    IIC_ReadCalData(); 

#ifdef RS485
    RS485_DE = 0;
#endif

    ReadTemperaturePreesureAD(); 
    CalculatePressTemp(0); 
    ipress0 = (unsigned int)(Press/10.0);

    while (1) {
        if (read_flag) {  //如果取數標志已置位,就將讀到的數從串口發出 
            ES = 0;       //禁止串口中斷

            if (inbuf1[2]== GETPRESS && inbuf1[3]==GETPRESS) {
                ReadTemperaturePreesureAD(); 
                CalculatePressTemp(0); 

                ipress =  (unsigned int)(Press/10.0);
                inbuf1[2] = ipress >>8;     //high byte
                inbuf1[3] = ipress &0x00ff; //low byte

                send_string_com(inbuf1,INBUF_LEN - 1);

            } else if (inbuf1[2]== GETTEMP && inbuf1[3]==GETTEMP) {
                ReadTemperaturePreesureAD(); 
                CalculatePressTemp(1); 

                itemp =  (int)Temp;
                inbuf1[2] = itemp >>8;      //high byte
                inbuf1[3] = itemp &0x00ff;  //low byte

                send_string_com(inbuf1,INBUF_LEN - 1);

                ipress =  (unsigned int)(Press/10.0);
                inbuf1[2] = ipress >>8;     //high byte
                inbuf1[3] = ipress &0x00ff; //low byte

                send_string_com(inbuf1,INBUF_LEN - 1);

            } else if (inbuf1[2] == ORIGNAL) {
                ReadTemperaturePreesureAD(); 
                CalculatePressTemp(0); 
                ipress0 =  (unsigned int)(Press/10.0);
                send_string_com(inbuf1,INBUF_LEN - 1);

            } else if (inbuf1[2]== SETDATA) {
                ripress = inbuf1[3];
                ripress <<= 8;
                ripress |= inbuf1[4];
                if (ripress > 0) {
                    inbuf1[3] = 0;
                    inbuf1[4] = 0;
                } else if (!SetVaccum(ipress0 + ripress)) {
                    inbuf1[3] = 0xff;
                    inbuf1[4] = 0xff;   
                }

                send_string_com(inbuf1,INBUF_LEN);
            } 
			else if(inbuf1[2]== VACCUMON) {
					RELAY = 1;
					send_string_com(inbuf1,INBUF_LEN - 1);
			 }
			else if(inbuf1[2]== VACCUMOFF) {
					RELAY = 0;
					send_string_com(inbuf1,INBUF_LEN - 1);
			}
			else if(inbuf1[2]== RELEASEON) {
					RELAY2 = 1;
					send_string_com(inbuf1,INBUF_LEN - 1);
 		    }
			else if(inbuf1[2]== RELEASEOFF) {
					RELAY2 = 0;
					send_string_com(inbuf1,INBUF_LEN - 1);
			}
            read_flag=0; //取數標志清0 
            ES = 1;
        }
    }
} 

//*************************
//function: calculate power for 2 
//**************************
long int Get2_x(unsigned char i) 
{ 
    long int uiData;
    uiData=2; 
    i=i-1; 
    while (i) {
        uiData <<= 1;
        i--; 
    } 
    return uiData; 
} 

//***********************************
//function:calculate press and temperature 
//input      :D1,D2,C1---C7,AA,BB,CC,DD
//output    :Press, unit: 0.01hpa 
//                temp, unit: 0.1℃ 
//************************
void CalculatePressTemp(bit btesttemp) 
{ 
    long float MiddleData1;
    long float MiddleData2; 
    long float MiddleData3; 
    long float MiddleData4; 

    //   calculate the DUT value 
    if (D2<C5) {
        DUT = D2-C5-((D2-C5)/Get2_x(7))*((D2-C5)/Get2_x(7))*BB/Get2_x(CC); 
        MiddleData1 = (long)D2-C5; 
        MiddleData2 = MiddleData1*MiddleData1/16384;   
        MiddleData3 = MiddleData2*BB; 
        MiddleData4 = Get2_x(CC); 
        MiddleData4 = MiddleData3/MiddleData4; 
        DUT = MiddleData1 - MiddleData4; 
    } else {
        //DUT = D2-C5-((D2-C5)/Get2_x(7))*((D2-C5)/Get2_x(7))*AA/Get2_x(C); 
        MiddleData1 = D2-C5; 
        MiddleData2 = MiddleData1 * MiddleData1 / 16384; 
        MiddleData3 = MiddleData2 * AAA; 
        MiddleData4 = Get2_x(CC); 
        MiddleData4 = MiddleData3/MiddleData4; 
        DUT = MiddleData1 - MiddleData4; 
    } 
    //calculate the OFF value 
    //OFF = (C2+(C4-1024)*DUT/Get2_x(14))*4; 
    MiddleData1 = (long)C4-1024; 
    MiddleData2 = Get2_x(14); 
    MiddleData3 = DUT*MiddleData1; 
    MiddleData4 = MiddleData3/MiddleData2;
    MiddleData4 = (long)C2+MiddleData4; 
    OFF = MiddleData4*4; 

    //calculate the SENS value 
    //SENS = C1+C3*DUT/Get2_x(10); 
    MiddleData1 = (long)C3*DUT; 
    MiddleData2 = Get2_x(10); 
    MiddleData3 = MiddleData1/MiddleData2; 
    SENS = C1+MiddleData3; 

    //calculate the X value 
    //X = SENS*(D1-7168)/Get2_x(14)-OFF; 
    MiddleData1 = Get2_x(14); 
    MiddleData2 = (long)D1-7168;
    MiddleData3 = MiddleData2*SENS;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线这里只有精品| 成人免费视频caoporn| 国产乱人伦精品一区二区在线观看| 国产乱子伦一区二区三区国色天香| www.日韩av| 欧美精品一区二区三区蜜臀| 亚洲综合无码一区二区| 国产成人高清在线| 欧美一区二区二区| 亚洲国产视频一区| 99久久er热在这里只有精品66| 日韩欧美中文字幕一区| 亚洲综合一区在线| av动漫一区二区| 国产三级欧美三级| 久久精品久久综合| 欧美日韩久久久一区| 日韩一区在线免费观看| 成人激情电影免费在线观看| 精品国产精品网麻豆系列| 日韩成人精品视频| 欧美人妇做爰xxxⅹ性高电影| 国产精品短视频| 成人免费视频播放| 国产精品天美传媒沈樵| 国产乱码精品一区二区三| 日韩欧美国产综合在线一区二区三区| 亚洲另类在线视频| 99国产精品国产精品毛片| 国产精品水嫩水嫩| 国产1区2区3区精品美女| 久久久久亚洲蜜桃| 国产精品99久久久久久久女警| 精品美女一区二区三区| 久久国产精品色| 久久亚洲一区二区三区明星换脸| 国内精品国产成人国产三级粉色| 日韩精品一区二区三区在线播放| 久久丁香综合五月国产三级网站| 精品国产伦一区二区三区观看体验| 麻豆久久一区二区| 久久综合九色综合欧美亚洲| 国产一区二区三区香蕉| 中文字幕不卡在线| 91国在线观看| 午夜av一区二区| 欧美精品一区二区蜜臀亚洲| 国产高清在线精品| 国产三区在线成人av| 大尺度一区二区| 亚洲精品你懂的| 91精品国产aⅴ一区二区| 激情成人综合网| 日本不卡在线视频| 日韩欧美亚洲一区二区| 国产曰批免费观看久久久| 国产日韩成人精品| 色综合久久久久网| 日韩激情视频网站| 国产亚洲午夜高清国产拍精品| 成人av电影免费观看| 亚洲午夜久久久| 精品欧美一区二区久久| aaa亚洲精品| 亚洲成a人片综合在线| 精品国产乱子伦一区| eeuss影院一区二区三区| 亚洲图片欧美综合| 久久久精品人体av艺术| 色伊人久久综合中文字幕| 蜜桃在线一区二区三区| 中文字幕欧美日本乱码一线二线| 在线免费观看视频一区| 久久爱另类一区二区小说| 亚洲视频在线一区二区| 日韩欧美成人一区二区| 91网站视频在线观看| 九九精品视频在线看| 亚洲一区中文在线| 久久精品亚洲乱码伦伦中文| 欧美手机在线视频| 成人在线视频首页| 奇米精品一区二区三区在线观看| 亚洲欧美中日韩| 欧美成人官网二区| 欧美色电影在线| 成人免费高清视频在线观看| 蜜臀av一级做a爰片久久| 亚洲视频在线观看三级| 久久久久久免费网| 日韩一级大片在线| 国产欧美一区二区精品婷婷| 91精品国产综合久久香蕉的特点 | 国产99久久久国产精品潘金网站| 亚洲一区在线免费观看| 国产精品高潮久久久久无| 久久综合九色综合97_久久久| 欧美日韩视频在线一区二区| 97久久精品人人做人人爽| 国产精品99久久久久久久女警 | 久久久国际精品| 91精品国产色综合久久不卡蜜臀 | 亚洲成人动漫一区| 综合在线观看色| 国产校园另类小说区| 日韩欧美视频一区| 欧美精品丝袜久久久中文字幕| 91社区在线播放| 成人a区在线观看| 岛国精品一区二区| 国产乱人伦偷精品视频免下载| 裸体在线国模精品偷拍| 美女mm1313爽爽久久久蜜臀| 天天综合网 天天综合色| 亚洲综合色自拍一区| 亚洲综合色视频| 夜夜揉揉日日人人青青一国产精品| 日本一区二区三区dvd视频在线| 久久综合久久鬼色| 久久久国产一区二区三区四区小说| 精品国精品国产| 久久精品一区蜜桃臀影院| 久久夜色精品国产欧美乱极品| 国产婷婷色一区二区三区在线| 国产视频一区不卡| 亚洲色图20p| 亚洲色大成网站www久久九九| 亚洲免费在线电影| 亚洲午夜精品在线| 美腿丝袜亚洲三区| 国产精品亚洲一区二区三区在线| 国产69精品久久99不卡| 91小视频在线免费看| 欧美日韩一区三区四区| 欧美一二三区在线观看| 久久九九国产精品| 自拍偷自拍亚洲精品播放| 一区二区三区欧美| 日本在线观看不卡视频| 国产综合色在线视频区| 成人一区二区三区视频在线观看| 波多野结衣视频一区| 欧美三级在线视频| 久久久久久久久岛国免费| 日韩美女视频一区二区 | 亚洲一区欧美一区| 蜜臀精品一区二区三区在线观看| 国产成人av一区| 色老汉av一区二区三区| 欧美一区二区网站| 国产精品天干天干在线综合| 亚洲第一精品在线| 日韩一区二区在线观看| 久久九九99视频| 亚洲图片欧美视频| 成人国产精品视频| 91精品国产高清一区二区三区| 国产精品丝袜一区| 麻豆精品一区二区三区| 91亚洲精华国产精华精华液| 精品国产一区久久| 亚洲一级二级三级在线免费观看| 黄页视频在线91| 欧美色电影在线| 国产精品污网站| 久久丁香综合五月国产三级网站| 色综合天天综合网天天狠天天| 欧美成人午夜电影| 亚洲已满18点击进入久久| 国内精品自线一区二区三区视频| 色老综合老女人久久久| 国产偷国产偷亚洲高清人白洁| 日日骚欧美日韩| 91视频com| 国产精品超碰97尤物18| 九九视频精品免费| 欧美日韩aaa| 亚洲一区二区三区在线看| 成人在线视频一区| 久久久久国色av免费看影院| 男男成人高潮片免费网站| 色美美综合视频| 国产精品免费av| 国模娜娜一区二区三区| 欧美一级片免费看| 日韩 欧美一区二区三区| 91黄色激情网站| 一区二区三区四区蜜桃| va亚洲va日韩不卡在线观看| 国产无人区一区二区三区| 国内精品自线一区二区三区视频| 日韩久久久久久| 免费黄网站欧美| 欧美一级在线视频| 免费成人美女在线观看.| 欧美精品免费视频| 视频在线在亚洲| 日韩欧美一区中文| 日本欧美韩国一区三区| 欧美一级高清片在线观看|