还剩30页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
//跳过ROMDS1820;ROM//读出温度指令TMRDS1820;读出温度值和上限值ReadDS1820;//〃拷贝保留在里区上限值到TMSetV=TMRomV;DS18B20ROM JTMSetV二EA1;〃定期器中断打开ET0=1;〃设定期器为模式位模式TMOD=Oxl;01,16//容许中断CPU〃设定期值为TL0=0xDF;20230us20msTH0=0xB1;〃开始定期TR0=1;whilel;//定期器中断外理中键扫描和显示void KeyAndDis_TimeOvoid interrupt1using2〃设定期值为TL0=0xDF;20230us20msTH0=0xB1;LEDPort=OxFF;if!Key_UPKeyV=1;if!Key_DOWNKeyV=2;if!Key_SETKeyV=3;//清除//KeySETDowning=0;〃有键按下ifKeyV!=0〃延时防抖按下再测Delay_10ms;10msif!Key_UPTempKeyV=1;if!Key_DOWNTempKeyV=2;if!Key_SETTempKeyV=3;//两次值相等为确定接下了键if KeyV==TempKeyV//按下键,如在状态就退出,否则进入if KeyV==3SET SETPowTF=0;〃电源标识开if!KeyTFif SetTF〃标识位标识退出设定SetTF=0;初始化InitDS1820;////跳过ROMDS1820;ROM〃写温度上限指令TMWDS1820;〃写温度上限到WriteDS1820;DS18B20ROM//写温度上限到WriteDSl820;DS18B20ROM//写温度上限到WriteDS1820;DS18B20ROM初始化InitDS1820;//〃跳过ROMDS1820;ROM〃温度上限值回TMREDS1820;COPY E2PRAMelseSetTF=1;没有第一次按下时,标识置if!KeySETDown//SET KeySETDown1KeySETDown=1;else〃前一秒内有按过则开始计数KSDNum=KSDNum+1;SET〃在状态下if SetTFSETif KeyV==1!KeyTF〃上调温度TMSetV=TMSetV+1;if KeyV=2JKeyTF〃下调温度TMSetV=TMSetV-1;〃限制温度上下限if TMSetV=-55TMSetV=-55;〉=if TMSetV125TMSetV=125;}〃当键盘处在可用时,锁定if!KeyTFIntNum3==0KeyTF=1;〃在秒内按下了则计中断发生次数用于长按时if KeySETDown2SET SET计时用IntNum=IntNum+1;//中断发生了次时大概秒为秒左右ifIntNum
55551.
2751.5IntNum=0;KeySETDown=0;//如一直长按了秒左右if KSDNum==55SETL2RelayOutPort=1;〃关闭继电器输出PowTF=1;〃电源标识关LEDOneC=0;LEDTwoC=0;LEDThreeC=0;//延时Delay_4s;二LEDPort OxBF;//关显不LEDTwoC=1;LEDOneC=1;LEDThreeC=1;Delay_4s;IntNum=0;IntNum2=0;IntNum3=0;KSDNum=0;KeyV=0;//清空变量准备下次键扫描TempKeyV=0;if!PowTF初始化InitDS1820;//〃跳过ROMDS1820;ROM//温度转换指令TMVDS1820;Delay_510;//延时等待转换完毕Delay_510;初始化InitDS1820;//〃跳过ROMDS1820;ROM〃读出温度指令TMRDS1820;读出温度值ReadDS1820;//〃转换显示值V2ToV;〃根据采集到欧温度值控制继电器if TMVTMSetV IelseRelayOutPort=1;〃用于闪烁计数if SetTFIntNum2=IntNum2+1;二if IntNum250IntNum20;〃用于防止按键连按if KeyTFIntNum3=IntNum3+1;ifIntNum325IntNum3=0;KeyTF=0;〃计数在后半段时显示if SetTFIntNum225goto InitEnd;LEDPort=LED_One;LEDOneC=0;Delay_510;〃显示百位数LEDOneC=1;LEDPort=LED Two;Delay_510;〃显示十位数LEDTwoC=1;LEDPort=LED_Three;LEDThreeC=0;Delay_510;〃显示个位数LEDThreeC=1;InitEnd:;}〃数值转换void V2ToVvoidTLV=TLV»4;〃读出时高下位数值移位THV=THV«4;〃合并高下位放入为实际温度值TMV=TLV|THV;TMSign=0;ifSetTF||!Key_SET二〃取符号Sign TMSetV»7;elseSign=TMV»7;ifSetTF||!Key_SET状态下显示设定值LED_One=〜TMSetV-1/100;//SETLED_Two=〜TMSetV-1-LEDJDne*100/10;LED_Three=〜TMSetV-1-LED_One*100-LED_Two*10;else〃转换百位值LED_One=〜TMV/100;LED_Two=-TMV-LED_One*100/10;LED_Three=〜TMV-LED_One*100-LED_Two*10;}else ifSetTF||!Key_SET状态下显示设定值LED_One=TMSetV/100;//SETLED_Two=TMSetV-LED_One*100/10;LED_Three=TMSetV-LED_One*100-LED_Two*10;else〃转换百位值LED_One=TMV/100;LED_Two=TMV-LED_One*100/10;二LED ThreeTMV-LED One*100-LED Two*10;}〃转字段LED超过百时十位的处理if LEDJDne//二LED_Two LEDDis[LED_Two];elseif LED_Two==0LED.Two=LEDDis
[10];elseLED_Two=LEDDis[LED_Two];LED_One=LEDDis[ll];elseif LED_One==0LED_One=LEDDis
[10];elseLED_One=LEDDis[LED_One];LED_Three=LEDDis[LED_Three];}〃初始化void InitDS1820void DS1820〃拉高TMPort=1;TMPort//保持一种周期_nop_;〃拉低TMPort=0;TMPort//延时复位时间要的低电平Delay_510;DS1820500us//拉高TMPort=1;TMPort//保持_nop_;_nop_;_nop_;//延时等待回应Delay.110;llOus DS1820〃回应信号为低电平if!TMPortDS1820ON=1;elseDS18200N=0;//延时Delay_110;Delay_110;〃拉高TMPort=1;TMPort〃跳过匹配void ROMDS1820void ROM#pragma asmMOV A,#0CCHMOV R2,#8CLRCWRI:CLR P3_7MOV R3,#6MOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR1SETB P3_7#pragma endasm}//温度转换指令void TMVDS1820void#pragma asmMOVA,#44HMOV R2,#8CLRCWR2:CLR P3_7MOV R3,#6MOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR2SETB P3_7#pragma endasm}//读出温度指令void TMRDS1820void#pragma asmMOVA,#0BEHMOV R2,#8CLRCWR3:CLR P3_7MOV R3,#6MOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR3SETB P3_7#pragma endasm}//写入温度限制指令void TMWDS1820void#pragma asmMOVA,#04EHMOV R2,#8CLRCWR13:CLR P3_7MOV R3,#6MOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR13SETB P3_7#pragma endasm}void TMREDS1820void//COPY RAMto E2PRAM#pragma asmMOVA,#48HMOV R2,#8CLRCWR33:CLR P3_7MOV R3,#6MOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR33SETB P3_7#pragma endasm}void TMERDS1820void//COPY E2PRAM toRAM#pragma asmMOVA,#OB8HMOV R2,#8CLRCWR43:CLR P3_7MOV R3,#6MOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR43SETB P37#pragma endasm〃写入温度限制值void WriteDS1820void#pragma asm//发出写指令后连发两个字节分别为上下限MOVA,26H4EH ROMMOV R2,#8CLRCWR23:CLR P37MOV R3,#6MOV R3,#23DJNZ R3,$SETB P3_7NOPDJNZ R2,WR23SETB P37#pragma endasm}读出温度值void ReadDS1820void//#pragma asm将温度高位和低位,高温限制位从中读出MOV R4,#3;DS18B20低位存入高位存入高温限制位存入MOVR1,#29H;29HTEMPER,,28HTEMPER_H,27HTMRomVRE00:MOV R2,#8RE01:CLRCNOPNOPCLR P3_7NOPNOPNOPSETB P3_7MOV R3,#09RE10:DJNZ R3,RE10MOV C,P3_7MOV R3,#23RE20:DJNZ R3,RE20RRC ADJNZ R2,RE01MOV@R1,ADEC RIDJNZ R4,RE00#pragma endasm30A\_oGNDocasisatin631rdIAI90Z3681V——ONO01KI£11「利Md lDG6J WridODfEdi£18cd/____近ZId uNDri1IH\£Q【.Idfed c黑r£,Id QINDcfd\J2_OIH9亘VId ITVJX7OOI0a【ZTV1X IfSd9,Id CJXDlR91其比LId OXWEdZ.Q7□DA01SH$08G Hl8cam10M厂TQND・ino-E m\\—I cJ£31DZf^F dO£asn0£NV—□dnoz,t IDitoi而°・0o33A//延时微秒void Delay_510void510#pragma asmMOV R0,#7DHMOVR1,#02HTSR1:DJNZ RO,TSR1MOVR0,#7DHDJNZR1,TSR1#pragma endasm〃延时微秒void Delay_l10void110#pragma asmMOVR0,#19HMOVR1,#02HTSR2:DJNZ R0,TSR2DJNZRLTSR2#pragma endasm}〃延时void Delay_10msvoid10ms#pragma asmMOV RO,#19HMOVR1,#OC8HTSR3:DJNZ R0,TSR3MOVRO,#19HDJNZR1JSR3#pragma endasm〃延时void Delay_4svoid4s#pragma asmMOVR2,#28HTSR5:MOVR1,#OC8HTSR4:DJNZR0,TSR4MOVR0,#0FAHDJNZR1,TSR4DJNZR2,TSR5#pragma endasm
七、心得体会通过在这次的温度传感器的实训我们小组时在这三周时间里,养成了良好的合作气氛,懂得了温度传感器的原理跟基本构造,也感受到了团体合作时重要性尤其是我们组长,起到了良好日勺带头作用在制作过程中出现了诸多日勺问题,包括温度传感器无效果,数码管无反应但通过我们及时讨论,老师的协助,最终还是成功了
五、元件清单及功能简介名称规格编号重要功能或作用按钮、、调整报警温度时值6X6X5AN1AN2AN3电容、单片机时钟振荡30P ClC2电容单片机复位10UF C3电容电源滤波470UF C4电容电源滤波104C5单片机座)(20PAT89C2051IC1CPU温度传感器温度传感器DS18B20IC2稳压块电路工作于L7805IC3+5V接线座外电路控制接线座3P
5.0J1接线座外接电源接线2P
5.0J2电源插座电脑供电插座USB USBJ3晶体单片机时钟振荡12M JZ一位共阳数码管摄氏温度符号显示
0.56LED1三位共阳数码管温度值显示
0.56LED2发光二极管报警发光指示兼偏置3MM LED3Q1三极管、、、报警时驱动继电器;数码管驱动8550QI Q2Q3Q4Q1Q2Q3Q4电阻单片机复位10K R1电阻和和数码管限流,其中220470R7—R13R14R14=470电阻、、、三极管基极和温度传感器偏置
4.7K R2R3R4R6电阻三极管基极偏置2K R5Q1二极管续流,保护1N4148VI Q1跳线、用元件引脚连XI X2继电器温度到达报警值时触点动作5V2A JDQ板73MMX85MPCBM电源线连接电脑口USB USB、程序:6温度控制器VL5显示为三个共阳极LED温度传感器用单总线DS18B20为四个按键,分别为CPU2051,UP,DOWN,SET温度调整上限为度,下限为度125-55只能用于单只18B20*/#include AT89X05kH#include intrins.h〃上调温度#define Key_UP P3_0#define Key_DOWN〃下调温度P3_l〃设定键(温度设定,长按开电源)#define Key_SET Pl_7#define RelayOutPort//继电器输出P3_5控制口#define LEDPortPl//LED控制(百位)#define LEDOneCP3_2//LED DS1控制(十位)#define LEDTwoCP3_3//LED DS2控制(个位)#define LEDThreeCP3_4//LED DS3#define TMPortP3_7//DS1820DataPortunsigned charcode的笔戈为LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};//0-9LED lOxFF空为负号,0xF7〃可位寻址的状态寄存器static unsignedchar bdataStateREG;J与否存在sbit DS1820ON=StateREGA0;//DS1820〃与否是在温度设置状态sbit SetTF=StateREGAl;〃与否已按过键标识sbit KeySETDown=StateREGA2;SET〃电源电源标识sbit PowTF=StateREGA3;〃键盘与否容许sbit KeyTF=StateREGA4;与否正在按下//sbit KeySETDowning=StateREGA5;//SET〃温度变量高下位static unsignedchar bdataTLV_at_0x0029;static unsignedchar bdataTHV_at_0x0028;〃转换后的温度值static signedchar TMV;〃键值static unsignedchar KeyV,TempKeyV;〃高温限制static signedchar TMRomV_at_0x0027;//温度设定值static signedchar TMSetV_at_0x0026;键连准时的采集次数static unsignedchar KSDNum;//SET I〃中断发生次数,用于长按检测,static unsignedchar IntNurnJntNum2JntNum3;IntNum SET用于设定状态时闪烁IntNum2LED的显示位为十位,static signedchar LED_One,LED_Two,LED_Three;//LED JLED_One为个位LED_Two〃负号标识static unsignedchar Sign;void mainvoid〃定义函数void InitDS1820void;void ROMDS1820void;void TMVDS1820void;void TMRDS1820void;void TMWDS1820void;void TMREDS1820void;void TMERDS1820void;void ReadDS1820void;voidWriteDS1820void;void Delay_510void;void Delay_l10void;void Delay_10msvoid;void Delay_4svoid;void V2ToVvoid;〃初始化变量StateREG=0;SetTF=1;〃关电源PowTF=1;THV=0;TLV=0;TMV=0;KeyV=0;TempKeyV=0;KSDNum=0;IntNum=0;IntNum2=0;IntNum3=0;LED One=0;LED_Two=0;初始化InitDS1820;//〃跳过ROMDS1820;ROM中温度上限值调入TMERDS1820;//E2PRAM RAM初始化InitDS1820;//。