《“教室”人数检测器智控设计报告书.pdf》由会员分享,可在线阅读,更多相关《“教室”人数检测器智控设计报告书.pdf(35页珍藏版)》请在工友文库上搜索。
1、 智控设计报告书 题目:“教室”人数检测器 队伍名称 : 学生姓名 : 上交日期 : 目录 一 . 设计要求 1 1. 基本要求 . 1 2. 拓展要求 . 1 二 方案设计 . 1 1. 总体方案说明 . 1 2. 功能模块说明 . 1 三中央控制模块 . 2 四 时间模块 . 3 五 数据读写模块 . 6 六 输出显示模块 . 6 六,硬件结构 . 13 七,程序概要 . 13 八,源程序(部分) 14 1 “教室”人数检测器 一 . 设计要求 1. 基本要求 (1) 设计检测器,检测教室人员进出(检测方法不限,尽可能简单和实用); (2) 设计良好的人机交互界面,实现对出入人数的统计情况
2、显示; (3) 添加按键以方便管理员对检测器做简单设置(具体功能自行设计)。 2. 拓展要求 (1) 添加时钟模块,对自习室人数作分时段检测; (2) 实现与上位机的通信,能够实时显示教室出入人数的统计情况; (3) 通过上位机,可以对检测器做简单设置; (4) 开发手机 APP,能够远程查询教室出入人数的统计情况; (5) 其他创新功能。 二 方案设计 1. 总体方案说明 本次“教室”人数检测器设计任务,以 stc89c51 为控制中心,使用了 ds1302 时钟芯片,红外传感器 e18-8mnk,蓝牙 HC-05,12864 液晶显示器等元件。整个 控制系统分为检测模块,中央控制模块,数据
3、读写功能模块和输出显示功能模块。 2. 功能模块说明 系统的主要功能模块组成和功能如表 1 所示: 2 表格 1 教师人数检测器功能主要模块组成和功能表 模块名称 使用元件 模块功能 中央控制模块 stc89c51 对系统进行控制 检测 模块 红外传感器 e18-8mnk 获得人数进出数据 输出显示模块 12864 液晶显示器,蓝牙 HC-05 输出显示数据 三中央控制模块 1.stc89c51 芯片 STC89C51RC 是采用 8051 核的 ISP( In System Programming)在系统可编程芯 片,最高工作 时钟频率 为 80MHz,片内含 4K Bytes 的可反复擦写
4、 1000 次的 Flash 只读 程序存储器 ,器件兼容标准 MCS-51 指令系统 及 80C51 引脚 结构,芯片内集 成了通用 8 位 中央处理器 和 ISP Flash 存储单元 ,具有在系统可编程( ISP)特性, 配合 PC 端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通 用编程器,而且速度更快。 STC89C51RC 系列 单片机 是单时钟 /机器周期 (1T)的兼 容 8051 内核单片机,是高速 / 低功耗的新一代 8051 单片机,全新的流水线 / 精简指令集 结构 ,内部集成 MAX810 专用复位电路。 2.特点 (1)增强型 1T 流水线 /精简指令
5、集 结构 8051 CPU (2)( 5V 单片机 ) / 2.0V-3.8V ( 3V 单片机 (3)时钟频率 035MHz,相当于普通 8051 的 0 420MHz.实际工作频率可达 48MHz. (4)用户应用程序空间 12K / 10K / 8K / 6K / 4K / 2K 字节 (5)片上集成 512 字节 RAM (6)通用 I/O 口( 27/23 个),复位后为: 准双向口 / 弱上拉(普通 8051 传 统 I/O 口) 可设置成四种模式:准双向口 / 弱上拉,推挽 / 强上拉,仅为输入 /高阻 ,开 漏 每个 I/O 口 驱动能力 均可达到 20mA,但整个芯片最大不得
6、超过 55mA (7)ISP(在系统可编程) /IAP(在应用可编程),无需专用 编程器 3 可通过串口( P3.0/P3.1)直接下载 用户程序 ,数秒即可完成一片 (8)EEPROM 功能 (9)看门狗 (10)内部集成 MAX810 专用 复位电路 (外部晶体 20M 以下时,可省外部复 位电路) (11)时钟源 :外部高精度晶体 / 时钟,内部 R/C 振荡器。用户在下载用户程 序时,可选择是使用内部 R/C 振荡器还是外部晶体 / 时钟。常温下内部 R/C 振 荡器频率为: 5.2MHz 6.8MHz。精度要求不高时,可选择使用内部时钟,因为 有温漂,请选 4MHz 8MHz (12
7、)有 2 个 16 位 定时器 / 计数器 (13)外部中断 2 路 ,下降沿中断或低电平触发中断 ,Power Down 模 式可由外 部中断低电平触发 中断方式 唤醒 (14)PWM( 4 路) / P C A(可编程计数器阵列),也可用来再实现 4 个定时器 或 4 个外部中断 (上升沿中断 / 下降沿中断均可支持 ) (15)STC89Cc516AD 具有 ADC 功能。 10 位精度 ADC,共 8 路 (16)通用异步 串行口 (UART) (17)SPI 同步通信 口,主模式 / 从模式 (18)工作温度范围 : 0 -75/ -40 -+85 (19)封装: PDIP-28,
8、SOP-28, PDIP-20, SOP-20, PLCC-32,TSSOP-20(超小封装, 定货 ) 四 时间模块 1. DS1302 芯片 DS13021 的在实时显示时间中的应用。它可以对年、月、日、周、时、分、 秒进行计时,且具有闰年补偿等多种功能。 工作原理 4 DS1302 是美国 DALLAS 公司推出的一种高性能、低功耗、带 RAM 的实时时 钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能, 工作电压为 2.0V 5.5V。采用三线接口与 CPU 进行 同步通信 ,并可采用突发方 式一次传送多个字节的 时钟信号 或 RAM 数据。 DS1302 内部有一
9、个 318 的用于 临时性存放数据的 RAM 寄存器 。 DS1302 是 DS1202 的升级产品,与 DS1202 兼容, 但增加了主电源 /后备电源双电源引脚,同时提供了对后备电源进行涓细电流充 电的能力。 结构 DS1302 的引脚排列 ,其中 Vcc2 为主电源, VCC1 为后备电源。在主电源关闭的 情况下,也能保持时钟的连续运行。 DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电。 当 Vcc2 大于 Vcc1+0.2V 时, Vcc2 给 DS1302 供电。当 Vcc2 小于 Vcc1 时, DS1302 由 Vcc1 供电。 X1 和 X2 是振荡源,外接 32
10、.768kHz 晶振。 RST 是复位 /片选线 ,通 过把 RST 输入驱动置高电平来启动所有的 数据传送 。 RST 输入有两种功能:首先, RST 接通控制逻辑,允许地址 /命令序列送入 移位寄存器 ;其次, RST 提供终止单 字节或多字节数据传送的方法。当 RST 为高电平时,所有的数据传送被初始化, 允许对 DS1302 进行操作。如果在传送过程中 RST 置为低电平,则会终止此次数 据传送, I/O 引脚变为高阻态。上电运行时,在 Vcc2.0V 之前, RST 必须保持低 电平。只有在 SCLK 为低电平时,才能将 RST 置为高电平。 I/O 为串行数据输入输 出端 (双向
11、),后面有详细说明。 SCLK 为时钟输入端。 下图为 DS1302 的引脚功能 图: DS1302 封装图 控制字节 DS1302 的控制字如图 2 所示。控制字节的最高有效位 (位 7)必须是逻辑 1, 如果它为 0,则不能把数据写入 DS1302 中,位 6 如果为 0,则表示存取日历时 钟数据,为 1 表示存取 RAM 数据 ;位 5 至位 1 指示操作单元的地址 ;最低有效位 (位 0)如为 0 表示要进行写操作,为 1 表示进行读操作,控制字节总是从最低位开始 输出。 5 数据流 在控制指令字输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302, 数据输入从低位即位
12、0 开始。同样,在紧跟 8 位的控制 指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据,读出数据时从低位 0 位到高位 7。 寄存器 DS1302 有 12 个 寄存器 ,其中有 7 个寄存器与日历、时钟相关,存放的 数据 位 为 BCD 码形式 ,其日历、时间寄存器及其控制字见表 1。 此外, DS1302 还有年份寄存器、 控制寄存器 、充电寄存器、时钟突发寄存 器及与 RAM 相关 的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器 外的所有寄存器内容。 DS1302 与 RAM 相关的寄存器分为两类:一类是单个 RAM 单元,共 31 个,每个单元 组态 为一个
13、8 位的字节,其命令控制字为 C0H FDH, 其中奇数为读操作,偶数为写操作;另一类为突发方式下的 RAM 寄存器,此方 式下可一次性读写所有的 RAM 的 31 个字节,命令控制字为 FEH(写 )、 FFH(读 )。 软硬件 DS1302 与 CPU 的连接需要三条线,即 SCLK(7)、 I/O(6)、 RST(5)。 CPU 连接 实际上,在 调试程序 时可以不加电容器,只加一个 32.768kHz 的晶振即可。 只是选择晶振时,不同的晶振,误差也较大。 问题说明 6 DS1302 与 微处理器 进行数据交换时,首先由微处理器向电路发送命令字节, 命令字节最高位 Write Prot
14、ect(D7)必须为逻辑 1,如果 D7=0,则禁止写 DS1302, 即 写保护 ; D6=0,指定时钟数据, D6=1,指定 RAM 数据; D5 D1 指定输入或 输出的特定 寄存器 ;最低位 LSB(D0)为逻辑 0,指定写操作 (输入 ), D0=1,指定 读操作 (输出 )。 在 DS1302 的时钟日历或 RAM 进行 数据传送 时, DS1302 必须首先发送命令 字节。若进行单字节传送, 8 位命令字节传送结束之后,在下 2 个 SCLK 周期的 上升沿输入数据字节,或在下 8 个 SCLK 周期的下降沿输出数据字节。 DS1302 与 RAM 相关的寄存器分为两类 :一类是
15、单个 RAM 单元,共 31 个,每 个单元组态为一个 8 位的字节,其命令控制字为 C0H FDH,其中奇数为读操作, 偶数为写操作;再一类为突发方式下的 RAM 寄存器,在此方式下可一次性读、 写所有的 RAM 的 31 个字节。 要特别说明的是备用电源 B1,可以用电池或者超级电容器 (0.1F 以上 )。虽然 DS1302 在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好 选用小型充电电池。可以用老式电脑主板上的 3.6V 充电电池。如果断电时间较 短 (几小时或几天 )时 , 就可以用漏电较小的普通电解电容器代替 。 100 F 就可以 保证 1 小时的正常走 时。 D
16、S1302 在第一次加电后,必须进行初始化操作。初始 化后就可以按正常方法调整时间。 五 数据读写模块 . 按键 六 输出显示模块 1. 12864 液晶 名称含义 12864 是 128*64 点阵 液晶模块的点阵数简称。 7 基本参数 视角 6 点钟 驱动方式 1/64 DUTY 1/9 BIAS 背光 LED 控制器 KS0108 或兼容 IC 数据总线 8 位并口 /6800 方式 温度特性 工作温度: -20C - +70C 储藏温度: -30C - +80C 点阵格式 128 x 64 点尺寸 0.39 x 0.55mm 点中心距 0.44 x 0.60mm 视域 62.0 x 4
17、4.0mm 有效显示区域 56.27 x 38.35mm 外形尺寸 78.0 x 70.0 x 12.5mm Max. 净重 65g 电气特性 项目 符号 最小 典型 最大 单位 电源电压 VDD-VSS 4.75 5.0 5.25 V 液晶驱动 电压 VDD-VA DJ Ta=0 -11.0 -11.5 -12.0 Ta=25 -10.5 -11.0 -11.5 Ta=50 -10.0 -10.5 -11.0 输入信号 电压 VIH 0.8 VDD - VDD+0.3 VIL 0 - 0.2 VDD LCM 工作 电流 IDD - 3 8 mA 8 背光驱动 电流 ILED - 60 80
18、液晶驱动 电流 IEE - 1.0 - 极限参数 项目 符号 最小 最大 单位 备注 电源电压 VDD-VSS -0.3 7.0 V 液晶驱动 电压 VDD VADJ - 15 工作温度 范围 TOP -20 +70 C 储存温度 范围 TST -30 +80 光学特性 项目 符号 条件 典型 单位 备注 视角范围 f 对比度 2 40 弧度 f 视角方向 b 30 b 视角反方向 l 30 l 视 角左方向 r 30 r 视 角右方向 上升时间 TR TA=25C 120 ms 下降时间 TF 130 帧频 FRM 64 Hz 对比度 CR 6.0 - 2.基本用途 该点阵的屏显成本相对较低
19、,适用于各类仪器,小型设备的显示领域。 9 液晶模组使用注意事项 1 当您在你的产品设计中使用本液晶模组,注意液晶的视角与你的产品用途 相一致。 2 液晶屏是玻璃为基础的,跌落或与硬物撞击会引起液晶屏破裂或粉碎。尤 其是边角处。 3 尽管在液晶表面的偏振片有抑制反光的表层,应当小心不要划伤表面,一 般推荐在液晶表面采用透明塑胶材料的保护屏。 4 如果液晶模组储藏在低于规定的温度以下,液晶材料会凝结而性能恶化。 如果液晶模组储藏在高于规定的温度以上,液晶材料的分子排列方向会转变为液 态,可能无法恢复到原来的状态。超出温度和湿度范围,会引起偏振片剥落或起 泡。因此,液晶模组应储藏在规定的温度范围。
20、 5 如液晶表面遇口水或滴水,应立即擦除,避免长时间过后引起色彩变化或 留下 污点 。水蒸气会引起 ITO 电极腐蚀。 6 如果需要清洁液晶屏表面,应该用棉或软布轻快地擦拭,仍不能清除时, 呵气之后再擦拭。 7 液晶模组的驱动应遵照规定的额定指标,避免故障及永久损坏。对液晶材 料施加直流电压,会引起液晶材料迅速恶化,应该确保提供交流波形的 M 信号 的连续应用。特别是,在电源开关时应遵照供电顺序,避免驱动锁存及直流直接 加至液晶屏。 3.管脚号 管脚 号 管脚名 称 电平 管脚功能描述 1 VSS 0V 电源地 2 VCC 3.0+5V 电源正 3 V0 - 对比度(亮度)调整 4 RS(CS
21、) H/L RS=“H”,表示 DB7DB0 为显示数据 RS=“L”,表示 DB7DB0 为显示指令数据 5 R/W(SID) H/L R/W=“H”,E=“H”,数据被读到 DB7DB0 R/W=“L”,E=“HL”, DB7DB0 的数据被写到 IR 或 DR 6 E(SCLK) H/L 使能信号 10 7 DB0 H/L 三态数据线 8 DB1 H/L 三态数据线 9 DB2 H/L 三态数据线 10 DB3 H/L 三态数据线 11 DB4 H/L 三态数据线 12 DB5 H/L 三态数据线 13 DB6 H/L 三态数据线 14 DB7 H/L 三态数据线 15 PSB H/L
22、H: 8 位或 4 位并口方式, L:串口方式(见注释 1) 16 NC - 空脚 17 /RESET H/L 复位端,低电平有效(见注释 2) 18 VOUT - LCD 驱动电压输出端 19 A VDD 背光源正端( +5V)(见注释 3) 20 K VSS 背光源负端(见注释 3) *注释 1:如在实际应用中仅使用并口通讯模式,可将 PSB 接固定高电平。 *注释 2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该 端悬空。 *注释 3:如背光和模块共用一个电源,可以将模块上的 JA JK 连接到 VCC 及 GND 电源口。 4.指令说明 模块控制芯片提供两套控制命令,基本
23、指令和扩充指令如下: 基本指令 指令 指令码 功 能 R S R/ W D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 清除显 示 0 0 0 0 0 0 0 0 0 1 将 DDRAM 填满 “20H“,并且设 定 DDRAM 的地址计数器 (AC) 到 “00H“ 地址归 位 0 0 0 0 0 0 0 0 1 X 设定 DDRAM 的地址计数器 (A C)到 “00H“,并且将游标移到 11 开头原点位置 ;这个指令不改 变 DDRAM 的内容 显示状 态开 / 关 0 0 0 0 0 0 1 D C B D=1: 整体显示 ONC=1: 游 标 ON B=1:游标位置反
24、白允 许 进入点 设定 0 0 0 0 0 0 0 1 I/ D S 指定在数据的读取与写入时 , 设定游标的移动方向及指定 显示的移位 游标或 显示移 位控制 0 0 0 0 0 1 S/ C R /L X X 设定游标的移动与显示的移 位控制位 ;这个指令不改变 D DRAM 的内容 功能设 定 0 0 0 0 1 D L X R E X X DL=0/1: 4/8 位数据 RE=1: 扩 充指令操作 RE=0: 基本指令 操作 设定 C GRAM 地址 0 0 0 1 A C 5 A C 4 A C 3 A C 2 A C 1 A C 0 设定 CGRAM 地址 设定 D DRAM 地址
25、 0 0 1 0 A C 5 A C 4 A C 3 A C 2 A C 1 A C 0 设定 DDRAM 地址(显示位 址)第一行: 80H 87H 第二 行: 90H 97H 读取忙 标志和 地址 0 1 B F A C 6 A C 5 A C 4 A C 3 A C 2 A C 1 A C 0 读取忙标志 (BF)可以确认内 部动作是否完成 ,同时可以读 出地址计数器 (AC)的值 写数据 到 RA M 1 0 数据 将数据 D7D0 写入到内部 的 RAM (DDRAM/CGRAM/IRA M/GRAM) 读出 R AM 的 值 1 1 数据 从内部 RAM 读取数据 D7 D0(DD
26、RAM/CGRAM/IRAM/GR AM) 扩充指令 指令 指 令 码 功 能 R S R/ W D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 待命模 0 0 0 0 0 0 0 0 0 1 进入待命模式 ,执行其他指令都 12 式 可终止待命模式 卷动地 址开关 开启 0 0 0 0 0 0 0 0 1 S R SR=1:允许输入垂直卷动地址 S R=0:允许输入 IRAM 和 CGRAM 地址 反白选 择 0 0 0 0 0 0 0 1 R 1 R 0 选择 4 行中的任一行作反白显 示,并可决定反白与否。初始值 R1R0=00,第一次设定为反白显 示,再次设定变回正常
27、睡眠模 式 0 0 0 0 0 0 1 S L X X SL=0:进入睡眠模式 SL=1:脱 离睡眠模式 扩充功 能设定 0 0 0 0 1 C L X R E G 0 CL=0/1: 4/8 位数据 RE=1: 扩充 指令操作 RE=0: 基本指令操作 G=1/0:绘图开关 设定绘 图 RA M地址 0 0 1 0 A C 6 0 A C 5 0 A C 4 A C 3 A C 3 A C 2 A C 2 A C 1 A C 1 A C 0 A C 0 设定绘图 RAM 先设定垂直 (列 ) 地址 AC6AC5AC0 再设定水平 (行 )地址 AC3AC2AC1AC0 将以上 16 位地址连
28、续写入即可 13 六,硬件结构 七, 程序概要 利用水平的两个红外传感器判断人的出入,分别接在外部中断 0, 1 保证不会错过。利 用 12864 进行显示。按下设置键可以进行对座位数,时钟,系统开闭等的设置。按下 detail 键可显示分时段人流量以及一周内不同时段的平均人流量。并且串口接 hc05,可以用上位 机与手机 app 与之通信,实时远程获取数据。 14 八,源程序(部分) #include #define uchar unsigned char #define uint unsigned int #define wsecond 0x80 #define wminute 0x82
29、#define whour 0x84 #define rsecond 0x81 #define rminute 0x83 #define rhour 0x85 #define wprotect 0x8E sbit rs=P10; sbit rw=P11; sbit en=P12; sbit up=P15; sbit down=P14; sbit set=P16; sbit select=P17; sbit detail=P13; sbit SCLK=P35; sbit DIO=P36; sbit CE=P37; sbit ACC_7=ACC7; char a,i,flag_tmsg,t=0,s
30、eat,sec0=0x00,min0=0,hour0=0,flag_sys=1,clk=0,out_flag=0,in_flag=0,flag_we ek=0,temp0,temp1,temp2; int seat0=100,people=0,people_zao=0,people_wu=0,people_wan=0; char zao_wp=0,0,0,0,0,0,0; char wu_wp=0,0,0,0,0,0,0; char wan_wp=0,0,0,0,0,0,0; void delay(uint ms); void wcmd(uchar cmd); void wdata(uchar
31、 dat); void lcdinit(); void mcuinit(); void displayinit(); void init1302(); 15 void clean_GDRAM(); void show0(); /人数显示 void show1(); /座位数显示 void show2(); /调时时显示 void show3(); /实时时钟 uchar read1302(uchar addr); void write1302(uchar addr,dat); void settings(); void messages(); void send_data(uchar ch);
32、 void init1302() uchar i,flag_pointer1=2,flag_spdup0=0,flag_spdup1=0,auxs=0x00,auxm=0x00,auxh=0x00; wcmd(0x80); for(i=0;i2) flag_pointer1=2; delay(500); if(set=0) delay(10); if(set=0) flag_spdup0=0; flag_spdup1=0; flag_pointer1-; if(flag_pointer123) hour0=0; break; case 1: min0+; 17 if(min059) min0=
33、0; hour0+; if(hour023) hour0=0; break; case 0: if(sec0=0) sec0=30; else sec0=0; break; if(flag_spdup09) auxm+=0x10; min0-=10; auxm+=min0; while(hour09) auxh+=0x10; hour0-=10; auxh+=hour0; write1302 (wprotect,0x00); write1302 (wsecond,auxs); write1302 (wminute,auxm); write1302 (whour,auxh); write1302 (wprotect,0x80); wcmd(0x0c); void displayinit() wcmd(0x80); for(i=0;i=12 out_flag=0; else in_flag=1; void ser() interrupt 4 RI=0; a=SBUF; flag_tmsg=1;