《智能家居远程控制系统源程序138.docx》由会员分享,可在线阅读,更多相关《智能家居远程控制系统源程序138.docx(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、智能家居远程控制系统刘庆宇;*; Filename: BSHB_1_0_2.ASM ; MCU: AT89S52 OSC:6.0000MHz; IC: MT8870 ISD4002 LM386 74LS04 ULN2803 24C02; Display: LED*4; Build by: Liu Qing Yu ; Vision : V1.0.2; Date:2008-06-13 ;*;功能:利用电话线路,远程控制4组继电器的通断,控制电饭煲、电;暖风等家用电器。可以设定延时通断。恢复出厂设置时按住设;置按键按复位键即可恢复默认密码123456; 默认开关状态为:关,延时为:无;如需改变等待振
2、铃次数,请搜索“振铃检测程序”并进行修改。; ;寄存器组使用:;00:主程序;01:显示子程序;*; 输入输出引脚定义;*;MT8870: 数据P0.0P0.3MT_IN EQU P1 ;STD_INT0;ISD4002:;ISDINT_INT1MOSI BIT P0.4SS BIT P0.5SCLK BIT P0.6;HD7279:DAT BIT P2.4CS BIT P3.5CLK BIT P3.6;24C02:SCL BIT P1.6SDA BIT P1.7;继电器(摘机电路):JDQK BIT P1.4 ;低电平有效;继电器1(控制高压)JDQ0_DFB BIT P0.0 ;电饭煲JD
3、Q1_DNFBIT P0.1 ;电暖风JDQ2_KTBIT P0.2 ;空调JDQ3_RSHBIT P0.3 ;电热水器;延时指示灯:(低电平有效)LED0BIT P2.0LED1BIT P2.1LED2BIT P2.2LED3BIT P2.3;振铃检测ZHENLJC BIT P1.5HUIFUBITP0.7;恢复出厂设置按键,默认密码123456,默认开关状态为:关,延时为:无;0=恢复出厂设置1=不恢复;使用时按住此按键按复位键即可 ;*; 变量定义;*;工作状态寄存(00-07)GZZHTEQU 20HYSH0_KGBIT 00H;延时状态, 1=开启 0=关闭YSH1_KGBIT 01
4、HYSH2_KG BIT 02HYSH3_KG BIT 03HMIMABIT 04H;GZZHT.1 密码状态,是否已经输入错误一次 1=是 0=否STDBIT 05H ;有新数据输入 1=有0=无XINMIMABIT 06H;新密码校验位,校验两次输入密码是否一致1=不一致 0=一致ZHL6CBIT 07H;振铃次数已够,可以摘机1=可以 0=不可以;工作状态寄存2(08-0F)GZZHT2EQU 21H;位寻址寄存 21H;NOINPUTBIT 08H;10秒没有新数据输入,自动挂机。 1=可以挂机 0=不可以IS15SBIT 09H;DEC_ONBIT 0AH;是否显示小数点:1=显示
5、0=不显示ISDINTBIT 0BH;4002中断置位标志OUT_PLAYBIT 0CH;从播放进程中终止标志1=跳过后面的语音提示;JDQ0_YSHBIT 0AH; 继电器延时状态 1=开 0=关;JDQ1_YSHBIT 0BH;JDQ2_YSHBIT 0CH;JDQ3_YSHBIT 0DH;YANSHIBIT 05H ;GZZHT.2 延时 1=开启 0=关闭;YANSHIKGBIT 06H ;GZZHT.3 延时状态 1=延时开 0=延时关;YSH_OKBIT 0BH;延时数据已准备好,可以写入 1=可以 0=不可以M1EQU 22H;密码寄存(1-6)M2EQU 23HM3EQU 24
6、HM4EQU 25HM5EQU 26HM6EQU 27HDINGSHI EQU 28H;定时时间临时存储DATA_IN EQU 29H;HD7279输入输出缓存DATA_OUT EQU 2AHPLAY_ADDEQU 2BHBAK_A_T1EQU 2CHYSH0_TMEQU 30H ;延时时间寄存YSH1_TMEQU 31HYSH2_TMEQU 32HYSH3_TMEQU 33HOUT_BWEQU 34H;延时数据输出临时存储(用于显示)OUT_SHWEQU 35HOUT_GWEQU 36HMIMAJSHEQU 37H;【密码计数】对输入的密码个数进行计数;ZHENLINGEQU 31H;【振铃
7、计数】对振铃次数进行计数;TIMEMOOD EQU 29H;定时器模式:03=关,80=4096Hz,81=64Hz,82=1Hz,83=1/60HzMTEMPEQU 38H;记录密码输入错误次数TEMPEQU 39H;第一次输入新密码临时存储(3AH3FH)MT1EQU 3FHT0_TMPEQU 40H;T0临时存储,每隔0.0005秒加1T0_TMP_SEQU 41H;T0临时存储,每隔0.1S减1T0_TMP_MEQU 42H;T0临时存储,每隔0.5S减1BAK_AEQU 43H;中断期间A的备份BAK_R1EQU 44H;BAK_RS1EQU 45HBAK_RS0EQU 46HBAK
8、_A_SOUNDEQU 47HBAK_DPHEQU 48HBAK_DPLEQU 49H;延时数据临时存储YSH_BWEQU 4AHYSH_SHWEQU 4BHYSH_GWEQU 4CHADDRESSLEQU 4DH;ISD4002放音地址 低位PANDAHEQU 4EH;ISD4002放音地址 高位TEMP2EQU 4FH;密码临时存储TEMP3EQU 50H;T1中断检测临时存储TIMEEQU 51H;倒计时定时时间临时存储,长度1字节DISP_CHTEQU 52H;更换显示继电器倒计时时间计数DISP_CHEQU 53H;显示开关指示(1-4)YSH0_KG_1EQU 54H;延时状态,
9、1=开启 0=关闭YSH1_KG_1EQU 55HYSH2_KG_1 EQU 56HYSH3_KG_1 EQU 57HSOUND_OUT_BWEQU 58H;延时数据输出临时存储(用于剩余时间提示)SOUND_OUT_SHWEQU 59HSOUND_OUT_GWEQU 5AHZHL_CSHEQU 5BH;*; 主程序;*ORG0000HLJMPMAIN ORG0003HLJMPSTD_INORG 00BHLJMP T0STOPORG 0013HLJMP INT1_STOPORG 001BHLJMPT1STOPORG0030H;全局初始化MAIN:MOVSP,#60H;堆栈MOVIE,#00H
10、;禁止所有中断LCALLLOAD;载入状态MOVMIMAJSH,#00HMOV DINGSHI,#00HMOV GZZHT,#00HMOV GZZHT2,#00HMOV T0_TMP,#200;T0临时存储,每隔0.0005秒加1MOV T0_TMP_S,#5;T0临时存储,每隔0.1S加1MOV T0_TMP_M,#120;T0临时存储,每隔1S加1MOV DISP_CHT,#4;更换显示继电器倒计时时间计数MOV DISP_CH,#1 ;显示开关指示(1-4)MOV TMOD,#02H;定时器0,方式2(8位自装载) MOV TH0,#06HMOV TL0,#06H;MOV IP,#000
11、00100B;设置外部中断1为高优先级中断SETB IT1;脉冲触发方式SETB ET0;允许T0中断SETB EA;允许中断SETB TR0;启动T0定时器SETB IT0;脉冲触发方式;SETB EX0CLR OUT_PLAY;使用寄存器组00CLRRS1CLRRS0LCALLDELAY_30msJNBHUIFU,HUIFU1;是否恢复出厂设置MAINLOOP:JB HUIFU,LP1LCALL DELAY_30MSJNB HUIFU,LP2LP1:CLR ZHL6C;清振铃6次标志位LCALL ZHENLING1;检测振铃JNB ZHL6C,MAINLOOP;振铃到6次,可以摘机LP2:
12、LCALL ZHAIJI;振铃达到6次,摘机SJMPMAINLOOP;-;恢复出厂设置HUIFU1:JNB HUIFU,$MOV M6,#01HMOV M5,#02HMOV M4,#03HMOV M3,#04HMOV M2,#05HMOV M1,#06HLCALL SAVELJMP MAINLOOP;*;摘机子程序;*ZHAIJI:;LCALL POWEROFF;屏蔽ISD4002,以免影响DTMF信号识别CLRJDQK;继电器摘机LCALL DELAY_BSLCALL DELAY_BSCLR MIMACLR EX0;不允许语音提示中途退出MOV A,#13LCALL SOUND;语音提示:欢
13、迎您使用智能家居远程控制系统,请输入密码SETB EX0ZHJ_MM:LCALL STDJC;检测输入数据,结果由A带回JB NOINPUT,EXIT_1ZHJ_MM_JC1:MOV MIMAJSH,#00HINC MIMAJSHCJNEA,M6,ZHJ_MMC;校验密码第一位是否正确;JBJDQK,EXITLCALL STDJCJB NOINPUT,EXIT_1INC MIMAJSHCJNEA,M5,ZHJ_MMC;校验密码第二位是否正确;JBJDQK,EXITLCALL STDJCJB NOINPUT,EXIT_1INC MIMAJSHCJNEA,M4,ZHJ_MMC;校验密码第三位是否正
14、确;JBJDQK,EXITT3LCALL STDJCJB NOINPUT,EXIT_1INC MIMAJSHCJNEA,M3,ZHJ_MMC;校验密码第四位是否正确;JBJDQK,EXITLCALL STDJCJB NOINPUT,EXIT_1INCMIMAJSHCJNEA,M2,ZHJ_MMC;校验密码第五位是否正确;JBJDQK,EXITLCALL STDJCJB NOINPUT,EXIT_1INC MIMAJSHCJNEA,M1,ZHJ_MMC;校验密码第六位是否正确;JBJDQK,EXITLJMP ZHJ_2;-;密码错ZHJ_MMC:LCALL STDJC;按键检测JB NOINPU
15、T,EXIT_1INC MIMAJSHMOV A,MIMAJSH;密码输入次数存ACLR CSUBBA,#6;是否已输入6位JC ZHJ_MMC;未输入六位,继续检测按键JB MIMA,ZHJ_MMC1LCALL DELAY_BSMOV A,#33;语音提示:输入错误,请重新输入LCALL SOUNDSETB MIMALJMP ZHJ_MMZHJ_MMC1:LJMP EXIT;$EXIT_1:LJMP EXIT;$;密码正确ZHJ_2:SETB EX0;允许语音提示中途退出LCALL DELAY_BSMOV A,#14;语音提示:开关状态查询与修改请按1,修改密码请按2LCALL SOUNDJ
16、B OUT_PLAY,ZHJ_JC1MOV A,#15;语音提示:挂机请按*号键LCALL SOUNDJB OUT_PLAY,ZHJ_JC1;语音播放中有按键输入,直接跳转到按键识别部分LCALL STDJC;检测按键JB NOINPUT,EXIT_1ZHJ_JC1:CJNEA,#01H,ZHJ_GMM_1;若按键为:1;% 状态查询 ;%ZHJ_ZHT:LCALL DELAY_30MSSETB EX0MOV A,#23;请根据语音提示选择设备LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_N;语音播放中有按键输入,直接跳转到按键识别部分MOV A,#1;语音提示:1LCALL
17、SOUNDJB OUT_PLAY,ZHJ_DFB_NMOV A,#16;语音提示:电饭煲LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_NLCALL DELAY_BSMOV A,#2;语音提示:2LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_NMOV A,#17;语音提示:电暖风LCALL DELAY_BSLCALL SOUNDJB OUT_PLAY,ZHJ_DFB_NMOV A,#3;语音提示:3LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_NMOV A,#18;语音提示:空调LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_NLCA
18、LL DELAY_BSMOV A,#4;语音提示:4LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_NMOV A,#19;语音提示:电热水器LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_NLCALL STDJC;检测按键JB NOINPUT,EXIT_1AJMP ZHJ_DFB_N;$ZHJ_GMM_1:LJMP ZHJ_GMMZHJ_DNF_1:LJMP ZHJ_DNFZHJ_DNF_N_1:LJMP ZHJ_DNF_N;$;$;% %;% 电饭煲 状态查询 %;% %;$ZHJ_DFB_N:CJNE A,#01H,ZHJ_DNF_N_1;若按键为:1ZHJ_D
19、FB:CLR EX0;禁止语音提示中途退出MOV A,#16;语音提示:电饭煲LCALL SOUNDMOV A,#36;语音提示:的状态为LCALL SOUNDJNB YSH0_KG,ZHJ_DFB2 ;无延时则跳转JNB JDQ0_DFB,ZHJ_DFB1;延时关则跳转MOV A,#26;语音提示:延时开LCALL SOUNDMOV A,#0;继电器0剩余时间提示LCALL SOUND_YSH;延时剩余时间提示子程序AJMP ZHJ_DFBXGZHJ_DFB1:MOV A,#27;语音提示:延时关LCALL SOUNDMOV A,#0;继电器0剩余时间提示LCALL SOUND_YSH;延时
20、剩余时间提示子程序AJMP ZHJ_DFBXGZHJ_DFB2:JNB JDQ0_DFB,ZHJ_0_KMOV A,#20;语音提示:关LCALL SOUNDAJMP ZHJ_DFBXGZHJ_0_K:MOV A,#21;语音提示:开LCALL SOUND;% 电饭煲 状态修改 %ZHJ_DFBXG:SETB EX0LCALL DELAY_30MSSETB EX0;允许语音提示中途退出MOV A,#24;语音提示:开启LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#16;语音提示:电饭煲LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV
21、 A,#28;语音提示:请按LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#1;语音提示:1LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#25;语音提示:关闭LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#16;语音提示:电饭煲LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#28;语音提示:请按LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#2;语音提示:2LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHB
22、MOV A,#26;语音提示:延时开LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#28;语音提示:请按LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#3;语音提示:3 LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#27;语音提示:延时关LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHBMOV A,#28;语音提示:请按LCALL SOUND JB OUT_PLAY,ZHJ_DFB_SHBMOV A,#4;语音提示:4LCALL SOUNDJB OUT_PLAY,ZHJ_D
23、FB_SHBMOV A,#15;语音提示:返回上级请按9,挂机请按*号键LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHB LCALL STDJC;检测按键JB NOINPUT,EXIT_2;-;开启电饭煲ZHJ_DFB_SHB:CJNEA,#01H,ZHJ_DFBG;若按键为:1CLR JDQ0_DFBSETB LED0CLR YSH0_KGZHJ_DFBK4:MOV A,#16;语音提示:电饭煲LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_N_T2MOV A,#30;语音提示:已开启LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_N_T2LJ
24、MP ZHJ_ZHT;$EXIT_2:LJMP EXITZHJ_DFB_N_T2:LJMP ZHJ_DFB_N;$;-;关闭电饭煲ZHJ_DFBG:CJNE A,#02H,ZHJ_DFBY;若按键为:2SETB JDQ0_DFBSETB LED0CLR YSH0_KGZHJ_DFBG4:MOV A,#16;语音提示:电饭煲LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_N_T2MOV A,#31;语音提示:已关闭LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_N_T2LJMP ZHJ_ZHT;-;电饭煲延时开ZHJ_DFBY:CJNE A,#03H,ZHJ_DFBY
25、2ZHJ_DFBY_2:LCALL YSH_IN;调用延时输入子程序JB JDQK,EXIT_2MOV YSH0_TM,TIME;存延时数据SETB JDQ0_DFBCLR LED0;开延时指示灯SETB YSH0_KG;置位延时开标志CLR EX0MOV A,#26;延时开LCALL SOUNDMOV A,#32;已设定LCALL SOUNDMOV A,#0;继电器0剩余时间提示LCALL SOUND_YSH;延时剩余时间提示子程序SETB EX0LJMP ZHJ_ZHT;延时设定完毕,转状态查询页;-;电饭煲延时关ZHJ_DFBY2:CJNE A,#04H,ZHJ_DFBFZHJ_DFBY
26、2_2:LCALL YSH_IN;调用延时输入子程序JB JDQK,EXIT_3MOV YSH0_TM,TIME;存延时数据CLR JDQ0_DFBCLR LED0;开延时指示灯SETB YSH0_KG;置位延时开标志 CLR EX0MOV A,#27;延时关LCALL SOUNDMOV A,#32;已设定LCALL SOUNDMOV A,#0;继电器0剩余时间提示LCALL SOUND_YSH;延时剩余时间提示子程序SETB EX0LJMP ZHJ_ZHT;延时设定完毕,转状态查询页;-ZHJ_DFBF:CJNE A,#09H,ZHJ_DFBF1;按键为9LJMP ZHJ_ZHTZHJ_DF
27、BF1:CJNE A,#00001011B,ZHJ_DFBF2;按键为*LJMP EXIT_3ZHJ_DFBF2:MOV A,#33;语音提示:输入错误,请重新输入LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_SHB_T1LJMP ZHJ_DFBXG;$EXIT_3:LJMP EXITZHJ_KT_1:LJMP ZHJ_KTZHJ_KT_N_1:LJMP ZHJ_KT_NZHJ_DFB_SHB_T1:LJMP ZHJ_DFB_SHB;$;$;% %;% 电暖风 状态查询 %;% %;$ZHJ_DNF_N:CJNE A,#02H,ZHJ_KT_N_1;若按键为:1ZHJ_DNF:
28、CLR EX0;禁止语音提示中途退出MOV A,#17;语音提示:电暖风LCALL SOUNDMOV A,#36;语音提示:的状态为LCALL SOUNDJNB YSH1_KG,ZHJ_DNF2 ;无延时则跳转JNB JDQ1_DNF,ZHJ_DNF1;延时关则跳转MOV A,#26;语音提示:延时开LCALL SOUNDMOV A,#1;继电器1剩余时间提示LCALL SOUND_YSH;延时剩余时间提示子程序AJMP ZHJ_DNFXGZHJ_DNF1:MOV A,#27;语音提示:延时关LCALL SOUNDMOV A,#1;继电器1剩余时间提示LCALL SOUND_YSH;延时剩余时
29、间提示子程序AJMP ZHJ_DNFXGZHJ_DNF2:JNB JDQ1_DNF,ZHJ_1_KMOV A,#20;语音提示:关LCALL SOUNDAJMP ZHJ_DNFXGZHJ_1_K:MOV A,#21;语音提示:开LCALL SOUND;% 电暖风 状态修改 %ZHJ_DNFXG:LCALL DELAY_30MSSETB EX0;允许语音提示中途退出MOV A,#24;语音提示:开启LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#17;语音提示:电暖风LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#28;语音提示
30、:请按LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#1;语音提示:1LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#25;语音提示:关闭LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#17;语音提示:电暖风LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#28;语音提示:请按LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#2;语音提示:2LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#26;语
31、音提示:延时开LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#28;语音提示:请按LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#3;语音提示:3 LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#27;语音提示:延时关LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A,#28;语音提示:请按LCALL SOUND JB OUT_PLAY,ZHJ_DNF_SHBMOV A,#4;语音提示:4LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHBMOV A
32、,#15;语音提示:返回上级请按9,挂机请按*号键LCALL SOUNDJB OUT_PLAY,ZHJ_DNF_SHB LCALL STDJC;检测按键JB NOINPUT,EXIT_4;-;开启电暖风ZHJ_DNF_SHB:CJNEA,#01H,ZHJ_DNFG;若按键为:1CLR JDQ1_DNFSETB LED1CLR YSH1_KGZHJ_DNFK4:MOV A,#17;语音提示:电暖风LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_N_T3MOV A,#30;语音提示:已开启LCALL SOUNDJB OUT_PLAY,ZHJ_DFB_N_T3LJMP ZHJ_ZHT;$