国产日韩欧美久久久精品图片|国产综合有码无码中文字幕|国产一区二区综合视频|国产亚洲精品电影网站在线观看|国产精品一区在线

機(jī)械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 2406|回復(fù): 12
打印 上一主題 下一主題

單片機(jī)學(xué)習(xí)之二:做一個溫度計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2023-9-3 09:47:59 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
本帖最后由 wryp 于 2023-9-3 09:50 編輯

首先說明,這些都是學(xué)習(xí)單片機(jī)的最基礎(chǔ)的東西,離專業(yè)人士還差很遠(yuǎn)。

我們僅僅為了好玩,低矮歪。

DS18B20,這個東東也是大名鼎鼎。先貼點(diǎn)他的資料。DS18B20數(shù)據(jù)手冊-中文版 - 知乎 (zhihu.com)
自己用面包板手工搭了一個板子,主芯片還是89S52,這回要去買了,沒有天天能撿得到的東西。
一入低矮歪深似海,從此金銀如流水。
編程,編譯,刷進(jìn)去,運(yùn)行正常。



18B20的溫度顯示范圍是-55℃至+125℃。所以,設(shè)了5個數(shù)碼管,前三位顯示百位,十位,個位,零下時,百位為負(fù)號。十分位留一個數(shù)碼管,日常溫度顯示精確到0.1足夠了。最后一位顯示℃
顯示℃,要把數(shù)碼管反過來使用。圖中最后一個數(shù)碼管和前面的方向不一樣。

評分

參與人數(shù) 1威望 +100 收起 理由
老鷹 + 100

查看全部評分

回復(fù)

使用道具 舉報

2#
 樓主| 發(fā)表于 2023-9-3 12:28:04 | 只看該作者
//           *****************************************************************************************************************************************
//           *  程序名稱:《大氣溫度計(jì)》
//           *  硬件設(shè)計(jì):
//           *  軟件設(shè)計(jì):
//           *  開始日期:
//           *  定型日期:
//           *  接口定義:P10(與18B20通訊口)
//           *            P2 (段控)
//           *            P0 (位控)
//           *****************************************************************************************************************************************

#include<reg52.h>
#include<intrins.h>

#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE

sbit DQ = P1^0;            //DS18B20數(shù)據(jù)口

unsigned char TMPH,TMPL;

unsigned char code table[12] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char code tabld[10] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};






//           *****************************************************************************************************************************************
//           * 名稱 : delay()
//           * 功能 : 延時,延時時間大概為140US。
//           * 輸入 : 無
//           * 輸出 : 無
//           *****************************************************************************************************************************************

void delay_1()
{
        int i,j;
        for(i=0; i<=10; i++)
        for(j=0; j<=2; j++);
}




//           *****************************************************************************************************************************************
//           * 名稱 : delay()
//           * 功能 : 延時函數(shù)
//           * 輸入 : 無
//           * 輸出 : 無
//           *****************************************************************************************************************************************

void delay(unsigned int N)
{
        int i;
        for(i=0; i<N; i++)        ;
}






//           *****************************************************************************************************************************************
//           * 名稱 : Delay_1ms()
//           * 功能 : 延時子程序,延時時間為 1ms * x
//           * 輸入 : x (延時一毫秒的個數(shù))
//           * 輸出 : 無
//           *****************************************************************************************************************************************

void Delay_1ms(unsigned int i)//1ms延時
{
        unsigned char x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=50;x++);       
}






//           *****************************************************************************************************************************************
//           * 名稱 : Reset()
//           * 功能 : 復(fù)位DS18B20
//           * 輸入 : 無
//           * 輸出 : 無
//           *****************************************************************************************************************************************

unsigned char Reset(void)
{
        unsigned char deceive_ready;
        DQ = 0;
        delay(29);
        DQ = 1;
        delay(3);
        deceive_ready = DQ;
        delay(25);
        return(deceive_ready);
}





//           *****************************************************************************************************************************************
//           * 名稱 : read_bit()
//           * 功能 : 從DS18B20讀一個位值
//           * 輸入 : 無
//           * 輸出 : 從DS18B20讀出的一個位值
//           *****************************************************************************************************************************************

unsigned char read_bit(void)
{
        unsigned char i;
        DQ = 0;
        DQ = 1;
        for(i=0; i<3; i++);
        return(DQ);
}

//           *****************************************************************************************************************************************
//           * 名稱 : write_bit()
//           * 功能 : 向DS18B20寫一位
//           * 輸入 : bitval(要對DS18B20寫入的位值)
//           * 輸出 : 無
//           *****************************************************************************************************************************************

void write_bit(unsigned char bitval)
{
        DQ=0;
        if(bitval==1) DQ=1;
        delay(5);
        DQ=1;
}





//           *****************************************************************************************************************************************
//           * 名稱 : read_byte()
//           * 功能 : 從DS18B20讀一個字節(jié)
//           * 輸入 : 無
//           * 輸出 : 從DS18B20讀到的值
//           *****************************************************************************************************************************************

unsigned char read_byte(void)
{
        unsigned char i,m,receive_data;
        m = 1;
        receive_data = 0;
        for(i=0; i<8; i++)
        {
                if(read_bit())
                {
                        receive_data = receive_data + (m << i);
                }
                delay(6);
        }
        return(receive_data);
}





//           *****************************************************************************************************************************************
//           * 名稱 : write_byte()
//           * 功能 : 向DS18B20寫一個字節(jié)
//           * 輸入 : val(要對DS18B20寫入的命令值)
//           * 輸出 : 無
//           *****************************************************************************************************************************************

void write_byte(unsigned char val)
{
        unsigned char i,temp;
        for(i=0; i<8; i++)
        {
                temp = val >> i;
                temp = temp & 0x01;
                write_bit(temp);
                delay(5);
        }
}


//           *****************************************************************************************************************************************
//           * 名稱 : Main()
//           * 功能 : 主函數(shù)
//           * 輸入 : 無
//           * 輸出 : 無
//           *****************************************************************************************************************************************

void main()
{
//        float tt;
        unsigned char w,k;
        unsigned int temp, x, y;
        P1 = 0x00;
        P2 = 0x00;
        P0 = 0x00;

        while(1)
        {
                Reset();
                write_byte(jump_ROM);
                write_byte(start);
                Reset();
                write_byte(jump_ROM);
                write_byte(read_EEROM);
                TMPL = read_byte();
                TMPH = read_byte();

                for (k=0;k<220;k++)
                {
                        temp = TMPL + TMPH * 256;

                        if(temp >= 32768)
                        {
                                temp = 65535-temp;
                                temp = temp + 1;
                                w = 11;
                        }
                        else
                        w = 10;

                        temp = temp * 10 / 16;


                        x = temp/100;
                        y = temp%100;

                        if(temp < 100)
                        {
                                if(w == 11)
                                {
                                        x = 11;
                                        w = 10;
                                }
                                else
                                x = 10;
                        }

                        P2 = table[x];
                        P0 = 0x02;
                        Delay_1ms(10);
                        P0 = 0x00;

                        x = temp%100/10;
                        y = y%10;

                        P2 = tabld[x];
                        P0 = 0x04;
                        Delay_1ms(10);
                        P0 = 0x00;


                        P2 = table[y];
                        P0 = 0x08;
                        Delay_1ms(10);
                        P0 = 0x00;

                        P2 = table[w];
                        P0 = 0x01;
                        Delay_1ms(10);
                        P0 = 0x00;
                }
        }
}
回復(fù) 支持 反對

使用道具 舉報

3#
發(fā)表于 2023-9-3 13:51:02 | 只看該作者
#define jump_ROM 0xCC
#define start 0x44
#define read_EEROM 0xBE



大佬,建議全大寫
回復(fù) 支持 反對

使用道具 舉報

4#
發(fā)表于 2023-9-3 13:55:24 | 只看該作者
unsigned char code table[12] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char code tabld[10] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};


P2 = table[x];
P2 = tabld[x];

code是什么類型?
回復(fù) 支持 反對

使用道具 舉報

5#
發(fā)表于 2023-9-3 14:06:16 | 只看該作者
顯示℃,要把數(shù)碼管反過來使用。圖中最后一個數(shù)碼管和前面的方向不一樣。


直接顯示c就ok了
回復(fù) 支持 反對

使用道具 舉報

6#
 樓主| 發(fā)表于 2023-9-3 14:25:00 | 只看該作者

你才是大佬
回復(fù) 支持 反對

使用道具 舉報

7#
 樓主| 發(fā)表于 2023-9-3 14:29:19 | 只看該作者
喂我袋鹽 發(fā)表于 2023-9-3 13:55
P2 = table[x];
P2 = tabld[x];

這是做了一個表
0x3f      顯示    0
0x06      顯示1
.。。。。。。。
回復(fù) 支持 反對

使用道具 舉報

8#
發(fā)表于 2023-9-3 15:53:16 | 只看該作者
wryp 發(fā)表于 2023-9-3 14:29
這是做了一個表
0x3f      顯示    0
0x06      顯示1

我是想說,定義時,code是啥類型?
回復(fù) 支持 反對

使用道具 舉報

9#
 樓主| 發(fā)表于 2023-9-3 16:13:59 | 只看該作者
喂我袋鹽 發(fā)表于 2023-9-3 15:53
我是想說,定義時,code是啥類型?

code table    連在一起,代碼表
回復(fù) 支持 反對

使用道具 舉報

10#
發(fā)表于 2023-9-3 16:16:12 | 只看該作者
wryp 發(fā)表于 2023-9-3 16:13
code table    連在一起,代碼表

P2 = table[x];
P2 = tabld[x];

調(diào)用時沒看到code
回復(fù) 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

小黑屋|手機(jī)版|Archiver|機(jī)械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2025-5-2 06:16 , Processed in 0.060492 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲成av人在线观看| 日本在线 | 中文| 日本护士毛茸茸高潮| 国产又黄又爽胸又大免费视频| 日韩a∨无码中文无码电影| 久久毛片少妇高潮| 国产成a人亚洲精品无码久久网 | 国产精品1区2区3区在线观看| 久久99亚洲网美利坚合众国| 国产啪精品视频网站免费 | 日韩人妻精品在线一区二区| 亚洲乱码1卡2卡3乱码在线芒果| 婷婷一区二区在线观看| 国产伦精品一区二区三区妓女| 日韩精品一区二区三区中文| 人人妻人人爽人人爽| 国产精品久久久久久久免费看| 久久九九精品国产免费看小说| 国产亚洲日韩欧美另类第八页| 亚洲欧美高清在线精品一区二区 | 国产精品一区二区三区不卡欧美| 久久久久久久女国产乱让韩| 日韩欧美群交p片內射中文| 成人动漫视频一区| 国产乱码精品一区二区蜜臀| 内射白浆一区二区在线观看| 久久久中文字幕日本无吗| 无码专区丰满人妻斩六十路 | 亚洲码国产精品高潮在线| 国产与黑人在线播放| 久久综合亚洲一区二区三区| 午夜精品一区二区三区免费视频 | 曰本无码人妻丰满熟妇啪啪| 久久996re热这里只有精品无码 | 人妻丰满熟妇a无码区| 看黄a大片爽爽影院免费无码| 亚洲人成未满十八禁网站| 亚洲午夜不卡无码影院| av无码天堂一区二区三区| 亚洲欧美不卡高清在线观看| 国产精品一区成人在线观看|