新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自己寫的AT89C2051電子溫度計(jì)

        自己寫的AT89C2051電子溫度計(jì)

        作者: 時(shí)間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
        筆者用AT89C2051單片機(jī)和DS18B20寫了一個(gè)3位的電子溫度計(jì),顯示范圍0-125度,不容易啊,學(xué)習(xí)了近一個(gè)月終于會(huì)自己寫點(diǎn)程序了!現(xiàn)在寫寫時(shí)鐘、流水燈什么的基本上我是沒什么問題了,都能在單片機(jī)上正常運(yùn)行!不羅嗦,下面是C程序,附上電路圖:
        #include
        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit GW=P3^0;
        sbit SW=P3^1;
        sbit BW=P3^2;
        sbit DQ=P3^3;
        code uchar NUM[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
        uint temp_value;
        void delay(uchar a)
        {
        while(a--);
        }
        void init_DS18B20()
        {
        uchar b=0;
        DQ=1;
        delay(8);
        DQ=0;
        delay(100);
        DQ=1;
        delay(14);
        b=DQ;
        delay(20);
        }
        uchar read(void)
        {
        uint i, dat=0;
        for(i=8;i>0;i--)
        {
        DQ=1;
        _nop_();_nop_();
        dat>>=1;
        DQ=0;
        _nop_();_nop_();_nop_();_nop_();
        DQ=1;
        _nop_();_nop_();_nop_();_nop_();
        if(DQ)
        dat|=0x80;
        delay(12);
        }
        DQ=1;
        return(dat);
        }
        void write(uchar dat)
        {
        uchar d=0;
        for(d=8;d>0;d--)
        {
        DQ=1;
        _nop_();_nop_();
        DQ=0;
        delay(1);
        DQ=dat&0x01;
        delay(12);
        dat=dat/2;
        }
        DQ=1;
        delay(2);
        }
        void ReadTemp()
        {
        uint a=0;
        uint b=0;
        init_DS18B20();
        write(0xCC);
        write(0x44);
        delay(100);

        init_DS18B20();
        write(0xCC);
        write(0xBE);
        delay(100);
        a=read();
        b=read();

        temp_value=((b<<8)|a)*0.0625;
        }
        void display (uchar num0,uchar num1,uchar num2)
        {
        P1=NUM[num0];
        GW=0;
        delay(200);
        GW=1;
        P1=NUM[num1];
        SW=0;
        delay(200);
        SW=1;

        P1=NUM[num2];
        BW=0;
        delay(200);
        BW=1;
        }
        main()
        {
        uint a ,b,c;
        while(1)
        {
        ReadTemp();
        a=temp_value%10;
        b=temp_value/10%10;
        c=temp_value/100%10;
        display(a,b,c);
        }
        }
        完整版本的源代碼下載:http://www.51hei.com/f/ds7865k.rar
        下面是硬件原理圖:


        本文引用地址:http://www.104case.com/article/201611/323491.htm


        關(guān)鍵詞: AT89C2051電子溫度

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 米脂县| 松江区| 确山县| 叶城县| 彩票| 贵德县| 郑州市| 伊吾县| 洞口县| 阿巴嘎旗| 双城市| 蒙阴县| 砀山县| 东港市| 米林县| 福清市| 保康县| 凌云县| 清远市| 吉林省| 徐闻县| 洛宁县| 奎屯市| 即墨市| 渝北区| 遂昌县| 安泽县| 璧山县| 福州市| 蒲江县| 秦皇岛市| 万盛区| 屯昌县| 泾川县| 晋中市| 连城县| 获嘉县| 应城市| 光山县| 仪征市| 郧西县|