亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 關于簡單把溫度轉化成電壓,再用數碼管顯示 [打印本頁]

作者: humeng    時間: 2017-6-6 15:07
標題: 關于簡單把溫度轉化成電壓,再用數碼管顯示
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/**********LED定義********/
sbit LED_RED = P3^5;   /*紅燈定義*/
sbit LED_GREEN = P3^6; /*綠燈定義*/

/*********74HC139定義******/
sbit LA=P2^0;
sbit LB=P2^1;

/*********ADC0831定義*******/
sbit SCL2=P1^4;               
sbit DO=P1^5;       
sbit CS2=P1^3;       

uchar code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};        /*數碼管數值*/
uchar temp;  /*溫度*/

/**************延時****************/
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void Display(uint dat) /*顯示溫度值*/
{
        uchar ge,shi,bai,qian;
        qian = dat/1000%10;
        bai = dat/100%10;
        shi = dat/10%10;
        ge = dat%10;

        LA=0;LB=0;
        P0 = Tab[qian];  
        delay(10);
        LA=1;LB=0;
        P0 = Tab[bai];
        delay(10);
        LA=0;LB=1;
        P0 = Tab[shi];
        delay(10);
        LA=1;LB=1;
        P0 = Tab[ge];
        delay(10);
}

/***********讀數模轉換數據********************************************************/       

unsigned char ad0831read(void)
{
        unsigned char i=0,tmp=0;
                DO=1;
                CS2=0;
                _nop_();
                _nop_();
                SCL2=0;
                _nop_();
                _nop_();
                SCL2=1;
                _nop_();
                _nop_();
                SCL2=0;
                _nop_();
                _nop_();
                SCL2=1;
                _nop_();
                _nop_();
                SCL2=0;
                _nop_();
                _nop_();//MSB是在第二個下降沿輸出的,即0-1-0-1-0
                for(i=0;i<8;i++)//這個地方沒有理解,tmp是十進制還是二進制?如果是二進制數,怎么沒有轉化成十進制的過程?
                {
                        tmp<<=1;
                        if(DO)
                                tmp++;                       
                        SCL2=1;
                        _nop_();
                        _nop_();
                        SCL2=0;
                        _nop_();
                        _nop_();
                }
                CS2=1;
        return tmp;
}

/**********主函數************/

void main()
{
        unsigned long adc;
        while(1)
        {
                adc = ad0831read();                 /*從ADC0831讀取量化后的數值*/
                adc = adc = adc*19.607843; /*將量化后的數值轉換成實際電壓*/
                temp = (adc*40)/1000;        /*根據實際電壓換算成溫度值*/
                Display(temp);           /*將溫度顯示在LED上*/
                if(temp > 80)           /*當溫度高于80度,紅燈亮*/
                {
                        LED_RED = 1;
                        LED_GREEN = 0;
                }
                else                        /*當溫度低于80度,綠燈亮,*/
                {
                        LED_RED = 0;
                        LED_GREEN = 1;
                }
                      
        }          
}



作者: lingwise    時間: 2017-6-7 14:40
不理解的地方可以忽略,編譯器編譯的時候自動轉換成單片機識別的二進制數據格式并執行的,你只需知道他確實會執行那么多個周期就好了
作者: zl2168    時間: 2017-6-7 22:24
把溫度轉換為電壓的,是電路,而不是程序。。
作者: dzbj    時間: 2017-6-7 22:57
無所謂什么進制 是多少就是多少 進制只是顯示方式
作者: cam226390674    時間: 2017-6-8 13:33
很好的資料,謝謝
作者: xiangyu    時間: 2017-6-8 15:33
三樓正解




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1