专利名称:智能总线式开关系统装置的制作方法
技术领域:
本实用新型涉及一种电灯开关装置,特别是一种智能总线式开关系统装置。
背景技术:
在工作和学习中,常常碰到这样的难题当停电后来再来电时,不该亮灯的地方仍然亮着;晚上回到家时,因为找不到开关而倍感烦恼;晚上睡觉了,不知道调皮的小孩子房间是否仍然亮着灯,为了解决这些问题要求在一个地方可以控制多盏灯;在多处地方可以控制一盏灯;在每一个开关面板上可观察到不同地方灯的亮或灭;停电后,再来电时,灯应处于熄灭状态;另外可以查询各个房间灯的工作状态并配有语音提示,同时,可靠性要高。但是,采用复杂的布线来实现一个地方可以控制多盏灯是极不现实的。不仅因为需要大量导线,而且施工几乎不能完成,工作量极大。
发明内容
本实用新型的目的是提供一种智能总线式开关系统装置,通过设置分布式控制模块可以实现以下功能在一个地方可以控制多盏灯;在多处地方可以控制一盏灯;在每一个开关面板上可观察到不同地方灯的亮或灭;停电后,再来电时,灯应处于熄灭状态;可以查询各个房间灯的工作状态并配有语音提示。
本实用新型的上述目的是这样实现的,一种智能总线式开关系统装置,其特征在于包括多个开关模块,其每个开关模块包括一个开关组、一个处理器和一个编码器,其中所述处理器的键盘端口和控制端口分别连接所述开关组和编码器,并通过扫描开关组的按键状态控制编码器编码;多个接收模块,其每个接收模块包括一个译码器、一个处理器和控制灯泡通断的可控开关,其中所述处理器的分别连接所述译码器和所述继电器,所述译码器对所接收的编码信号进行译码,处理器根据译码器的译码结果控制可控开关进行通断操作;一条通信总线,将上述开关模块和接收模块互联,实现信号通信;一个降压整流装置,其输入端连接交流供电线路,经降压整流的直流电压通过输出端供应给上述开关模块和接收模块。
这样,开关模块通过扫描开关组的按键状态进行编码,该编码信号经某一接收模块的译码器正确译码后控制有该接收模块所属的灯泡通断,从而实现了总线式智能控制。
其中,所述开关模块还包括一个语音芯片和指示灯,以显示各个开关模块的编码状态。
其中,所述开关模块还包括一个编译码器,对经由通信总线接收的其它开关模块编码信号进行译码,译码结果送入处理器处理,之后通过指示灯或语音模块显示,从而显示不同地方的灯泡的通断状态。
其中,所述接收模块还包括一个控制灯泡通断的手动开关装置,以便用户手控开灯。
其中,所述开关模块的编码器是双音多频编码器。
其中,所述开关模块的编码器是MT8880芯片。
其中,所述接收模块的译码器是双音多频解码器。
其中,所述接收模块的译码器是MT8880芯片。
其中,所述接收模块的可控开关是继电器。
以下结合附图以具体实例对本实用新型进行详细说明。
图1是本实用新型的电路方框图;图2是开关模块的结构框图;图3是图2所述开关模块的电原理图;图4是开关模块主程序流程图;图5示出了微处理器与开关组的连接关系;图6示出了开关模块中所设置的语音芯片与微处理器的连接关系;图7示出开关模块的译码电路、编码电路与微处理器的连接关系;图8是接收模块的方框图;图9是接收模块的电路图;
图10是本实用新型另一实施例的电路图。
具体实施方式
图1是本实用新型的电路方框图。包括多个开关模块,其每个开关模块包括一个开关组、一个处理器和一个编码器,其中所述处理器的键盘端口和控制端口分别连接所述开关组和编码器,并通过扫描开关组的按键状态控制编码器编码;多个接收模块,其每个接收模块包括一个译码器、一个处理器和控制灯泡通断的可控开关,其中所述处理器的分别连接所述译码器和所述继电器,所述译码器对所接收的编码信号进行译码,处理器根据译码器的译码结果控制可控开关进行通断操作;一条通信总线,将上述开关模块和接收模块互联,实现信号通信;一个降压整流装置,其输入端连接交流供电线路,经降压整流的直流电压通过输出端供应给上述开关模块和接收模块。
这样,开关模块通过扫描开关组的按键状态进行编码,该编码信号经某一接收模块的译码器正确译码后控制有该接收模块所属的灯泡通断,从而实现了总线式智能控制。
图2是开关模块的结构框图。图3是图2所述开关模块的电原理图。如图2、图3所示,微处理器是一个CPU,将开关的状态信号进行收集处理,并通过与接口相接的双音频信号编码器MT8880将开关信号编码发送出至总线上。CPU微处理器采用AT89C52单片机芯片。微处理器周期性地查询八个开关的状态,在没键按下时,CPU处理器循环查询键的状态;在有键按下时,CPU判断是那一个键,并经过处理后,与MT88800接口相联,MT88800是一个双音频编译码芯片,它实现图2中的双音频信号编码和双音频信号发射器的功能。从MT88800的OUT线输出已经编码好的信息到总线上。其程序框图如图4所示。
图5示出了微处理器与开关组即键盘的连接关系。如图5所示,键盘接在AT89C52的P1口,采取行反转法扫描键盘,键盘的8个引脚都通过2.2K的上拉电阻接到+5V电源上。先从p1.0到p1.3送出低电平,将p1.4到p1.7的状态读进来(注意在读外部状态时要先在端口送高电平)。若无键按下,则采到的数据为1111;若有键按下,则相应的列会变为低电平。若有键按下,即采到的数据不是1111,则从p1.4到p1.7将这个数据送出(若只有一个键按下,则只有一个引脚送出低电平),将p1.0到p1.3的状态读进来,若这个键还在按下的状态,则采进来的数据就不是1111。将两次采到的数据组合为一个字节,就是该键所对应的编号。
去抖动是键盘扫描的一个重要步骤,这里采用软件去抖动。第一次从p1.4到p1.7采进来的数据不是1111后,做一个延时,然后再采数据,若还不是1111,则认为不是抖动;若第二次采到的数据是1111,则认为第一次采到的数据是抖动,不做处理。
若出现重键,有许多处理方法。可以通过软件设置每一个键的优先级,当重键出现时,先处理优先级高的键。此处采用的方法是,若扫描到重键,则不做任何处理,直到有一个键放开。此方法是通过查询键编号表实现的,若出现重键,则它的编号一定不在单个键的编号表里,若在单个键的编号表里没有查到它的编号,则不做任何处理。
此程序是在扫描到有键按下时通过P2口显示不同的数据。
源程序<pre listing-type="program-listing"> ORG 0000H SJMP BG ORG 0030HBGMOV P1,#0F0H MOVA,P1 ANL A,#0F0H CJNE A,#0F0H,AAA;若采到的数据不为1111,则转 SJMP BG;若数据为1111,即无键按下,则继续扫描AAAMOV R7,#12;延时,以去抖动THMOV R6,#0FFHHEREDJNZ R6,HERE DJNZ R7,TH MOV B,A MOV P1,#0FH MOV A,P1 ANL A,#0FH CJNE A,#0FH,BBB;采集编号的第二部分,若不为1111,则转 SJMP BG;若数据为1111,则认为是抖动,不做处理<dp n="d4"/>BBBORL A,B;得到编号 MOV B,A;放在B保存 MOV R0,#00H;R0用来计数<br/>EEEMOV A,R0 MOV DPTR,#TAB1;TAB1为键编号表,此句取表头 MOVC A,@A+DPTR;取编号 INC R0 CJNE A,B,CCC;若数据与编号不相同,则转CCC继续比较 SJMP DDD;若数据与编号相同,则转DDDCCCCJNE R0,#10H,EEE AJMP BG;若查完键编号表都不符合(可能是出现重键),不做处理DDDDEC R0 MOV A,R0 RL A MOV DPTR,#TAB2 JMP@A+DPTR;跳转到响应的处理子程序TAB2AJMP NO0 AJMP NO1 AJMP NO2 AJMP NO3 AJMP NO4 AJMP NO5 AJMP NO6 AJMP NO7 AJMP NO8 AJMP NO9 AJMP LLA AJMP LLB AJMP LLC AJMP LLD AJMP LLE AJMP LLFTAB1DB 0E7H,0EBH,0EDH,0EEH DB 0D7H,0DBH,0DDH,0DEH<dp n="d5"/> DB 0B7H,0BBH,0BDH,0BEH DB 077H,07BH,07DH,07EHNO0MOV P2,#00H LJMP BGNO1MOV P2,#01H LJMP BGNO2MOV P2,#02H LJMP BGNO3MOV P2,#03H LJMP BGNO4MOV P2,#04H LJMP BGNO5MOV P2,#05H LJMP BGNO6MOV P2,#06H LJMP BGNO7MOV P2,#07H LJMP BGNO8MOV P2,#08H LJMP BGNO9MOV P2,#09H LJMP BGLLAMOV P2,#0AH LJMP BGLLBMOV P2,#0BH LJMP BGLLCMOV P2,#0CH LJMP BGLLDMOV P2,#0DH LJMP BGLLEMOV P2,#0EH LJMP BGLLFMOV P2,#0FH LJMP BGEND</pre>
图6示出了开关模块中所设置的语音芯片与微处理器的连接关系。开关模块设有语音芯片ISD4004,具有录放功能,通过语音显示(提示)各开关模块的状态。
语音频片ISD4004是通过串行方式同单片机进行通讯的,它具有录放功能,指令表如下
此程序的功能是当开关PLAY/REC为高电平或悬空时处于录音模式,为低电平时处于放音模式。按下AN时开始录/放音,录音时需长按,放音时每按一下放一段。STOP键用于切换录/放模式,按下STOP键后,从零地址开始录/放音。
源程序<pre listing-type="program-listing"> SS EQU P1.0 SCLK EQU P1.1 MOSI EQU P1.2 MISO EQU P1.3 LED EQU P1.7 INT EQU INT0 AN EQU P1.6 STOP EQU P1.5 PR EQU P1.4 ORG 0000H<dp n="d7"/> SJMP BG ORG 0030HBGMOV SP,#10HMAIISETB LED;灭灯 ACALL DSTOP;掉电MASOMOV 3AH,#200MASIJB AN,MASO;等待按下AN键 DJNZ 3AH,MASI;去抖动 ACALL UP;上电 MOV 20H,#00H;低位地址 MOV 21H,#00H;高位地址 JB PR,REC;PR=1录音 AJMP PLAY;PR=0放音RECMOV A,20H;送低位地址 ACALL ISDX MOV A,21H;送高位地址 ACALL ISDX MOV A,#0A0H;送指令,从指定地址录音 ACALL ISDX SETB SSREC1MOV 36H,#10REC2ACALL YS50;延时录音 DJNZ 36H,REC2 CLR LED;开灯 MOV A,#0B0H;送指令,从当前地址开始录音 ACALL ISDX SETB SSREC3MOV 35H,#200REC4JNB INT,REC7;OVF=0芯片溢出 JNB AN,REC3 DJNZ 35H,REC4;去抖动 SETB LED;关灯 ACALL STOPP;停止当前操作REC5JNB STOP,REC6;STOP键按下则转 JB AN,REC5;等待AN键按下<dp n="d8"/> ACALL STOPP;停止当前操作 AJMP REC1REC6CLR SCLK SETB SS ACALL STOPP AJMP MAIIREC7SETB LED;灭灯 MOV 36H,#15REC8ACALL YS50 JB AN,REC6;等待AN键放开 DJNZ 36H,REC8;延时 CLR LED;开灯 MOV 36H,#15REC9ACALL YS50 JB AN,REC6;等待AN键放开 DJNZ 36H,REC9;延时 AJMP REC7PLAYJNB AN,PLAY;等待AN键按下 MOV A,20H;送低位地址 ACALL ISDX MOV A,21H;送高位地址 ACALL ISDX MOV A,#0E0H;送指令,从指定地址放音 ACALL ISDX SETB SSPLAY1CLR LED;开灯 MOV A,#0F0H;送指令,从当前地址开始放音 ACALL ISDX SETB SSPLAY2JNB STOP,REC6;STOP键按下,则停止放音 JB INT,PLAY2;无OVF,EOM则继续放音 SETB LED;灭灯 ACALL STOPP;停止当前操作 CLR SS CLR SCLK<dp n="d9"/> SETB SCLK JB MISO,REC6;芯片是否溢出,是则转 CLR SCLK SETB SS ACALL STOPP;停止当前操作PLAY3JNB STOP,REC6;中断放音 JB AN,PLAY3;等待AN键按下 AJMP PLAY1;放下一段UPMOV A,#20H;送指令,上电 ACALL ISDX SETB SS ACALL YS50;延时 ACALL YS50 RETSTOPPMOV A,#30H;送指令,停止当前操作 ACALL ISDX SETB SS ACALL YS50 ACALL YS50 RETDSTOPMOV A,#10H;送指令,停止当前操作并掉电 ACALL ISDX SETB SS ACALL YS50 ACALL YS50 RETISDXCLR SS;送数据子程序 MOV R6,#8 CLR SCLKISDIMOV C,ACC.0 MOV MOSI,C SETB SCLK RR A CLR SCLK DJNZ R6,ISDI<dp n="d10"/> RETYS1MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 RETYS50MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 RETEND</pre>另外,开关模块还具有译码电路,图7示出了这一情况,其中上部的MT8880是编码芯片,下部的MT8880是译码芯片。
此处用一片单片机控制两片MT8880,一片负责发送一个双音多频信号,另一片在正确接收后将数据送到发光二极管上显示。
源程序<pre listing-type="program-listing"> CP2 EQU P2.4 RSS2 EQU P2.5 CS2 EQU P2.6 RW2 EQU P2.7 CP1 EQU P1.4 RSS1 EQU P1.5 CS1 EQU P1.6 RW1 EQU P1.7 ORG 0000H SJMP BG ORG 0003H;外部中断0 LJMP INTT<dp n="d11"/> ORG 0030HBGMOV R5,#10H;上电延时H2MOV R6,#255H1MOV R7,#255HEREDJNZ R7,HERE DJNZ R6,H1 DJNZ R5,H2 SETB EA SETB EX0;开外部中断0 CLR CS1;初始化一片MT8880 CLR CP1 SETB RW1 SETB RSS1 SETB CP1 LCALL WAIT CLR CP1 CLR RW1 LCALL WAIT ANL P1,#0F0H SETB CP1 LCALL WAIT CLR CP1 ANL P1,#0F0H SETB CP1 LCALL WAIT CLR CP1 SETB P1.3 SETB CP1 LCALL WAIT CLR CP1 CLR P1.3 SETB CP1 LCALL WAIT CLR CP1 SETB RW1<dp n="d12"/> SETB CP1 LCALL WAIT CLR CP1 CLR RW1 SETB P1.3 SETB P1.2 CLR P1.1 SETB P1.0 LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 clr P1.0 CLR P1.1 CLR P1.2 CLR P1.3 LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 CLR CS2;初始化另一片MT8880 CLR CP2 SETB RW2 SETB RSS2 SETB CP2 LCALL WAIT CLR CP2 CLR RW2 LCALL WAIT ANL P2,#0F0H SETB CP2 LCALL WAIT CLR CP2 ANL P2,#0F0H<dp n="d13"/> SETB CP2 LCALL WAIT CLR CP2 SETB P2.3 SETB CP2 LCALL WAIT CLR CP2 CLR P2.3 SETB CP2 LCALL WAIT CLR CP2 SETB RW2 SETB CP2 LCALL WAIT CLR CP2 CLR RW2 SETB P2.3 CLR P2.2 CLR P2.1 SETB P2.0 LCALL WAIT SETB CP2 LCALL WAIT CLR CP2 clr P2.0 CLR P2.1 CLR P2.2 CLR P2.3 LCALL WAIT SETB CP2 LCALL WAIT CLR CP2 CLR RSS2 ANL P2,#0F0H;送出数字0101所代表的双音多频信号 setb p2.2<dp n="d14"/> setb p2.0 LCALL WAIT SETB CP2 LCALL WAIT CLR CP2 SJMP $;等待中断WAITMOV R7,#0FFH;延时子程序SSSNOP DJNZ R7,SSS RETINTTPUSH P1;中断服务子程序 CLR CP1 CLR CS1 SETB RSS1 SETB RW1 SETB CP1 LCALL WAIT ORL P1,#0FH MOV A,P1 CLR CP1 JNB ACC.2,RE;若中断不是因为接受到双音多频信号,则转 CLR RSS1 SETB CP1 LCALL WAIT ORL P1,#0FH MOV A,P1 CLR CP1 MOV C,ACC.0;将得到的数据送到发光二极管显示,正确接收时应显示0101 MOV P3.4,C MOV C,ACC.1 MOV P3.5,C MOV C,ACC.2 MOV P3.6,C MOV C,ACC.3<dp n="d15"/> MOV P3.7,CREPOP P1 RETIEND</pre>图8示出了接收模块内部结构。将总线上接收到的DTMF编码信号通过MT88800芯片解码。CPU通过查询MT8880的状态寄存器来判断是否有信号接收。当有信号接收时,CPU将接收的数据与自身的地址相比较,判断是否与本地址相符,如果符合,表明本地灯开关闭合或关断;如果不相符合,CPU将不作出输出处理。其电原理图如图9所示,其中CPU通过一个晶体管控制继电器工作,继电器又控制灯泡通断。CPU可采用AT89C1051或89C2051,以降低成本。
图10示出了只有一个开关模块的本实用新型另一实施例的电路图。该电路原理与上述说明基本相同,在此省略对其说明。需要注意的是,各接收模块增加了一个由手动开关和芯片74LS86组成的用户开关,以方便各地的用户手动开灯。
该实施例的是这样操作的,在主控模块中,89C52不断地扫描键盘,如果“1”键按下,则通过8880送出相应指令,使1号灯的状态改变;如果“2”键按下,则改变2号灯的状态;如果“F”键按下,则通过语音芯片4004报告两个灯的状态。开放外部中断0,当8880正确接收到双音多频信号后,向89C52提出中断申请。在接收模块中,当检测到灯的状态发生了改变,则通过8880向主控模块报告。主控模块正确接收到这个信号后,进行语音提示。
89C52的源程序<pre listing-type="program-listing"> SS EQU P3.0 SCLK EQU P3.1 MOSI EQU P3.4 MISO EQU P3.5 INT EQU INT1 CP1 EQU P2.4 RSS1 EQU P2.5 CS1 EQU P2.6 RW1 EQU P2.7 ORG 0000H SJMP BG ORG 0003H LJMP INTT<dp n="d16"/> ORG 0030HBGMOV R5,#10HH2MOV R6,#255H1MOV R7,#255HEREDJNZ R7,HERE DJNZ R6,H1 DJNZ R5,H2 SETB EA SETB EX0 MOV SP,#27H CLR CS1;初始化MT8880 CLR CP1 SETB RW1 SETB RSS1 SETB CP1 LCALL WAIT CLR CP1 CLR RW1 LCALL WAIT ANL P2,#0F0H SETB CP1 LCALL WAIT CLR CP1 SETB CP1 LCALL WAIT CLR CP1 SETB P2.3 SETB CP1 LCALL WAIT CLR CP1 CLR P2.3 SETB CP1 LCALL WAIT CLR CP1 SETB RW1<dp n="d17"/> SETB CP1 LCALL WAIT CLR CP1 CLR RW1 SETB P2.3 SETB P2.2 CLR P2.1 SETB P2.0 LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 ANL P2,#0F0H LCALL WAIT SETB CP1 LCALL WAIT CLR CP1KEYMOV P1,#0F0H;扫描键盘 MOV A,P1 ANL A,#0F0H CJNE A,#0F0H,AAA;若有键按下,则转 LCALL DELAY;若无键按下 MOV P1,#0F0H MOV A,P1 ANL A,#0F0H CJNE A,#0F0H,AAA CLR 00H;确认无键按下,清位地址00H,目的在于确认键松开了 SJMP KEYAAAJB 00H,KEY;若键未松开,则转 LCALL DELAY MOV B,A MOV P1,#0FH MOV A,P1 ANL A,#0FH<dp n="d18"/> CJNE A,#0FH,BBB SJMP KEY;若是抖动BBBORL A,B;组合成键的编号 MOV B,A MOV R0,#00HEEEMOV A,R0 MOV DPTR,#TAB1 MOVC A,@A+DPTR;从键编号表中取编号 INC R0 CJNE A,B,CCC;若不是这个编号,则再取下一个编号 SJMP DDD;若查到键的编号CCCCJNE R0,#10H,EEE AJMP KEYDDDSETB 00H DEC R0 MOV A,R0 RL A MOV DPTR,#TAB2 JMP@A+DPTR;通过跳转表到达键所对应的子程序TAB2AJMP NO0 AJMP NO1 AJMP NO2 AJMP NO3 AJMP NO4 AJMP NO5 AJMP NO6 AJMP NO7 AJMP NO8 AJMP NO9 AJMP LLA AJMP LLB AJMP LLC AJMP LLD AJMP LLE AJMP LLF<dp n="d19"/>TAB1DB 0E7H,0EBH,0EDH,0EEH;键编号表DB 0D7H,0DBH,0DDH,0DEH DB 0B7H,0BBH,0BDH,0BEH DB 077H,07BH,07DH,07EHNO0MOV R3,#00H;送出指令0F,使0号灯状态改变 MOV R4,#0FH LCALL SEND LJMP KEYNO1MOV R3,#01H;送出指令1F,使1号灯状态改变 MOV R4,#1FH LCALL SEND LJMP KEYNO2LJMP KEY;未做处理,留作扩展更多灯时用NO3LJMP KEYNO4LJMP KEYNO5LJMP KEYNO6LJMP KEYNO7LJMP KEYNO8LJMP KEYNO9LJMP KEYLLALJMP KEYLLBLJMP KEYLLCLJMP KEYLLDLJMP KEYLLELJMP KEYLLFjb 01h,mmm;语音提示子程序 mov 70h,#00h mov 71h,#01h acall play sjmp nnnmmmmov 70h,#00h mov 71h,#02h acall playnnnjb 02h,ooo mov 70h,#00h<dp n="d20"/> mov 71h,#03h acall play ljmp keyooomov 70h,#00h mov 71h,#04h acall play ljmp keyWAITMOV R7,#0FFHSSSNOP DJNZ R7,SSS RETINTTCLR CP1;中断服务子程序 CLR CS1 SETB RSS1 SETB RW1 SETB CP1 LCALL WAIT ORL P2,#0FH MOV A,P2 CLR CP1 JNB ACC.2,RE CLR RSS1 SETB CP1 LCALL WAIT ORL P2,#0FH MOV A,P2 CLR CP1 ANL A,#0FH MOV B,A MOV A,26H SWAP A ANL A,#0F0H ORL A,B MOV 26H,A MOV R0,#00H<dp n="d21"/> MOV DPTR,#TAA1LOOOPMOV A,R0 MOVC A,@A+DPTR CJNE A,26H,DDE AJMP EEFDDEINC R0 CJNE R0,#04H,LOOOP SJMP REEEFMOV A,R0 RL A MOV DPTR,#TAA2 JMP@A+DPTRTAA2AJMP L0M AJMP L0L AJMP L1M AJMP L1LL0MCLR P0.0 clr 01h mov 70h,#00h mov 71h,#01h ACALL play SJMP REL0LSETB P0.0 setb 01h mov 70h,#00h mov 71h,#02h ACALL play SJMP REL1MCLR P0.1 clr 02h mov 70h,#00h mov 71h,#03h ACALL play SJMP REL1LSETB P0.1<dp n="d22"/> setb 02h mov 70h,#00h mov 71h,#04h ACALL playRERETITAA1DB 0DH,0CH,1DH,1CHSENDMOV P2,R3;通过8880送指令的子程序 ANL P2,#0FH LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 ACALL DELAY1 MOV P2,R4 ANL P2,#0FH LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 RETDELAYMOV R7,#12THMOV R6,#0FFHHERDJNZ R6,HER DJNZ R7,TH RETDELAY1MOV R7,#0e0HTH2MOV R6,#0FFHHER1DJNZ R6,HER1 DJNZ R7,TH2 RETPLAYMOV A,70H;控制4004发音子程序 ACALL ISDX MOV A,71H ACALL ISDX MOV A,#0E0H<dp n="d23"/> ACALL ISDX SETB SSPLAY1MOV A,#0F0H ACALL ISDX SETB SSPLAY2JB INT,PLAY2 ACALL STOPPUPMOV A,#20H ACALL ISDX SETB SS ACALL YS50 ACALL YS50 RETSTOPPMOV A,#30H ACALL ISDX SETB SS ACALL YS50 ACALL YS50 RETDSTOPMOV A,#10H ACALL ISDX SETB SS ACALL YS50 ACALL YS50 RETISDXCLR SS MOV R6,#8 CLR SCLKISDIMOV C,ACC.0 MOV MOSI,C SETB SCLK RR A CLR SCLK DJNZ R6,ISDI RET<dp n="d24"/>YS50MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 RETEND</pre>0号89C2051的源程序<pre listing-type="program-listing"> CP1 EQU P1.4 RSS1 EQU P1.5 CS1 EQU P1.6 RW1 EQU P1.7 D3 EQU P1.3 D2 EQU P1.2 D1 EQU P3.1 D0 EQU P3.0 ORG 0000H SJMP BG ORG 0003H LJMP INTT ORG 0030HBGMOV R5,#10HH2MOV R6,#255H1MOV R7,#255HEREDJNZ R7,HERE DJNZ R6,H1 DJNZ R5,H2 SETB EA SETB EX0 CLR CS1;初始化8880 CLR CP1 SETB RW1<dp n="d25"/> SETB RSS1 SETB CP1 LCALL WAIT CLR CP1 CLR RW1 LCALL WAIT CLR D3 CLR D2 CLR D1 CLR D0 SETB CP1 LCALL WAIT CLR CP1 SETB CP1 LCALL WAIT CLR CP1 SETB D3 SETB CP1 LCALL WAIT CLR CP1 CLR D3 SETB CP1 LCALL WAIT CLR CP1 SETB RW1 SETB CP1 LCALL WAIT CLR CP1 CLR RW1 SETB D3 SETB D2 CLR D1 SETB D0 LCALL WAIT SETB CP1<dp n="d26"/> LCALL WAIT CLR CP1 CLR D0 CLR D1 CLR D2 CLR D3 LCALL WAIT SETB CP1 LCALL WAIT CLR CP1HHHMOV R5,#10H;延时Ha2MOV R6,#255Ha1MOV R7,#255HEREaDJNZ R7,HEREa DJNZ R6,Ha1 DJNZ R5,Ha2 SETB P3.5 MOV C,P3.5;采集灯的开关状态 JC ABC jnb 00h,hhh;若状态没有改变,则转 clr 00h MOV R3,#00H;若状态改变,则通过8880送出指令通知主控模块 MOV R4,#0cH ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL SEND ajmp hhhABCjb 00h,hhh<dp n="d27"/> setb 00h MOV R3,#00H MOV R4,#0dH ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL SEND ajmp hhhWAITMOV R7,#0FFHSSSNOP DJNZ R7,SSS RETINTTCLR CP1;中断服务子程序 CLR CS1 SETB RSS1 SETB RW1 SETB CP1 LCALL WAIT SETB D3 SETB D2 SETB D1 SETB D0 MOV A,P1 CLR CP1 JNB ACC.2,RE CLR RSS1 SETB CP1 LCALL WAIT SETB D3 SETB D2<dp n="d28"/> SETB D1 SETB D0 MOV A,P1 mov c,d1 mov acc.1,c mov c,d0 mov acc.0,c CLR CP1 anl a,#0fh CJNE A,#00H,AAA SETB 20HRERETIAAAJNB 20H,RE CLR 20H MOV DPTR,#TAB RL A JMP@A+DPTRTABAJMP NO0 AJMP NO1 AJMP NO2 AJMP NO3 AJMP NO4 AJMP NO5 AJMP NO6 AJMP NO7 AJMP NO8 AJMP NO9 AJMP NOA AJMP NOB AJMP NOC AJMP NOD AJMP NOE AJMP NOFNO0AJMP RENO1AJMP RE<dp n="d29"/>NO2AJMP RENO3AJMP RENO4AJMP RENO5AJMP RENO6AJMP RENO7AJMP RENO8AJMP RENO9AJMP RENOAAJMP RENOBAJMP RENOCAJMP RENODAJMP RENOEajmp reNOFCPL P3.7 AJMP RESENDMOV A,R3;通过8880发送子程序 MOV C,ACC.0 MOV D0,C MOV C,ACC.1 MOV D1,C MOV C,ACC.2 MOV D2,C MOV C,ACC.3 MOV D3,C ANL P1,#0FH LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 ACALL DELAY1 acall delay1 MOV A,R4 MOV C,ACC.0 MOV D0,C MOV C,ACC.1<dp n="d30"/> MOV D1,C MOV C,ACC.2 MOV D2,C MOV C,ACC.3 MOV D3,C ANL P1,#0FH LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 CLR P3.4 RETDELAY1MOV R7,#0E0HTH2MOV R6,#0FFHHER1DJNZ R6,HER1 DJNZ R7,TH2 RETEND</pre>1号89C2051的源程序<pre listing-type="program-listing"> CP1 EQU P1.4 RSS1 EQU P1.5 CS1 EQU P1.6 RW1 EQU P1.7 D3 EQU P1.3 D2 EQU P1.2 D1 EQU P3.1 D0 EQU P3.0 ORG 0000H SJMP BG ORG 0003H LJMP INTT ORG 0030HBGMOV R5,#10HH2MOV R6,#255<dp n="d31"/>H1MOV R7,#255HEREDJNZ R7,HERE DJNZ R6,H1 DJNZ R5,H2 SETB EA SETB EX0 CLR CS1 CLR CP1 SETB RW1 SETB RSS1 SETB CP1 LCALL WAIT CLR CP1 CLR RW1 LCALL WAIT CLR D3 CLR D2 CLR D1 CLR D0 SETB CP1 LCALL WAIT CLR CP1 SETB CP1 LCALL WAIT CLR CP1 SETB D3 SETB CP1 LCALL WAIT CLR CP1 CLR D3 SETB CP1 LCALL WAIT CLR CP1 SETB RW1 SETB CP1<dp n="d32"/> LCALL WAIT CLR CP1 CLR RW1 SETB D3 SETB D2 CLR D1 SETB D0 LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 CLR D0 CLR D1 CLR D2 CLR D3 LCALL WAIT SETB CP1 LCALL WAIT CLR CP1HHHMOV R5,#10HHa2MOV R6,#255Ha1MOV R7,#255HEREaDJNZ R7,HEREa DJNZ R6,Ha1 DJNZ R5,Ha2 SETB P3.5 MOV C,P3.5 JC ABC jnb 00h,hhh clr 00h MOV R3,#01H MOV R4,#0cH ACALL DELAY1 ACALL DELAY1 ACALL DELAY1<dp n="d33"/> ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL SEND ajmp hhhABCjb 00h,hhh setb 00h MOV R3,#01H MOV R4,#0dH ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL DELAY1 ACALL SEND ajmp hhhWAITMOV R7,#0FFHSSSNOP DJNZ R7,SSS RETINTTCLR CP1 CLR CS1 SETB RSS1 SETB RW1 SETB CP1 LCALL WAIT SETB D3 SETB D2 SETB D1 SETB D0<dp n="d34"/> MOV A,P1 CLR CP1 JNB ACC.2,RE CLR RSS1 SETB CP1 LCALL WAIT SETB D3 SETB D2 SETB D1 SETB D0 MOV A,P1 mov c,d1 mov acc.1,c mov c,d0 mov acc.0,c CLR CP1 anl a,#0fh CJNE A,#01H,AAA SETB 20HRERETIAAAJNB 20H,RE CLR 20H MOV DPTR,#TAB RL A JMP@A+DPTRTABAJMP NO0 AJMP NO1 AJMP NO2 AJMP NO3 AJMP NO4 AJMP NO5 AJMP NO6 AJMP NO7 AJMP NO8 AJMP NO9<dp n="d35"/> AJMP NOA AJMP NOB AJMP NOC AJMP NOD AJMP NOE AJMP NOFNO0AJMP RENO1AJMP RENO2AJMP RENO3AJMP RENO4AJMP RENO5AJMP RENO6AJMP RENO7AJMP RENO8AJMP RENO9AJMP RENOAAJMP RENOBAJMP RENOCAJMP RENODAJMP RENOEajmp reNOFCPL P3.7 AJMP RESENDMOV A,R3 MOV C,ACC.0 MOV D0,C MOV C,ACC.1 MOV D1,C MOV C,ACC.2 MOV D2,C MOV C,ACC.3 MOV D3,C ANL P1,#0FH LCALL WAIT SETB CP1<dp n="d36"/> LCALL WAIT CLR CP1 ACALL DELAY1 acall delay1 MOV A,R4 MOV C,ACC.0 MOV D0,C MOV C,ACC.1 MOV D1,C MOV C,ACC.2 MOV D2,C MOV C,ACC.3 MOV D3,C ANL P1,#0FH LCALL WAIT SETB CP1 LCALL WAIT CLR CP1 CLR P3.4 RETDELAY1MOV R7,#0E0HTH2MOV R6,#0FFHHER1DJNZ R6,HER1 DJNZ R7,TH2 RETEND</pre>
权利要求1.一种智能总线式开关系统装置,其特征在于包括多个开关模块,其每个开关模块包括一个开关组、一个处理器和一个编码器,其中所述处理器的键盘端口和控制端口分别连接所述开关组和编码器,并通过扫描开关组的按键状态控制编码器编码;多个接收模块,其每个接收模块包括一个译码器、一个处理器和控制灯泡通断的可控开关,其中所述处理器的分别连接所述译码器和所述继电器,所述译码器对所接收的编码信号进行译码,处理器根据译码器的译码结果控制可控开关进行通断操作;一条通信总线,将上述开关模块和接收模块互联,实现信号通信;一个降压整流装置,其输入端连接交流供电线路,经降压整流的直流电压通过输出端供应给上述开关模块和接收模块。
2.根据权利要求1所述的装置,其特征在于所述开关模块还包括一个语音芯片和指示灯。
3.根据权利要求2所述的装置,其特征在于所述开关模块还包括一个编译码器,对经由通信总线接收的其它开关模块编码信号进行译码,译码结果送入处理器处理,之后通过指示灯或语音模块显示。
4.根据权利要求1所述的装置,其特征在于所述接收模块还包括一个控制灯泡通断的手动开关装置。
5.根据权利要求1、2、3所述的装置,其特征在于所述开关模块的编码器是双音多频编码器。
6.根据权利要求1、2、3所述的装置,其特征在于所述开关模块的编码器是MT8880芯片。
7.根据权利要求1所述的装置,其特征在于所述接收模块的译码器是双音多频解码器。
8.根据权利要求1、7所述的装置,其特征在于所述接收模块的译码器是MT8880芯片。
9.根据权利要求1所述的装置,其特征在于所述接收模块的可控开关是继电器。
10.根据权利要求1所述的装置,其特征在于所述的开关组是键盘。
专利摘要本实用新型是一种智能总线式开关系统装置,包括多个开关模块,其每个开关模块包括一个开关组、一个处理器和一个编码器,其中所述处理器的键盘端口和控制端口分别连接所述开关组和编码器,并通过扫描开关组的按键状态控制编码器编码;多个接收模块,其每个接收模块包括一个译码器、一个处理器和控制灯泡通断的可控开关,其中所述处理器的分别连接所述译码器和所述继电器,所述译码器对所接收的编码信号进行译码,处理器根据译码器的译码结果控制可控开关进行通断操作;一条通信总线,将上述开关模块和接收模块互联,实现信号通信。这样,开关模块通过扫描开关组的按键状态进行编码,该编码信号经某一接收模块的译码器正确译码后控制有该接收模块所属的灯泡通断,从而实现了总线式智能控制。
文档编号G05B19/04GK2673026SQ200320121730
公开日2005年1月19日 申请日期2003年11月21日 优先权日2003年11月21日
发明者王振红, 张常年, 王仲, 付晶晶 申请人:王振红, 张常年, 王仲, 付晶晶