超市人流量统计

  • 格式:doc
  • 大小:283.00 KB
  • 文档页数:12

无线接收显示的超市人流量统计系统设计目的:统计一天当中某个超市的人流量,以及能准确的显示出在每一时刻超市里的现有人数。

基本思路:两对相同的红外线发射接收装置分别放置在超市的进口(A)和出口(B),分别统计进出的人数。

红外线发射装置发出光线被接收装置接收,接收装置输出高低电平,输出信号脉冲,然后利用单片机的计数器对输入的脉冲进行计数。

1.红外线发射装置与接收装置对立放置相距1米,接收管必须和发射管水平对称。

无人时,红外线照射接受管,接收管电阻很小,当有人从之间经过时,接收管没有红外线的照射,电阻变小,给无线发射装置一个“0”的数据,当无线接收装置接收到数据“0”后,将这个数据传给到单片机的外部中断0(12脚)和外部中断1(13脚),中断程序使数据加1和减1,用LCD1602两行分别显示“zaixian:人数”和“zongshu:人数”2.将A传感器放置在超市的入口处,B传感器放置在超市的出口处,显示装置可以拿在手上。

这样进去一个人则计数一个,出来一个人则减去一个,这样便可以测出当天的总人流量和当前超市的人数,并用液晶显示屏显示实时的数据。

电路图及PCB图:下图为A、B装置,分别放置在超市入口和出口下图为显示装置程序(汇编):X EQU 00H ;LCD 地址变量RS EQU P1.0RW EQU P1.1EN EQU P1.2ORG 0000HLJMP MAINORG 0003HLJMP INT0ORG 0013HLJMP INT1ORG 0030HMAIN: MOV P2,#0FFHMOV R0,#40HMOV R2,#16L1: MOV @R0,#00HINC R0DJNZ R2,L1CLR ENLCALL INIT_LCD ;初始化LCDMOV R5,#10LCALL DELAYMOV DPTR,#ZAIXIAN ;指针指到显示消息1MOV A,#1 ;显示在第一行LCALL LCD_PRINTMOV DPTR,#ZONGSHU ;指针指到显示消息2MOV A,#2 ;显示在第二行LCALL LCD_PRINTLCALL DELAY1000MOV SP,#60HSETB IT0SETB IT1MOV IP,#05HMOV IE,#85HLCALL SHUSJMP $SHU: LCALL CONV1LCALL CONV2RET;--------------------------------------------------------- ENABLE: ;写指令CLR RS ;RS=L,RW=L,E=高脉冲CLR RW ;D0-D7=指令码SETB ENLCALL DELAY1CLR ENRET;-------------------------------------------------------CLR_LINE: ;清除该行LCD 的字符MOV R0,#16CL1: MOV A,#' 'LCALL WDATADJNZ R0,CL1RET;-------------------------------------------------------DE: MOV R7,#250 ;延时500微秒DJNZ R7,$RET;-------------------------------------------------------EN1:CLR RWSETB EN ;短脉冲产生启用信号LCALL DECLR ENLCALL DERET;----------------------------------------------------- WCOM: ;以8位控制方式将命令写至LCD MOV P0,A ;写入命令LCALL ENABLERET;----------------------------------------------------- WDATA: ;以8位控制方式将数据写至LCD MOV P0,A ;写入数据SETB RS ;设置写入数据LCALL EN1RET;-----------------------------------------------------;第一行行显示数;-----------------------------------------------------LCDP1: ;在LCD的第一行显示数字ADD A,#30HPUSH ACCINC XMOV A,X ;设置显示地址ADD A,#80H ;设置LCD的第二行地址CALL WCOM ;写入命令POP ACC ;由堆栈取出ALCALL WDATA ;写入数据RET;-----------------------------------------------------;第二行显示数;-----------------------------------------------------LCDP2: ;在LCD的第二行显示字符ADD A,#30HPUSH ACCINC XMOV A,X ;设置显示地址ADD A,#0C0H ;设置LCD的第二行地址CALL WCOM ;写入命令POP ACC ;由堆栈取出ALCALL WDATA ;写入数据RET;---------------------------------------------------- DELAY: ;延时10MSMOV R6,#50D1: MOV R7,#100DJNZ R5,DELAYRET;----------------------------------------------------DELAY100: MOV R5,#250 ;延时100MS D3: MOV R6,#200DJNZ R6,$DJNZ R5,D3RET;----------------------------------------------------DELAY1000: MOV R5,#250 ;延时100MS D4: MOV R6,#200D5: MOV R7,#10DJNZ R7,$DJNZ R6,D5DJNZ R5,D4RET;----------------------------------------------------- DELAY1: ;延时5MSMOV R6,#25D2: MOV R7,#100DJNZ R7,$DJNZ R6,D2RET;---------------------------------------P_KEY: MOV A,#1 ;第一行显示LCALL LCD_PRINTRET;---------------------------------------;转换为ASCII 码并显示,在第二行显示数字;-------------------------------------------CONV1:MOV X,#7 ;设置位置MOV R0,#40HMOV R2,#8L2: MOV A,@ROINC ROLCALL LCDP1 ;由LCD 显示出来DJNZ R2,L2RET;------------------------------------------------------ CONV2:MOV X,#7 ;设置位置MOV R0,#50HMOV R2,#8L3: MOV A,@ROINC ROLCALL LCDP1 ;由LCD 显示出来;------------------------------------------------------;显示字符;------------------------------------------------------INIT_LCD: ;8位I/O控制LCD 接口初始化MOV P0,#38H ;双列显示,字形5*7点阵LCALL ENABLELCALL DELAY1MOV P0,#38H ;双列显示,字形5*7点阵LCALL ENABLELCALL DELAY1MOV P0,#38H ;双列显示,字形5*7点阵LCALL ENABLELCALL DELAY1LCALL INIT_LCD1RET;---------------------------------------------------------INIT_LCD1: ;LCD 控制指令初始化MOV A,#38H ;;双列显示,字形5*7点阵LCALL WCOM ;LCALL DELAY1MOV A,#0CH ;;开显示,显示光标,光标不闪LCALL WCOM ;LCALL DELAY1MOV A,#01H ;;清除LCD 显示屏LCALL WCOM ;LCALL DELAY1RET;---------------------------------------------------------LCD_PRINT: ;在LCD的第一行或第二行显示字符CJNE A,#1,LINE2 ;判断是否为第一行LINE1: MOV A,#80H ;设置LCD 的第一行地址LCALL WCOM ;写入命令LCALL CLR_LINE ;清除该行字符数据MOV A,#80H ;设置LCD 的第一行地址LCALL WCOM ;写入命令LJMP FILLLINE2: MOV A,#0C0H ;设置LCD 的第二行地址LCALL WCOM ;写入命令LCALL CLR_LINE ;清除该行字符数据MOV A,#0C0H ;设置LCD 的第二行地址LCALL WCOMFILL: CLR A ;填入字符MOVC A,@A+DPTR ;由消息区取出字符CJNE A,#0,LC1 ;判断是否为结束码RETLC1: LCALL WDATA ;写入数据INC DPTR ;指针加1LJMP FILL ;继续填入字符RET;---------------------------------------------------------INT1:PUSH ACCPUSH PSWMOV R0,40HMOV R1,41HMOV R2,42HMOV R3,43HMOV R4,44HMOV R5,45HMOV R6,46HMOV R7,47HDEC R7CJNE R7,#00H,T0C ;若R7不等于0,跳转到T0CMOV R7,#9DEC R6CJNE R6,#00H,T0CMOV R6,#9DEC R5CJNE R5,#00H,T0CMOV R5,#9DEC R4CJNE R4,#00H,T0CMOV R4,#9DEC R3CJNE R3,#00H,T0CMOV R3,#9DEC R2CJNE R2,#00H,T0CMOV R2,#9DEC R1CJNE R1,#00H,T0CMOV R1,#9T0C:MOV 40H,R0MOV 41H,R1MOV 42H,R2MOV 43H,R3MOV 44H,R4MOV 45H,R5MOV 46H,R6MOV 47H,R7POP PSWPOP ACCLCALL SHUMOV P2,#0FFHRETI;-------------------------------------------------------INT0:PUSH ACCPUSH PSWMOV R0,50HMOV R1,51HMOV R2,52HMOV R3,53HMOV R4,54HMOV R5,55HMOV R6,56HMOV R7,57HINC R7CJNE R7,#0AH,T1C ;若R7不等于10,跳转到T1CMOV R7,#0INC R6CJNE R6,#0AH,T1CMOV R6,#0INC R5CJNE R5,#0AH,T1CMOV R5,#0INC R4CJNE R4,#0AH,T1CMOV R4,#0INC R3CJNE R3,#0AH,T1CMOV R3,#0INC R2CJNE R2,#0AH,T1CMOV R2,#0INC R1CJNE R1,#0AH,T1CMOV R1,#0T1C: MOV 50H,R0MOV 51H,R1MOV 52H,R2MOV 53H,R3MOV 54H,R4MOV 55H,R5MOV 56H,R6MOV 57H,R7MOV R0,40HMOV R1,41HMOV R2,42HMOV R5,45HMOV R6,46HMOV R7,47HINC R7CJNE R7,#0AH,T1C1 ;若R7不等于10,跳转到T1C1MOV R7,#0INC R6CJNE R6,#0AH,T1C1MOV R6,#0INC R5CJNE R5,#0AH,T1C1MOV R5,#0INC R4CJNE R4,#0AH,T1C1MOV R4,#0INC R3CJNE R3,#0AH,T1C1MOV R3,#0INC R2CJNE R2,#0AH,T1C1MOV R2,#0INC R1CJNE R1,#0AH,T1C1MOV R1,#0T1C1: MOV 40H,R0MOV 41H,R1MOV 42H,R2MOV 43H,R3MOV 44H,R4MOV 45H,R5MOV 46H,R6MOV 47H,R7POP PSWPOP ACCLCALL SHUMOV P2,#0FDHLCALL DELAY100MOV P2,#0FFHRETI;---------------------------------------ZAIXIAN: DB "zaixian: ",00H;LCD 第一行显示消息ZONGSHU: DB "zongshu: ",00H;LCD 第二行显示消息END技术特点:本系统用于统计某个超市的客源流量。