发明名称 防宠物踩踏式报警器及其同时测量若干区域长度的方法
摘要 防宠物踩踏式报警器及其同时测量若干区域长度的方法包括防宠物踩踏式报警器与同时测量若干区域长度的方法两部分;后者体现于同时测量若干区域长度以区分脚型程序,前者由一个长方形框架、电池组、单片机系统、串入并出电路、并入串进电路与音乐电路组成,其中,长方形框架的上部和底部分别设置有列、行电极组,其导线依序分别连接到并入串进电路的各个并行输入端与串入并出电路的各个并行输出端。该程序按照两电极组导线的排列建立二维坐标系,借助单片机扫描检测被踩踏的区域、跟踪各个区域的轮廓、用序数标志各个轮廓内的区域、计算轮廓点之间的距离并保存其大者、判断脚型并决定是否发出报警声。所述测量区域长度的方法完备。
申请公布号 CN102339515B 申请公布日期 2016.06.29
申请号 CN201010228536.0 申请日期 2010.07.16
申请人 重庆工商大学 发明人 曾艺
分类号 G08B13/10(2006.01)I;G01B7/28(2006.01)I 主分类号 G08B13/10(2006.01)I
代理机构 代理人
主权项 防宠物踩踏式报警器中同时测量若干区域长度的方法,它以一种防宠物踩踏式报警器为物理基础,采用单片机技术测量同时被踩踏的若干区域的长度,据此区分人与小动物的脚型,在受到人的踩踏时发出报警声,所述防宠物踩踏式报警器由一个长方形框架、电池组、单片机系统、串入并出电路、并入串进电路以及音乐电路组成,其中,长方形框架的上部和底部各有一组电极,分别称之为列电极组和行电极组,每一组电极的导线彼此独立、间距均匀、裸露,两组导线排列的方向相互垂直,列电极组的导线分别依序连接到并入串进电路的各个并行输入端,行电极组的导线分别依序连接到串入并出电路的各个并行输出端,所述长方形框架的上部和底部的两组电极由该框架的两侧绝缘隔离并支撑着;所述单片机系统包括:一块单片机及其晶振电路和上电复位电路以及随机存储器电路,单片机选用8051系列中具有40个脚的,单片机的输出口线P3.7连接到音乐电路的输入端,电池组作为电源;所述串入并出电路由9块74HC164级联组成:第一块74HC164的信号串行输入端A连接到单片机的输出口线P1.2,其最高位输出端QH连接到第二块的信号串行输入端A,第二块的最高位输出端QH连接到第三块的信号串行输入端A,依次类推,共产生8位/块×9块=72位的信号并行输出端;9块74HC164的清零端与信号串行输入端B都连接到电池组的正极,它们的时钟信号输入端都连接到单片机的输出口线P1.3;所述并入串进电路由9块74HC165级联组成:最后一块74HC165的并入串出信号端QH连接到前一块的信号串行输入端DS,依次类推,共产生8位/块×9块=72位的信号并行输入端,每一位信号并行输入端还各自连接一个下拉电阻到电池组的负极,第一块74HC165的并入串出信号端QH连接到单片机的输入口线P1.5,9块74HC165的并入数据装载控制端PL都连接到单片机的输出口线P1.6,它们的时钟信号输入端都连接到单片机的输出口线P1.7,它们的时钟使能输入端CE都连接到电池组的负极;其特征在于,所述防宠物踩踏式报警器中同时测量若干区域长度的方法按照行、列两电极组导线的排列建立二维坐标系,借助单片机扫描检测被踩踏的若干区域,跟踪它们的轮廓,用序数标志各个轮廓内的区域,分别计算各个区域的长度,判断脚型并决定是否发出报警声,包括下列步骤:步骤一、初始化单片机:MOV_SP,2FH ’堆栈初值,CLR_P1.2,P1.3,P1.7,P3.7 ’准备输出信号,SETB_P1.5,P1.6 ’准备输入信号,CLR_F<sub>0</sub> ’初始化跟踪区域轮廓工作结束的标志位,步骤二、初始化程序:CLR_R<sub>5</sub>,CLR_R<sub>6</sub> ’R<sub>5</sub>,R<sub>6</sub>分别为距离的平方值的低、高字节寄存器,MOV_R<sub>1</sub>,#AL,MOV_R<sub>2</sub>,#AH ’RAM中后部开辟有小块临时存储区,用于存储被跟踪区域的轮廓上坐标点的坐标,#AL,#AH分别为该区域的起始地址之低、高字节,R<sub>1</sub>,R<sub>2</sub>分别为RAM中临时存储区地址指针的低字节和高字节寄存器,MOV_DPL,#AL,MOV_DPH,#AHMOV_R<sub>0</sub>,#RAM0,MOV_A,#00H ’#RAM0为RAM中临时存储区的大小,Loop0:MOVX_@DPTR,A ’清零RAM中临时存储区中的一个单元,INC_DPTR ’指向下一单元,DJNZ_R<sub>0</sub>,Loop0 ’R<sub>0</sub>为循环计数器,CLR_R<sub>7</sub> ’初始化踩踏区域数目计数器,Loop1:MOV_R<sub>0</sub>,#Number_COL ’Number_COL为列电极组中导线的数目,Loop2:MOV_R<sub>3</sub>,#Number_ROW ’Number_ROW为行电极组中导线的数目,SETB_P1.2,NOP,CLR_P1.2 ’清零串入并出电路所有74HC164的输出端,DJNZ_R<sub>3</sub>,Loop2 ’R<sub>3</sub>为循环计数器,DJNZ_R<sub>0</sub>,Loop1 ’R<sub>0</sub>为循环计数器,MOV_DPH,#00H,MOV_DPL,#00H ’初始化数据指针DPTR,                          ’分开为两个8位的x,y坐标指针;步骤三、开始扫描检测被踩踏的区域:1)通过单片机对行电极组中的第一根导线输出一个高电平,然后,逐根检测列电极组中导线的电平,其低、高电平分别以#00H,#01H表示且存储之:MOV_@DPTR,#00H或MOV_@DPTR,#01H,其中,每检测完一根列电极组导线,y坐标指针就指向下一根列电极组导线:INC_DPL,如果检查完毕列电极组中的全部导线,即DPL=Number_COL,把x,y坐标指针指向下一根行电极组导线:INC_DPH,MOV_DPL,#00H;2)通过单片机对行电极组中的下一根导线输出一个高电平,然后,逐根检测列电极组中导线的电平,其低、高电平分别以#00H,#01H表示且存储之,其中,每检测完一根列电极组导线,y坐标指针就指向下一根列电极组导线,如果检查完毕列电极组中的全部导线,即DPL=Number_COL,把x,y坐标指针指向下一根行电极组导线;3)判断行电极组中当前处于高电平的导线是否超出其最后一根:(a)DPH<Number_ROW,不是最后一根,跳转到本步骤三之2)继续进行扫描检测;(b)DPH=Number_ROW,已超出最后一根,执行下一步骤;步骤四、跟踪被踩踏区域的轮廓:1)初始化x,y坐标指针DPTR:MOV_DPH,#01H,MOV_DPL,#01H;2)暂存当前x,y坐标指针DPTR,称之为当前跟踪坐标指针,从RAM取出并查看当前位置的数据:MOV_A,@DPTR:(a)如果该数据为#00H,执行本步骤四之3);(b)如果该数据为#01H,查看位于当前坐标位置的上、右、下与左方的四邻{(DPH←DPH‑1,DPL)、(DPH,DPL←DPL+1)、(DPH←DPH+1,DPL)与(DPH,DPL←DPL‑1)}处的四个数据,即按照跟踪区域轮廓的规则获取与行、列电极组导线被踩踏所致接触的区域对应的轮廓,接着,用相应的数码标志该轮廓所包围的区域,并运用“逐点计算该轮廓点与其它轮廓点间的距离并保存其大者的方法”,获得与当前的踩踏区域数目计数器R<sub>7</sub>对应的被踩踏区域的长度的平方:L(R<sub>7</sub>)<sup>2</sup>;如果L(R<sub>7</sub>)<sup>2</sup>≥Long,Long为某个预设值,就判断为受到人的脚的踩踏,并发出警报信号:SETB_P3.7,延时十秒,再撤除该报警信号:CLR_P3.7;清零RAM内的临时存储区,然后,继续执行本步骤四之3);3)恢复当前x,y坐标指针DPTR为当前跟踪坐标指针,把它指向下一个坐标点:如果当前坐标点已经处于本行最后的位置,即DPL=Number_COL‑1时,下一个坐标点为(DPH←DPH+1,DPL←1),否则,下一个坐标点为(DPH,DPL←DPL+1);4)如果x,y坐标指针DPTR尚未指向最后一行,即:DPH<Number_ROW‑1,跳转本步骤四之2),继续跟踪被踩踏区域的轮廓,否,则结束本轮跟踪被踩踏区域轮廓的工作;步骤五、查看跟踪区域轮廓工作结束的标志位F<sub>0</sub>:如果F<sub>0</sub>=0,说明没有被踩踏的区域,转到步骤一,重新开始扫描检查工作;如果F<sub>0</sub>=1,清零该标志位:CLR_F<sub>0</sub>,然后查看踩踏区域数目计数器R<sub>7</sub>:(a)如果R<sub>7</sub>=0,说明没有形成被踩踏的区域,转到步骤一,重新开始扫描检查工作;(b)如果R<sub>7</sub>≥1,说明发生了被踩踏的区域,其数目就是R<sub>7</sub>中的计数值,执行下一步骤;步骤六、跳转到步骤一,开始新的一轮扫描检测工作;上述步骤四中所述跟踪区域轮廓的规则包括:1)被跟踪区域的特征是:“被跟踪区域内的每一个坐标点都对应着数据#01H,需要被跟踪的区域之外或需要被跟踪的区域之间的坐标点都对应着数据#00H”;2)启动跟踪轮廓定时器,如果该定时器的计时时间到了预定的数置,复位单片机;3)当前坐标位置对应的数据为#01H,查看当前坐标位置的上、右、下与左方四个邻点对应的数据的关系,决定当前坐标位置的移动方向,该移动方向经过的路径就形成该区域的轮廓,有关移动当前坐标位置的规则如下:a)如果其右方邻点对应的数据为#01H,其上、下、左方邻点对应的数据都为#00H,就把当前坐标位置移向其右方邻点处;b)如果其下方邻点对应的数据为#01H,其上、右、左方邻点对应的数据都为#00H,就把当前坐标位置移向其下方邻点处;c)如果其左方邻点对应的数据为#01H,其上、右、下方邻点对应的数据都为#00H,就把当前坐标位置移向其左方邻点处;d)如果其上方邻点对应的数据为#01H,其右、下、左方邻点对应的数据都为#00H,就把当前坐标位置移向其上方邻点处;e)如果其右、下方邻点对应的数据都为#01H,其左、上方邻点对应的数据都为#00H,就把当前坐标位置移向其右方邻点处;f)如果其下、左方邻点对应的数据都为#01H,其上、右方邻点对应的数据都为#00H,就把当前坐标位置移向其下方邻点处;g)如果其左、上方邻点对应的数据都为#01H,其右、下方邻点对应的数据都为#00H,就把当前坐标位置移向其左方邻点处;h)如果其上、右方邻点对应的数据都为#01H,其下、左方邻点对应的数据都为#00H,就把当前坐标位置移向其上方邻点处;i)如果其上、下方邻点对应的数据都为#01H,其右、左方邻点对应的数据都为#00H,且其由其左方邻点移动而来,就把当前坐标位置移向其上方邻点处;j)如果其上、下方邻点对应的数据都为#01H,其右、左方邻点对应的数据都为#00H,且其由其右方邻点移动而来,就把当前坐标位置移向其下方邻点处;k)如果其右、左方邻点对应的数据都为#01H,其上、下方邻点对应的数据都为#00H,且其由其上方邻点移动而来,就把当前坐标位置移向其右方邻点处;l)如果其右、左方邻点对应的数据都为#01H,其上、下方邻点对应的数据都为#00H,且其由其下方邻点移动而来,就把当前坐标位置移向其左方邻点处;m)如果其上方邻点对应的数据为#00H,其余三个邻点对应的数据都为#01H,就把当前坐标位置移向其右方邻点处;n)如果其右方邻点对应的数据为#00H,其余三个邻点对应的数据都为#01H,就把当前坐标位置移向其下方邻点处;o)如果其下方邻点对应的数据为#00H,其余三个邻点对应的数据都为#01H,就把当前坐标位置移向其左方邻点处;p)如果其左方邻点对应的数据为#00H,其余三个邻点对应的数据都为#01H,就把当前坐标位置移向其上方邻点处;q)如果当前坐标位置的上、右、下与左方四个邻点对应的四个数据都是#00H,四个邻点中也没有出现本跟踪区域轮廓过程所获得的最前面的5个位置坐标之一,这时,尝试退出该“奇异的隅角”:把当前坐标位置对应的数据置为#00H,从RAM内的临时存储区取出最后存进去的坐标值,把该坐标值赋予当前坐标位置指针即(DPH,DPL),也就是退回到前一个位置的坐标处,然后,按照上述跟踪区域轮廓的规则继续跟踪下一个曲线轮廓点,如果能够找到下一个曲线轮廓点,就继续跟踪区域轮廓的工作,否则,所遇到的“奇异的隅角”表明不存在封闭、连续的轮廓曲线,即没有形成被踩踏的区域,这时,清零RAM内的临时存储区,初始化RAM中临时存储区地址指针寄存器R<sub>1</sub>,R<sub>2</sub>,设置跟踪区域轮廓工作结束的标志位:SETB_F<sub>0</sub>,结束本轮跟踪区域轮廓的工作;r)如果当前坐标位置的上、右、下与左方四个邻点对应的四个数据都是#00H,四个邻点中出现了本跟踪区域轮廓过程所获得的最前面的5个位置坐标之一,这时,把踩踏区域数目计数器R<sub>7</sub>加1即INC_R<sub>7</sub>,不清零RAM内的临时存储区,初始化RAM中临时存储区地址指针寄存器R<sub>1</sub>,R<sub>2</sub>,设置跟踪区域轮廓工作结束的标志位即SETB_F<sub>0</sub>,依序把两个字节的数据(#FFH,#FFH)存入RAM中临时存储区,作为轮廓位置结束的标志,结束本轮跟踪区域轮廓工作;4)每次移动当前坐标位置之前,根据RAM中临时存储区地址指针寄存器R<sub>1</sub>,R<sub>2</sub>把当前位置的坐标(DPH,DPL)依序存储在RAM内的临时存储区,然后使得RAM中临时存储区地址指针寄存器R<sub>1</sub>,R<sub>2</sub>指向下一处存储单元;5)每次移动当前坐标位置之前,把当前坐标位置对应的数据改写成R<sub>7</sub>+#01H,即:MOV_A,R<sub>7</sub>,INC_A,MOVX_@DPTR,A;6)上述诸规则中,所述数据#00H与非#01H的其它数据等效;上述步骤四所述“用相应的数码标志该轮廓所包围的区域”的实施方法包括下述步骤:步骤一、初始化x,y坐标指针DPTR:MOV_DPH,#01H,MOV_DPL,#01H;步骤二、如果x,y坐标指针DPTR已经指向最后一行即:DPH=Number_ROW‑1,则结束标志轮廓区域的工作;步骤三、从RAM取出并查看当前位置的数据:MOV_A,@DPTR,1)如果该数据不等于#01H,x,y坐标指针DPTR指向其下一个坐标点,然后,继续执行本实施方法之步骤二;2)如果该数据等于#01H,先暂存当前位置的x,y坐标指针DPTR,并称之为目标位置,然后,查看该目标位置是否处于轮廓所包围之中:(a)把当前位置的x,y坐标指针DPTR指向目标位置的左方,逐个坐标点地取出它们对应的数据,即:DEC_DPL,MOVX_A,@DPTR,并逐个坐标点地查看该数据是否等于踩踏区域数目计数器R<sub>7</sub>:如果遇到等于R<sub>7</sub>的坐标点,跳到本实施方法步骤三之2)(b),继续查看工作;如果进行到DPL=0还没有遇到等于R<sub>7</sub>的坐标点,就把x,y坐标指针DPTR指向目标位置的下一个坐标点,继续本实施方法之步骤二;(b)把当前位置的x,y坐标指针DPTR指向目标位置的右方,逐个坐标点地取出它们对应的数据,即:INC_DPL,MOVX_A,@DPTR,并逐个坐标点地查看该数据是否等于踩踏区域数目计数器R<sub>7</sub>:如果遇到等于R<sub>7</sub>的坐标点,跳到本实施方法步骤三之2)(c),继续查看工作;如果进行到DPL=Number_COL‑1还没有遇到等于R<sub>7</sub>的坐标点,就把x,y坐标指针DPTR指向目标位置的下一个坐标点,继续本实施方法之步骤二;(c)把当前位置的x,y坐标指针DPTR指向目标位置的上方,逐个坐标点地取出它们对应的数据,即:DEC_DPH,MOVX_A,@DPTR,并逐个坐标点地查看该数据是否等于踩踏区域数目计数器R<sub>7</sub>:如果遇到等于R<sub>7</sub>的坐标点,跳到本实施方法步骤三之2)(d),继续查看工作;如果进行到DPH=0还没有遇到等于R<sub>7</sub>的坐标点,就把x,y坐标指针DPTR指向目标位置的下一个坐标点,继续本实施方法之步骤二;(d)把当前位置的x,y坐标指针DPTR指向目标位置的下方,逐个坐标点地取出它们对应的数据,即:INC_DPH,MOVX_A,@DPTR,并逐个坐标点地查看该数据是否等于踩踏区域数目计数器R<sub>7</sub>:如果遇到等于R<sub>7</sub>的坐标点,说明该目标位置位于踩踏区域数目计数器R<sub>7</sub>对应的轮廓所包围的区域内,把该目标位置作上数码标记:MOV_A,R<sub>7</sub>,MOVX_@DPTR,A,然后,把x,y坐标指针DPTR指向目标位置的下一个坐标点,继续本实施方法之步骤二;如果进行到DPH=Number_ROW‑1还没有遇到等于R<sub>7</sub>的坐标点,把x,y坐标指针DPTR指向目标位置的下一个坐标点,继续本实施方法之步骤二;3)本实施方法之步骤三所述“下一个坐标点”的含义是,如果当前坐标点已经处于本行最后的一列即DPL=Number_COL‑1时,下一个坐标点为(DPH←DPH+1,DPL←1),否则,下一个坐标点为(DPH,DPL←DPL+1);上述步骤四所述“逐点计算该轮廓点与其它轮廓点间的距离并保存其大者的方法”包括下述步骤:步骤1、把RAM中临时存储区地址指针初始值(#AH,#AL)赋予x,y坐标指针DPTR;步骤2、当前x,y坐标指针DPTR对应着RAM中临时存储区连续存放的两个字节,称这两个字节为当前轮廓位置(DPH<sub>P</sub>,DPL<sub>P</sub>),暂存当前x,y坐标指针DPTR,称之为当前轮廓位置的坐标,查看当前轮廓位置是不是轮廓位置结束的标志(#FFH,#FFH):是,与当前的踩踏区域数目计数器R<sub>7</sub>对应的被踩踏区域的长度的平方:L(R<sub>7</sub>)<sup>2</sup>=R<sub>6</sub>R<sub>5</sub>,清零R<sub>6</sub>R<sub>5</sub>,结束执行本轮“逐点计算该轮廓点与其它轮廓点间的距离并保存其大者的方法”;否,执行下一步骤;步骤3、x,y坐标指针DPTR指向当前位置的下一个存储区域,从RAM中临时存储区取出连续的两个字节,称这两个字节为目标轮廓位置(DPH<sub>O</sub>,DPL<sub>O</sub>),查看它是不是轮廓位置结束的标志(#FFH,#FFH):是,则恢复x,y坐标指针DPTR为暂存的当前轮廓位置的坐标,然后,使x,y坐标指针DPTR指向其对应的下一个存储区域,再跳转到步骤2;否,则计算当前轮廓位置与目标轮廓位置两点间的距离的平方:L<sup>2</sup>=(DPH<sub>P</sub>‑DPH<sub>O</sub>)<sup>2</sup>+(DPL<sub>P</sub>‑DPL<sub>O</sub>)<sup>2</sup>;步骤4、比较L<sup>2</sup>与R<sub>6</sub>R<sub>5</sub>,R<sub>6</sub>、R<sub>5</sub>分别为距离的平方值的高、低字节寄存器,取其大者保存于R<sub>6</sub>R<sub>5</sub>;步骤5、跳转步骤3。
地址 400067 重庆市南岸区学府大道19号重庆工商大学科研处