1、C,也就是显示整数。如果你设定报警的温度为20C,则当环境温度达到21C时,报警发光二极管发光,同时继电器动作。如果你不需要对温度控制(报警),可以将报警温度值设置高些。如果控制的是某局部的温度,可将18B20用引线引出,但距离不宜过大,注意其引脚绝缘。2.电路的构成该电路有电源、按键控制模块、信号处理、驱动模块、显示模块、检测。.电路原理图.电路仿真图五、元件清单及功能介绍名称规格编号主要功能或作用按钮6X6X5AN1、AN2、AN3调节报警温度的值电容30PC1、C2单片机时钟振荡10UFC3单片机复位470UFC4电源滤波104C5单片机(20P座)AT89C2051IC1CPU温度传感
2、器DS18B20IC2稳压块L7805IC3电路工作于+5V接线座3P5.0J1外电路控制接线座2P5.0J2外接电源接线USB电源插座USBJ3电脑供电插座晶体12MJZ一位共阳数码管0.56LED1摄氏温度符号显示三位共阳数码管LED2温度值显示发光二极管3MMLED3报警发光指示兼Q1偏置三极管8550Q1、Q2、Q3、Q4Q1:报警时驱动继电器;Q2Q3Q4:数码管驱动电阻10KR1220和470R7R13和R14数码管限流,其中R14=4704.7KR2、R3、R4、R6三极管基极和温度传感器偏置2KR5三极管Q1基极偏置二极管1N4148V1续流,保护Q1跳线X1、X2用元件引脚连
3、继电器5V2AJDQ温度达到报警值时触点动作PCB板73MMX85MMUSB电源线连接电脑USB口6、程序:/*-温度控制器V1.5显示为三个共阳极LED温度传感器用单总线DS18B20CPU为2051,四个按键,分别为UP,DOWN,SET温度调节上限为125度,下限为-55度只能用于单只18B20-*/#include intrins.h#define Key_UP P3_0 /上调温度#define Key_DOWN P3_1 /下调温度#define Key_SET P1_7 /设定键(温度设定,长按开电源)#define RelayOutPort P3_5 /继电器输出#define
4、 LEDPort P1 /LED控制口#define LEDOneC P3_2 /LED DS1控制(百位)#define LEDTwoC P3_3 /LED DS2控制(十位)#define LEDThreeC P3_4 /LED DS3控制(个位)#define TMPort P3_7 /DS1820 DataPortunsigned char code LEDDis=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF; /0-9的LED笔划,0xFF为空,0xF7为负号static unsigned char bdata
5、 StateREG; /可位寻址的状态寄存器sbit DS1820ON = StateREG0; /DS1820是否存在sbit SetTF = StateREG1; /是否是在温度设置状态sbit KeySETDown = StateREG2; /是否已按过SET键标识sbit PowTF = StateREG3; /电源电源标识sbit KeyTF = StateREG4; /键盘是否允许/sbit KeySETDowning = StateREG5; /SET是否正在按下static unsigned char bdata TLV _at_ 0x0029; /温度变量高低位static
6、unsigned char bdata THV _at_ 0x0028;static signed char TMV; /转换后的温度值static unsigned char KeyV,TempKeyV; /键值static signed char TMRomV _at_ 0x0027; /高温限制static signed char TMSetV _at_ 0x0026; /温度设定值static unsigned char KSDNum; /SET键连按时的采集次数static unsigned char IntNum,IntNum2,IntNum3; /中断发生次数,IntNum用于S
7、ET长按检测,IntNum2用于设定状态时LED闪烁static signed char LED_One,LED_Two,LED_Three; /LED的显示位 LED_One为十位,LED_Two为个位static unsigned char Sign; /负号标识void main(void) void InitDS1820(void); /定义函数 void ROMDS1820(void); void TMVDS1820(void); void TMRDS1820(void); void TMWDS1820(void); void TMREDS1820(void); void TMERD
8、S1820(void); void ReadDS1820(void); void WriteDS1820(void); void Delay_510(void); void Delay_110(void); void Delay_10ms(void); void Delay_4s(void); void V2ToV(void); StateREG = 0; /初始化变量 SetTF = 1; PowTF = 1; /关电源 THV = 0; TLV = 0; TMV = 0; KeyV = 0; TempKeyV = 0; KSDNum = 0; IntNum = 0; IntNum2 = 0
9、; IntNum3 = 0; LED_One = 0; LED_Two = 0; InitDS1820(); /初始化 ROMDS1820(); /跳过ROM TMERDS1820(); /E2PRAM中温度上限值调入RAM TMRDS1820(); /读出温度指令 ReadDS1820(); /读出温度值和上限值 TMSetV = TMRomV; /拷贝保存在DS18B20ROM里的上限值到TMSetV EA = 1; /允许CPU中断 ET0 = 1; /定时器0中断打开 TMOD = 0x1; /设定时器0为模式1,16位模式 TH0=0xB1; TL0=0xDF; /设定时值为2000
10、0us(20ms) TR0 = 1; /开始定时 while(1);/定时器0中断外理中键扫描和显示void KeyAndDis_Time0(void) interrupt 1 using 2 LEDPort = 0xFF; if (!Key_UP) KeyV = 1;Key_DOWN) KeyV = 2;Key_SET) KeyV = 3; /KeySETDowning = 0; /清除 if (KeyV != 0) /有键按下 Delay_10ms(); /延时防抖 按下10ms再测 TempKeyV = 1; TempKeyV = 2; TempKeyV = 3; if (KeyV =
11、TempKeyV) /两次值相等为确定接下了键 if (KeyV = 3) /按下SET键,如在SET状态就退出,否则进入 /KeySETDowning = 1; /表明SET正在按下 PowTF = 0; /电源标识开 if (!KeyTF) if (SetTF) SetTF = 0; /标识位标识退出设定 InitDS1820(); ROMDS1820(); TMWDS1820(); /写温度上限指令 WriteDS1820(); /写温度上限到DS18B20ROM TMREDS1820(); /温度上限值COPY回E2PRAM else SetTF = 1;KeySETDown) /没有第一次按下SET时,KeySETDown标识置1 KeySETDown = 1; else KSDNum = KSDNum + 1; /前一秒内有按过SET则开始计数 if (SetTF) /在SET状态下 if (KeyV = 1) & (!KeyTF) TMSetV = TMSetV + 1; /上调温度 if (KeyV = 2) & TMSetV = TMSetV -
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1