国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于單片機的數(shù)字溫度計設(shè)計

這篇具有很好參考價值的文章主要介紹了基于單片機的數(shù)字溫度計設(shè)計。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、項目背景

數(shù)字溫度計是一種用于測量和顯示環(huán)境溫度的設(shè)備。本文章介紹基于STC89C52主控芯片的數(shù)字溫度計的設(shè)計過程和實現(xiàn)原理。該設(shè)計采用DS18B20溫度傳感器進行溫度采集,使用LCD1602顯示屏進行溫度顯示,通過按鍵設(shè)置溫度的上限和下限閥值,并通過蜂鳴器進行報警。

單片機數(shù)字溫度計設(shè)計,STM32單片機開發(fā)基礎(chǔ),單片機,嵌入式硬件

單片機數(shù)字溫度計設(shè)計,STM32單片機開發(fā)基礎(chǔ),單片機,嵌入式硬件

單片機數(shù)字溫度計設(shè)計,STM32單片機開發(fā)基礎(chǔ),單片機,嵌入式硬件

二、系統(tǒng)架構(gòu)

數(shù)字溫度計的系統(tǒng)架構(gòu)如下所示:

(1)硬件部分:主控芯片STC89C52、DS18B20溫度傳感器、LCD1602顯示屏、按鍵、蜂鳴器;

(2)軟件部分:嵌入式C語言程序。

三、系統(tǒng)功能設(shè)計

【1】溫度采集:通過DS18B20溫度傳感器采集環(huán)境溫度;

【2】溫度顯示:使用LCD1602顯示屏顯示當(dāng)前環(huán)境溫度;

【3】閾值設(shè)置:通過按鍵設(shè)置溫度的上限和下限閥值;

【4】報警功能:當(dāng)溫度超出閥值時,蜂鳴器發(fā)出報警信號。

四、整體設(shè)計

4.1 硬件設(shè)計

【1】主控芯片選擇:STC89C52,具有較好的性能和豐富的外設(shè)資源,適合作為數(shù)字溫度計的核心處理器;

【2】溫度傳感器:采用DS18B20溫度傳感器,利用其一線通信功能實現(xiàn)溫度采集;

【3】顯示屏:使用LCD1602顯示屏,通過并口連接到主控芯片,實時顯示溫度信息;

【4】按鍵:通過按鍵設(shè)置溫度閥值,包括上限和下限;

【5】蜂鳴器:當(dāng)溫度超出閥值時,蜂鳴器發(fā)出報警信號。

4.2 軟件設(shè)計

【1】GPIO配置:配置主控芯片的GPIO引腳,包括DS18B20溫度傳感器的引腳、LCD1602顯示屏的引腳、按鍵的引腳和蜂鳴器的引腳;

【2】DS18B20通信:利用主控芯片的IO口實現(xiàn)與DS18B20溫度傳感器的一線通信,獲取溫度數(shù)據(jù);

【3】LCD顯示:通過并口通信協(xié)議,將溫度數(shù)據(jù)發(fā)送給LCD1602顯示屏進行顯示;

【4】按鍵檢測:使用外部中斷方式監(jiān)聽按鍵引腳的狀態(tài)變化,當(dāng)按鍵被按下時,進入設(shè)置模式,并根據(jù)按鍵次數(shù)調(diào)整溫度閥值;

【5】溫度比較和報警:在主循環(huán)中,不斷比較當(dāng)前溫度與設(shè)置的閥值,當(dāng)溫度超出閾值時,觸發(fā)蜂鳴器報警。

五、源代碼

#include <reg52.h>

// 定義IO口
sbit DQ = P2^0;
sbit RS = P2^1;
sbit RW = P2^2;
sbit E = P2^3;
sbit K1 = P2^4;
sbit K2 = P2^5;
sbit Buzzer = P2^6;

// 定義全局變量
unsigned int highTemp = 30; // 溫度上限
unsigned int lowTemp = 20; // 溫度下限
unsigned int currentTemp = 0; // 當(dāng)前溫度

// 延時函數(shù)
void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = ms; i > 0; i--)
        for (j = 110; j > 0; j--);
}

// DS18B20初始化
bit Init_DS18B20() {
    bit presence;
    
    DQ = 1; // 設(shè)置DQ為輸出
    delay(1);
    DQ = 0; // 主機拉低DQ線
    delay(75);
    DQ = 1; // 主機釋放DQ線
    delay(4);
    presence = DQ; // 從機檢測到的應(yīng)答信號
    
    delay(20);
    
    return presence;
}

// DS18B20寫字節(jié)
void Write_DS18B20(unsigned char dat) {
    unsigned char i;
    
    for (i = 0; i < 8; i++) {
        DQ = 0; // 主機拉低DQ線
        _nop_();
        DQ = dat & 0x01; // 寫數(shù)據(jù)位
        delay(5);
        DQ = 1; // 主機釋放DQ線
        dat >>= 1;
    }
}

// DS18B20讀字節(jié)
unsigned char Read_DS18B20() {
    unsigned char i, dat;
    
    for (i = 0; i < 8; i++) {
        DQ = 0; // 主機拉低DQ線
        _nop_();
        DQ = 1; // 主機釋放DQ線
        _nop_();
        dat >>= 1;
        if (DQ)
            dat |= 0x80; // 讀數(shù)據(jù)位
        delay(5);
    }
    
    return dat;
}

// 讀取溫度
unsigned char ReadTemperature() {
    unsigned char temp_h, temp_l;
    
    Init_DS18B20();
    Write_DS18B20(0xCC); // 跳過ROM指令
    Write_DS18B20(0xBE); // 發(fā)送讀溫度命令
    
    temp_l = Read_DS18B20(); // 讀低字節(jié)
    temp_h = Read_DS18B20(); // 讀高字節(jié)
    
    currentTemp = temp_h;
    
    return temp_l;
}

// LCD初始化
void LCD_Init() {
    delay(15);
    Write_Command(0x38); // 設(shè)置8位數(shù)據(jù)總線,2行顯示,5x7點陣
    Write_Command(0x0C); // 顯示器打開,光標(biāo)關(guān)閉
    Write_Command(0x06); // 光標(biāo)右移,顯示器不移動
    Write_Command(0x01); // 顯示清屏
}

// LCD寫命令
void Write_Command(unsigned char com) {
    RS = 0;
    RW = 0;
    E = 1;
    P0 = com;
    delay(1);
    E = 0;
}

// LCD寫數(shù)據(jù)
void Write_Data(unsigned char dat) {
    RS = 1;
    RW = 0;
    E = 1;
    P0 = dat;
    delay(1);
    E = 0;
}

// LCD顯示溫度
void Display_Temperature(unsigned char temp) {
    unsigned char temp_str[5];
    
    temp_str[0] = temp / 10 + '0';
    temp_str[1] = temp % 10 + '0';
    temp_str[2] = '.';
    temp_str[3] = ReadTemperature() / 10 + '0';
    temp_str[4] = ReadTemperature() % 10 + '0';
    
    Write_Command(0x80); // 第一行第一個字符位置
    Write_String("Temp: ");
    Write_Command(0x86); // 第一行第七個字符位置
    Write_String(temp_str);
    Write_Command(0xC0); // 第二行第一個字符位置
    Write_String("High: ");
    Write_Command(0xC6); // 第二行第七個字符位置
    Write_Char(highTemp / 10 + '0');
    Write_Char(highTemp % 10 + '0');
    Write_Command(0xCB); // 第二行第十個字符位置
    Write_String("Low: ");
    Write_Command(0xCF); // 第二行第十四個字符位置
    Write_Char(lowTemp / 10 + '0');
    Write_Char(lowTemp % 10 + '0');
}

// LCD寫字符串
void Write_String(unsigned char *str) {
    while (*str != '\0') {
        Write_Data(*str);
        str++;
    }
}

// LCD寫字符
void Write_Char(unsigned char dat) {
    Write_Data(dat);
}

// 蜂鳴器報警
void Alarm() {
    Buzzer = 0;
    delay(500);
    Buzzer = 1;
    delay(500);
}

// 按鍵掃描
void Key_Scan() {
    if (K1 == 0) { // K1按下,設(shè)置高溫
        delay(5);
        if (K1 == 0) {
            highTemp++;
            Write_Command(0xCB); // 第二行第十個字符位置
            Write_Char(highTemp / 10 + '0');
            Write_Char(highTemp % 10 + '0');
            while (!K1);
        }
    }
    
    if (K2 == 0) { // K2按下,設(shè)置低溫
        delay(5);
        if (K2 == 0) {
            lowTemp--;
            Write_Command(0xCF); // 第二行第十四個字符位置
            Write_Char(lowTemp / 10 + '0');
            Write_Char(lowTemp % 10 + '0');
            while (!K2);
        }
    }
}

// 主函數(shù)
void main() {
    LCD_Init();
    
    while (1) {
        ReadTemperature(); // 讀取溫度
        Display_Temperature(currentTemp); // 顯示溫度
        
        if (currentTemp > highTemp || currentTemp < lowTemp) { // 溫度超出閾值,觸發(fā)報警
            Alarm();
        }
        
        Key_Scan(); // 按鍵掃描
    }
}

代碼最開始定義了一些用于控制硬件的IO口,如DQ用于連接溫度傳感器、RS、RW、E用于連接LCD顯示屏、K1、K2用于連接按鍵、Buzzer用于連接蜂鳴器。接下來定義了一些全局變量,包括高溫上限、低溫下限以及當(dāng)前溫度。然后是一些函數(shù)的定義和實現(xiàn),包括延時函數(shù)、DS18B20溫度傳感器初始化函數(shù)、寫字節(jié)函數(shù)、讀字節(jié)函數(shù)等。

ReadTemperature() 函數(shù)用于讀取溫度傳感器的溫度值,并將其保存到 currentTemp 變量中。

LCD_Init() 函數(shù)用于初始化LCD顯示屏。

Write_Command() 和 Write_Data() 函數(shù)用于向LCD顯示屏寫入命令和數(shù)據(jù)。

Display_Temperature() 函數(shù)用于在LCD顯示屏上顯示當(dāng)前溫度、高溫上限和低溫下限。

Alarm() 函數(shù)用于觸發(fā)蜂鳴器報警。

Key_Scan() 函數(shù)用于掃描按鍵狀態(tài),根據(jù)按鍵狀態(tài)來修改高溫上限和低溫下限。

主函數(shù) main() 中的邏輯:

  • 調(diào)用 LCD_Init() 初始化LCD顯示屏。
  • 進入一個無限循環(huán),不斷讀取當(dāng)前溫度并顯示在LCD上。
  • 如果當(dāng)前溫度超過設(shè)定的高溫上限或低于設(shè)定的低溫下限,就觸發(fā)報警。
  • 通過按鍵掃描函數(shù)來修改高溫上限和低溫下限。

六、總結(jié)

本文章詳細(xì)介紹了基于STC89C52主控芯片的數(shù)字溫度計的設(shè)計過程和實現(xiàn)原理。通過集成DS18B20溫度傳感器、LCD1602顯示屏、按鍵和蜂鳴器等功能,實現(xiàn)了溫度的采集、顯示和報警功能。通過按鍵設(shè)置溫度的上限和下限閥值,用戶可以根據(jù)需要進行調(diào)整,并在超出閥值時觸發(fā)報警,提醒用戶注意環(huán)境溫度的變化。該設(shè)計可以廣泛應(yīng)用于家庭、辦公室和實驗室等場景,為用戶提供了方便、準(zhǔn)確和實用的溫度監(jiān)測工具。文章來源地址http://www.zghlxwxcb.cn/news/detail-740496.html

到了這里,關(guān)于基于單片機的數(shù)字溫度計設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 51單片機DS18B20溫度傳感器使用及數(shù)碼管溫度計、LCD1602溫度顯示代碼詳解

    51單片機DS18B20溫度傳感器使用及數(shù)碼管溫度計、LCD1602溫度顯示代碼詳解

    溫馨提示:讀者若要徹底理解并會靈活使用DS18B20溫度傳感器,請詳細(xì)閱讀中文手冊,并且對照代碼注釋充分分析代碼。請不要覺得中文手冊內(nèi)容繁多!如能靜心分析,定能深有體會,獲益匪淺! 主函數(shù)操作順序(執(zhí)行序列) 功能指令 最后希望我的分享對你有所幫助!敬請關(guān)

    2024年02月12日
    瀏覽(29)
  • [模電課程設(shè)計]基于TCP7107的數(shù)字式溫度計設(shè)計

    [模電課程設(shè)計]基于TCP7107的數(shù)字式溫度計設(shè)計

    本設(shè)計 (仿真+原理圖+PCB+報告) 原理圖PCB:Altium Designer 仿真原版本:protues 8.9 設(shè)計編號:S0020 主要研究內(nèi)容: 【基本要求】采用電橋法,利用PT-100熱電阻對0-200℃測溫范圍進行測量并發(fā)送LED數(shù)碼管顯示,要求測量分辨率為0.5℃,數(shù)據(jù)測量間隔時間為5秒。 【提高要求】 1)針

    2024年02月11日
    瀏覽(37)
  • STM32實現(xiàn)數(shù)字溫度計

    STM32實現(xiàn)數(shù)字溫度計

    RTC (Real Time Clock):實時時鐘 RTC是個獨立的定時器。RTC模塊擁有一個連續(xù)計數(shù)的計數(shù)器,在相應(yīng)的軟件配置下,可以提供時鐘日歷的功能。修改計數(shù)器的值可以重新設(shè)置當(dāng)前時間和日期 RTC還包含用于管理低功耗模式的自動喚醒單元。 在斷電情況下 RTC仍可以獨立運行 只要芯片

    2024年02月21日
    瀏覽(15)
  • 數(shù)字溫度計方案芯片CS7193

    CS7193_T16E是帶LCD顯示的1位小數(shù)數(shù)字溫度計電路??梢酝ㄟ^外部PIN腳,選擇攝氏度顯示(℃)或者華氏度顯示(℉),并通過開關(guān)按鍵完成單位切換。它還包括了測試模式,自動關(guān)閉電源和報警功能等。CS7193_T16E適合應(yīng)用在臨床及家用數(shù)字溫度計等領(lǐng)域。其特點如下: 1、測量范

    2023年04月08日
    瀏覽(15)
  • 基于51單片機數(shù)字溫度報警器_DS18B20可調(diào)上下限

    基于51單片機數(shù)字溫度報警器_DS18B20可調(diào)上下限

    (仿真+程序+原理圖) 原理圖:Altium Designer 仿真版本:proteus 7.8 程序編譯器:keil 4/keil 5 編程語言:C語言 設(shè)計編號:S0009 1、實時溫度測量及顯示,超出溫度范圍聲光報警,上下限溫度可通過按鍵設(shè)定等功能; 2、溫度測量范圍0到99.9攝氏度,精度為0.1攝氏度; 3、可設(shè)置上下

    2024年02月06日
    瀏覽(25)
  • MLX90614紅外溫度計介紹

    MLX90614紅外溫度計介紹

    MLX90614是一款紅外非接觸溫度計。TO-39金屬封裝里同時集成了紅外感應(yīng)熱電堆探測器芯片和信號處理專用集成芯片。 由于集成了低噪聲放大器、17位模數(shù)轉(zhuǎn)換器和強大的數(shù)字信號處理單元,使得高精度和高分辨度的溫度計得以實現(xiàn)。溫度計具備出廠校準(zhǔn)化,有數(shù)字PWM和SMBus(系

    2023年04月08日
    瀏覽(19)
  • 手機怎樣使用溫度計功能,手機怎樣使用北斗導(dǎo)航

    手機怎樣使用溫度計功能,手機怎樣使用北斗導(dǎo)航

    大家好,本文將圍繞手機怎樣使用百度網(wǎng)盤教程視頻展開說明,手機怎樣使用搜狗輸入法是一個很多人都想弄明白的事情,想搞清楚手機怎樣使用谷歌瀏覽器需要先了解以下幾個事情。 Source code download: 本文相關(guān)源碼 手機編程軟件有很多,大部分都很難使用,操作不靈活,甚

    2024年02月03日
    瀏覽(21)
  • 基于51單片機的溫度報警器

    基于51單片機的溫度報警器

    設(shè)計任務(wù): 以51單片機為核心,設(shè)計和制作一個溫度報警器,能在LCD上顯示環(huán)境的溫度與希望溫度上下限閥值,并能設(shè)置希望溫度上下限閥值,系統(tǒng)上電的時候顯示的是當(dāng)前環(huán)境溫度和設(shè)定的溫度閥值,通過按鍵來修改溫度上下限閥值,再次上電時保持上一次的溫度設(shè)置。根

    2024年02月11日
    瀏覽(18)
  • 基于單片機的溫度控制器系統(tǒng)設(shè)計

    基于單片機的溫度控制器系統(tǒng)設(shè)計

    ** 單片機設(shè)計介紹, 基于單片機的溫度控制器系統(tǒng)設(shè)計 ?? 基于單片機的溫度控制器系統(tǒng)是一種利用單片機來檢測環(huán)境溫度并控制溫度的系統(tǒng)。它通常由以下幾個部分組成: 溫度傳感器:用于感知環(huán)境溫度的傳感器。常見的溫度傳感器有熱敏電阻(如NTC、PTC)、熱電偶和數(shù)

    2024年02月04日
    瀏覽(25)
  • 0535-基于單片機的溫度報警系統(tǒng)設(shè)計

    0535-基于單片機的溫度報警系統(tǒng)設(shè)計

    1、采用51/52單片機作為主控; 2、采用18B20傳感器檢測溫度,范圍0~99度; 3、采用數(shù)碼管顯示:當(dāng)前溫度值及報警閾值設(shè)置; 4、按鍵可設(shè)置溫度報警上下限值; 5、當(dāng)溫度低于下限或高于上限溫度時,蜂鳴器和LED燈同時報警。 采用Altium?Designer作為電路設(shè)計工具。Altium?Design

    2024年01月24日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包