基于51单片机的多路多点温度检测两种供电方式proteus仿真原理图PCB
生活随笔
收集整理的這篇文章主要介紹了
基于51单片机的多路多点温度检测两种供电方式proteus仿真原理图PCB
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
功能介紹:
0.本系統(tǒng)采用STC89C52作為單片機(jī)
1.LCD1602液晶實(shí)時(shí)循環(huán)顯示多點(diǎn)溫度值
2.當(dāng)溫度超過設(shè)定溫度閾值范圍時(shí),蜂鳴器報(bào)警
3.按鍵可設(shè)定溫度閾值范圍/可控制報(bào)警開關(guān)
原理圖:
PCB:
主程序:
#include <reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義 #include "main.h"unsigned char dispFlag = 0; //更新顯示標(biāo)志enum _MODE_DF_ dispMode; unsigned char num = 0; int tempBuf = 0; //讀取溫度值 float temperature; //實(shí)際溫度值 int tempMin = 10; int tempMax = 50; bit alarmFlag = OFF; bit alarmSwitch = ON; unsigned char setIndex = 0;char dis0[16]; //定義顯示區(qū)域臨時(shí)存儲(chǔ)數(shù)組void main(void) {unsigned int channel = 0;Timer0_Init();LCD_Init(); //初始化液晶DelayMs(200); //延時(shí)有助于穩(wěn)定LCD_Clear(); //清屏LCD_DispStr(0, 0, " Welcome ");DelayS(1);LCD_Clear(); //清屏DispNormal();num = DS18B20_SearchROM();while (1) //主循環(huán){if (dispFlag == 1){dispFlag = 0;if (dispMode == NORMAL){TR0 = 0;if (channel == num){channel = 0;}DS18B20_Start();tempBuf = DS18B20_GetTemp(channel);channel++;temperature = (float)tempBuf * 0.0625; //溫度值轉(zhuǎn)換sprintf(dis0, "%01d", channel); //打印通道值LCD_DispStr(1, 1, dis0);sprintf(dis0, "%5.1f", temperature); //打印溫度值LCD_DispStr(3, 1, dis0);TR0 = 1;if (temperature < tempMin || temperature > tempMax){alarmFlag = ON;}else{alarmFlag = OFF;}if (alarmSwitch == ON){LCD_DispStr(11, 1, "ON "); //顯示報(bào)警開關(guān)狀態(tài)if (alarmFlag == ON){BUZZER_ON;LCD_DispStr(14, 1, " !"); //顯示報(bào)警標(biāo)志}else{BUZZER_OFF;LCD_DispStr(14, 1, " ");}}else{LCD_DispStr(11, 1, "OFF "); //顯示報(bào)警開關(guān)狀態(tài)BUZZER_OFF;}}}KeyProcess();} }void DispNormal(void) {LCD_WriteCommand(0x0C, 0); //關(guān)閉光標(biāo)閃爍LCD_DispStr(0, 0, " Temperature ");LCD_DispStr(0, 1, "T0: ");LCD_DispOneChar(8, 1, 0xdf); //寫入溫度右上角點(diǎn)LCD_DispOneChar(9, 1, 'C'); //寫入溫度的C }void DispSetTemp(unsigned char setIndex) {LCD_DispStr(0, 0, " Set Temp Limit "); sprintf(dis0, " L:%03d H:%03d ", tempMin, tempMax);LCD_DispStr(0, 1, dis0);switch (setIndex){case 1: LCD_SetCursor(6, 1, 1); break;case 2: LCD_SetCursor(13, 1, 1); break;default:;} }/*------------------------------------------------定時(shí)器初始化子程序 ------------------------------------------------*/ void Timer0_Init(void) {TMOD |= 0x01; //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響TH0 = (65536 - 18432) / 256; //重新賦值 20msTL0 = (65536 - 18432) % 256;EA = 1; //總中斷打開ET0 = 1; //定時(shí)器中斷打開TR0 = 1; //定時(shí)器開關(guān)打開 } /*------------------------------------------------定時(shí)器中斷子程序 ------------------------------------------------*/ void Timer0_Interrupt(void) interrupt 1 {static unsigned char time20ms = 0;TH0 = (65536 - 18432) / 256; //重新賦值 20msTL0 = (65536 - 18432) % 256;time20ms++;if (time20ms > 50){time20ms = 0;dispFlag = 1; //讀標(biāo)志位置1}}仿真演示視頻:
https://www.bilibili.com/video/BV1St4y1x79G/
實(shí)物演示視頻:
https://www.bilibili.com/video/BV1YK411Q7x3/
總結(jié)
以上是生活随笔為你收集整理的基于51单片机的多路多点温度检测两种供电方式proteus仿真原理图PCB的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 秉火429笔记之一初识STM32
- 下一篇: 第一天-网络设备安全操作知识