《51单片机温度控制程序》由会员分享,可在线阅读,更多相关《51单片机温度控制程序(6页珍藏版)》请在金锄头文库上搜索。
1、51单片机温度控制程序51单片机温度控制程序(续)功能说明:本装置的功能是对温度进行实时监测与控制。 由温度传感器DS18B20对温度进行采样和转换成数字信号送入单片机,并与设定的报警温度上、下限值进行比较,信息通过LCD显示出来。 如实时温度超过设定的上、下限值,一方面由LC功能说明:本装置的功能是对温度进行实时监测与控制。 由温度传感器DS18B20对温度进行采样和转换成数字信号送入单片机,并与设定的报警温度上、下限值进行比较,信息通过LCD显示出来。 如实时温度超过设定的上、下限值,一方面由LCD显示信息,并发出警报声;另一方面自动控制继电器(Relay)开接通或断开,从而控制加热源的开
2、与断,达到对温度进行实时控。 制的目的。 程序:LCD2402.ASM01;02;温度值存放单元03TEMP_ZHEQU24H;实时温度值存放单元04TEMPLEQU25H;低温度值存放单元05TEMPHEQU26H;高温度值存放单元06TEMP_THEQU27H;高温报警值存放单元07TEMP_TLEQU28H;低温报警值存放单元08TEMPHCEQU29H;存十位数BCD码09TEMPLCEQU2AH;存个位数BCD码10;11按键输入引脚定义12K1EQUP2.113K2EQUP2.214K3EQUP2.315K4EQUP。 2.416;17SPKEQUP3.4;蜂鸣器引脚18RELAY
3、EQUP2.0;继电器引脚19XEQU2FH;LCD地址变量20;21;LCD控制引脚22RSEQUP3.523RWEQUP3.624EEQUP3.725;26FLAGEQU20H.0;DS18B20是否存在标记27KEY_UDEQU20H.1;设定KEY的UP与DOWN标记28DQEQUP2.52930;主程序3132MAIN:33ACALLSET_LCD;LCD初始化设置子程序34ACALLWR_THL;将报警上下线写入暂。 存寄存器子程序35TOOP:ACALLRESET_1820;调用18B20复位子程序36JNBFLAG,TOOP1;DS1820不存在转移TOOP1处37ACALLM
4、EU_OK;调用显示OK信息子程序38ACALLRE_THL;把EEROM里温度报警值拷贝回暂存器39ACALLTEMP_BJ;显示温度标记40JMPTOOP241TOOP1:ACALLMEU_ERROR;显示ERROR信息42ACALLTEMP_BJ;显示温度标记43JMP$;等待44;45TOOP2:46ACALLRE_TEMP;调用读取温度数据子程序47AC。 ALLSET_DATA;调用处理显示温度数据子程序48ACALLTEMP_COMP;实际温度值与标记温度值比较子程序49ACALLP_KEY;调用按键扫描子程序50SJMPTOOP2;循环5152;读取温度数据子程序53RE_TE
5、MP:54ACALLRESET_1820;18B20复位子程序55JNBFLAG,TOOP1;DS1820不存在56MOVA,#0CCH;跳过ROM匹配57ACALLWRITE_1820;写入子程序58MOVA,#44H;发出温度转换命令59ACALLWRITE_1820;调写入子程序60ACAL。 LRESET_1820;调复位子程序61MOVA,#0CCH;跳过ROM匹配62ACALLWRITE_1820;写入子程序63MOVA,#0BEH;发出读温度命令64ACALLWRITE_1820;写入子程序65ACALLREAD_1820;调用读取子程序66RET6768;温度数据处理显示子程序
6、69SET_DATA:70ACALLCONV_TEMP;处理温度BCD码子程序71ACALLDISP_BCD;显示区BCD码温度值刷新子程序72ACALLCONV;LCD显示子程序73RET7475;按键键扫描子程序76。 P_KEY:;按键K1处理77JBK1,PK1;K1键未按,转到PK1处78ACALLSPK_BZ;K1键按下,一声鸣响79JNBK1,$;等按键放开80MOVDPTR,#M_ALAX1;存M_ALAX1表81MOVA,#182ACALLLCD_PRINT;显示字符83ACALLLOOK_ALARM;显示信息区子程序84JBK3,$;等待K3按下85ACALLSPK_BZ;
7、一声鸣响86JMPPK2;转到标号PK2处87PK1:;按键K2处理88JBK2,PK3;K2键未按,转到PK3处89ACALLSPK。 _BZ;K2键按下,一声鸣响90JNBK2,$;等按键放开91MOVDPTR,#TA1;存#TA1表92MOVA,#193ACALLLCD_PRINT;显示字符94ACALLSET_ALARM;设定报警值TH、TL95ACALLWR_THL;将设定的TH,TL值写入DS18B20内96ACALLWRITE_E2;调用报警值拷贝EEROM子程序97PK2:98ACALLMEU_OK;显示OK信息子程序99ACALLTEMP_BJ;显示温度标记子程序100PK3
8、:101RET102;103TA1:;菜单表104DB。 RESETALERTCODE105;106107;设定报警值TH、TL子程序108SET_ALARM:109ACALLLOOK_ALARM;调用显示信息区子程序110A0:JBK1,A2;按下K1(查看键),程序向下运行111ACALLSPK_BZ;蜂鸣器响一声112JNBK1,$;等放开113CPL20H.1;UP/DOWN标记反向114A2:JB20H.1,A3;20H.1=1,UP,转移到A3。 115JMPA8;20H.1=0,DOWN,转移到A8116;117;TH值调整(增加)118A3:JBK2,A5。 ;按下K2(设定键
9、),程序向下运行119ACALLSPK_BZ;蜂鸣器响一声120INCTEMP_TH;TH值调整(增加)121MOVA,TEMP_TH;TH值送入A122CJNEA,#120,A4;TH值增到120,程序向下运行123MOVTEMP_TH,#0;TH值清0124A4:ACALLLOOK_ALARM;调用显示信息区子程序125MOVR5,#10126ACALLDELAY;调用延时程序127JMPA3;循环128;129;TL值调整(增加)130A5:JBK3,A7;按下K3(TL值设定键)程序向下运行131。 ACALLSPK_BZ;蜂鸣器响一声132INCTEMP_TL;TL值增加1133MO
10、VA,TEMP_TL;TL值送入A134CJNEA,#99,A6;比较,若A=99,程序向下运行135MOVTEMP_TL,#00H;TL值清0136A6:ACALLLOOK_ALARM;调用显示信息区子程序137MOVR5,#10138ACALLDELAY;调用延时程序139JMPA5;程序转移到A5,循环140;141;确定调整OK142A7:JBK4,A0;按下K4(调整确定键),程序向下运行143ACALLSPK_BZ;蜂鸣。 器响一声144JNBK4,$;等放开145RET;程序返回146;147;TH值调整(减少)148A8:JBK2,A10;按下K2(设定键),程序向下运行149
11、ACALLSPK_BZ;蜂鸣器响一声150DECTEMP_TH;TH值减1151MOVA,TEMP_TH;TH值送入A152CJNEA,#0FFH,A9;比较,若A=0FF,程序向下运行153JMPA12;转移到A12154A9:ACALLLOOK_ALARM;调用显示信息区子程序155MOVR5,#10156ACALLDELAY;调用延时子程序157JM。 PA0;转移到A12158;159;TL值调整(减少)160A10:JBK3,A13;按K3(TL值设定键),程序向下运行161ACALLSPK_BZ;蜂鸣器响一声162DECTEMP_TL;TL值减1163MOVA,TEMP_TL;TH
12、值送入A164CJNEA,#0FFH,A11;比较,若A=0FF,程序向下运行165JMPA12;转移到A12166A11:ACALLLOOK_ALARM;调用显示信息区子程序167MOVR5,#10168ACALLDELAY;调用延时子程序169JMPA0;转移到A0170A12:。 CPL20H.1;UP/DOWN标记反向171JMPA3;转移到A3,TH值调整(增加)172A13:JMPA7;转移到A7,确定调整OK173RET;子程序返回174175;显示信息区子程序176LOOK_ALARM:177MOVDPTR,#M_ALAX2;存表178MOVA,#2;显示在第二行179ACAL
13、LLCD_PRINT;调用显示字符子程序180MOVA,#0C6H;显示起始地址为第二行第7位181ACALLTEMP_BJ1;调用显示温度标记子程序182MOVA,TEMP_TH;加载TH数据183MOVX,。 #3;设置位置184ACALLSHOW_LINE2H;显示数据185;186MOVA,#0CEH;设定显示起始地址为第二行第15位187ACALLTEMP_BJ1;调用显示温度标记子程序188MOVA,TEMP_TL;加载TL数据189MOVX,#12;设置位置190ACALLSHOW_LINE2L;显示数据191RET192;193M_ALAX1:194DBLOOKALERTCOD
14、E,0195M_ALAX2:196DBTH:TL:,0197;198;显示温度标记子程序199TEMP_BJ1:200ACALLWR_CO。 MM;调用写指令子程序201MOVDPTR,#BJ2;存代码表202MOVR1,#0;使指针指到表中第一个码203MOVR0,#2;取码次数205B0:MOVA,R1;A为0206MOVCA,A+DPTR;读取码207ACALLWR_DATA;调用写数据子程序208INCR1;R1值加1209DJNZR0,B0;判断是否将代码读取完?210RET211;212BJ2:;代码表213DB00H,C214;215216;在LCD的第二行显示高温数字217SH
15、OW_LINE2H:218MOVB,#100;设置被除数,B。 为百位数219DIVAB;除法运算,结果A存商数,B存余数220ADDA,#30H;低半字节加30得到ASCII码(转换为字符)221PUSHB;B放入堆栈暂存起来222MOVB,X;设置LCD显示的位置223ACALLLCDP2;由LCD显示出来224;225POPB;B由堆栈取出来226MOVA,#0AH;A赋值10227XCHA,B;A、B数据互换,B为十位数228DIVAB;除法运算,结果A存商数,B存余数229ADDA,#30H;转换为字符230INCX;LCD显示位位置加1231PUSHB;B放入堆栈暂存起来232MOVB,X;设置LCD显示的位置233ACALLLCDP2;由LCD显示出来234;235POPB;B由堆栈取出来236INCX;LCD显示位位置加1237MOVA,B;B为个位数238MOVB,X;设置LCD显示的位置239ADDA,#30H;转换为字符240ACALLLCDP2;由LCD显示出来241RET242。 6Word版本