基于单片机的学生签到系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题 目: 基于单片机的学生签到系统的设计与实现
1学生签到系统分析与设计
1.1 方案设计具体思路
本设计是基于AT89C52单片机设计的学生签到打卡系统,本系统是由RC522射频芯片采集射频卡片数据ID号,然后51单片机通过获得的ID号查询录入的数据库来判断是哪个人签到,同时保存一下打卡时间记录。日历时间设置是通过上位机软件获取电脑精确时间,并通过串口将日历更新到板子系统,操作比按键设置简单易懂。同样通过电脑端软件发送串口指令录入学生信息、修改学生信息、设置日历、设置签到上下限时间,同时使用市场上通用的12864液晶显示屏显示时间和打卡详情功能。
1.2 方案设计总体框图
1.3 数据库设计
1.3.1 主控制芯片AT89C52的结构
在这一块AT89C52单片机芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、定时器/计数器,各部分通过内部总线相连。下面介绍几个主要部分。图1.2为AT89C52单片机的基本组成功能方块图。
1.3.2 AT89C52管脚说明
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,有8TTL门电流被脚吸收。当P1管脚写入1时,就叫做高阻输入。P0能够用于外部ROM数据,又叫做数据/地址的第八位。在FLASH编程时,原码输入口为PO,当正在校验时,PO输出原码,此时PO外部必须升高。
P1口:准双向通用I/0口。P1口管脚写入1后,上拉电阻升高,做为输入,当P1变为低电平时,有电流输出。P1口作为第八位地址接收,也可以用来进行FLASH的变成和校验。
P2口:准双向I/0口。P2口输出其特殊功能寄存器的内容。
P3口:P3口为8个上拉电阻双向I/O接口组成的。当P3口写入1后,P3口被内部升为高电平,用来输入。作为输入,外部下降为低电平,所以P3口会有电流的输出。
P3口管脚还有其他功能,如下:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外部中断0)
P3.3 INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 (外部数据存储器写选通)
P3.7 (外部数据存储器读选通)
RST:复位。振荡器需要复位时,要保持RST脚两个机器周期的高电平时间。
ALE/:地址锁存信号输出端/EPROM编程脉冲输入端。
PSEN:外部程序ROM的选通信号端。外部程序取指的时候,仅仅只有两次的PSEN有效。所以在外部ROM不工作的时候,信号是不会出现的。
/VP:内/外部ROM选择端.
XTAL1:反向振荡放大器的输入,内部时钟电路的输入。
XTAL2:反向振荡器的输出。
1.4串口电路
1.4.1 CH374概述
CH374是一个USB总线的通用接口芯片,USB-DEVICE
/SLAVE设备方式都是支付USB的主机方式。HUB根集线器有3个端口,低速和全速的控制传输、批量传输、中断传输以及同步/等时传输。CH374采用8位数据总线支持读、写、片选控制线以及中断输出。
该电路应用于51单片机和PC端的串口通讯,改串口模块电路用于设置时间和录入学生信息和修改学生信
2系统实现
2.1 程序模块设计
本次设计采用的是模块化程序结构,可以分成以下程序模块:
1、系统初始化程序:实现完成变量的设定、中断入口的设定、堆栈、输入输出口 及外部件的初始化工作(如12864、RC522、串口和定时器的初始化)。
2、键盘扫描程序:定时100ms轮训按键,来判断是否有按键发生。
3、主程序:完成键盘扫描、射频模块的读写、日历时间的显示、当有卡片刷卡时显示刷卡信息,如果超过预设的打卡时间段启动蜂鸣器报警。
4、射频模块程序:51单片机通过并口与射频模块通讯,定时检测天线周围是否有卡片介入,并通过ISO1443卡标准 完成读卡写卡功能。
5、显示子程序:12864的内部读写设定,显示校名和日历和显示刷卡信息状态。
6、蜂鸣器程序:判断是否满足刷卡条件,来控制是否报警。
7、日历程序:年月日时分秒和星期的计算。
2.2软件部分
图2.1系统设计流程图
本次设计采用的是模块化程序结构,可以分成以下程序模块:
1、系统IO初始化,主要就是MCU IO口的电平设置。
InitializeSystem()
2、学生卡软件参数的初始化,主要就是学生卡结构体变量参数赋值和BUF清0操作,以及设置打卡签到时间。
StudentCardInit();
3、蜂鸣器的初始化,关闭蜂鸣器操作,防止一上电就长响
beep_init();
4、日历结构体参数初始化,主要是设置默认上电日历时间星期。
Calendar_Init();
5、定时器初始化,定时器在程序中起了至关重要的做用,主要实现了系统轮训机制。
bsp_InitTimer();
6、射频模块复位初始化,切记RC500上电后应延时500ms才能可靠初始化,否则有可能射频模块初始化失败,造成不能正常刷卡。
Rc500Ready();
7、串口任务初始化,设置串口通讯参数波特率为:9600,校验位:NONE,数据位:8,停止位:1。
Creak_UsartTask();
8、按键任务初始化,主要对按键变量参数的初始化,以及硬件软件设置操作。
Creak_KeyTask();
9、显示屏12864初始化,接口为并口通讯方式,在写数据之前要记得清屏,设置功能、显示、光标设置等参数设置,设置参数完成之后,显示学校校名以及欢迎使用签到机系统页面。
Creak_LCDTask();
10、射频模块天线设置为关闭状态,并启动射频模块轮训任务,任务间隔时间为500ms
Creak_CardTask();
11、射频模块轮训处
理任务,主要负责射频模块卡片读写操作。并查询刷到的卡号所对应的学生信息。
Card_Task();
12、按键任务轮训处理,主要负责检查三个按键是否被按下,如果有按键发生,并做相应的处理操作,按键主要触发系统查询签到迟到的卡片有哪些。
Key_TASK();
13、串口任务处理,主要是处理接受下来上位机软件发过来的数据之后,再来判断是什么命令,系统再做相应处理(如:更新系统时间、录入和修改、删除卡号操作)。
UsartTask();
14、显示屏任务处理,主要是用来显示当前系统状态,例如系统刷卡界面包含日历时间等信息,更新时间成功界面,以及系统查询迟到界面等等。
LCD_TASK();
2.3上位机软件
1、界面如下:
图2.2 上位机界面
2、串口设置如下:
图2.3串口设置图
切记波特率一定要跟下位机串口设置一致。
串口号可以在设备管理器中查询得到,如图2.4所示
图2.4串口查询图
3、录入和修改卡号和学号操作:
图2.5修改界面图
输入姓名和学号之后,点击录入和修改即可。
4、删除学号操作,如图2.6所示
图2.6删除学号图
输入相应要删除的卡号,点击删除即可。
5、更新系统时间操作,如图2.7所示
图2.7系统时间
点击更新时间,下位机时间立即更新为PC端系统时间。
2.3.1上位机与下位机通讯协议如下:
帧头 数据
一个字节 N个字节
a)更新系统时间
帧头 数据
0Xe0 N个字节
b)录入和修改
帧头 数据
0Xe1 N个字节
c)删除卡号:
帧头 数据
0Xe3 N个字节
图2.8通讯协议图
2.4程序下载方法:
首先须装好USB驱动,然后选择对应的MCU型号”STC89C58RC”,打开程序要烧录的HEX文件,选择与您计算机对应的端口,即COM口,先关闭开发板电源,即开关弹起,当点击“下载”时提示请给MCU上电时,您再给开发板供电,即开关按下,烧写过程可见进度条。
图2.9程序烧录运行图
2.5整体分析
这次毕业设计从软件设计到硬件制作过程中,都是以AT89C52单片机为核心设计的,通过芯片的识别来完成学生签到的过程。将白芯片放入识别区域,这时在电脑上就可以设定学生的信息,学号,当白芯片录入进信息后,在指定的识别区域刷卡,从而完成学生签到的。当需要修改学生的信息时,将芯片放入识别区域,用做好的上位机软件来更新学生的信息,删除或者修改学生的信息。此外还可以通过按键装置,来查询迟到的学生。
3. 系统运用的各个模块
3.1 单片机AT89C52外围晶振电路
每一个单片机都含有着晶振,它的全部名称为晶体
震荡器,晶体振荡器的作用非常大,因为它不仅仅结合了单片机内部的电路,从而让单片机产生了必要的时钟频率,一直不停的工作,单片机所发出的所有指令的执行都是在晶体振荡器上建立起来的,它提供的时钟频率越高,则单片机运行速度就越快。该课程设计晶振为11.0592MHz,如图3.1为晶振电路。
3.2单片机AT89C52外围复位电路
复位的作用是使中央处理器CPU以及其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。AT89C52单片机的复位是靠外部电路实现的,信号由RESET(RST)引脚输入,低电平无效,在振荡器工作时,只要RST引脚高电平是两个周期,就会复位,复位后,PC程序计数器的内容为0000H,片内RAM中的内容不变。
本设计采用的复位电路是手动开关复位,图3.2为手动复位电路。
复位电路的第一功能是上电复位。VCC上电时,C充电,在10K电阻上出现电压,使得单片机复位;在一定时间之后,C充满,电阻上的电流变为0,同时电压也变为0,从而让单片机进入工作状态。
复位电路的第二功能是手动复位电路,在有按键按下时,由于电容充电产生一点时间的高电平,就可以使单片机复位。这种情况在工作时间下,拨下S时,C放电。松开S时,C充电,同时电阻出现电压,然后单片机复位。在一点时间后,单片机进入工作模式。
3.3射频采集电路
RC522射频芯片主要特性:
1、模拟电路可以让卡应答的解调和解码。
2、支持 IC 和 ISO14443A1 4 部分。
3、10cm内为有效范围。
4、天线上的缓冲输出驱动器使用最少数的元件连接的。
5、内部非易失性密匙存储器必须加密并且保护。
6、微处理器接口在并行是由内部地址锁存和 IRQ 线组成的。
7、中断处理非常灵活。
8、芯片采用自主检验接口类型。
9、方便的发送64 字节和 FIFO 缓冲区的接收。
10、消耗功率少的硬件复位。
11、软件可以控制掉电模式。
12、定时器是可以编程。
13、序列号是唯一的。
14、启动配置是用户可编程的。
15、位和字节是用定位帧来定位的。
16、发送器部分与数字模拟分别使用自独立的电源输入脚。
17、13.56MHz 石英晶体与内部振荡器缓冲链接从而产生 低相位抖动。
18、滤波时钟频率。
19、在短距离的应用,天线驱动器必须为3.3V才可操作。
3.4电源电路
电源电路选择最常用的USB口供电,可以通过USB线插到PC的USB口供电也可以插到手机适配器上面,因为板子的供电电压刚好是5V,也不需要额外的转换电压。上面的发光二极管用于指示电源是否供电。开关是用来控制整个板子的用电开与关。
3.5报警电路
由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口是无法直接驱动蜂鸣器的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。本电路使用了I/O 口定时翻转电平驱动蜂鸣器方式。
该报警器主要用来刷卡指示和打卡异常指示。
3.6液晶显示电路
12864汉字图形点阵液晶显示模块,可显示汉字及图形,显示内容与技术参数:
电源:VDD 3.3V到+5V(内部含有升压电路并且不需要负压);
显示内容:128× 64
显示颜色:绿色黄色
LCD类型:STN
和MCU接口:8位或3位串行/4位并行
128X64液晶引脚说明:
引脚号 引脚名称 方向 功能说明
1 VSS - 电源地
2 VDD - 电源的正端
3 V0 - LCD的输入为驱动电压
4 RS(CS) H/L 串行的片选信号
5 R/W(SID) H/L 并行读写信号;数据口串行
6 E(CLK) H/L 使能信号并行;同步时钟串行
7 DB0 H/L 数据0
8 DB1 H/L 数据1
9 DB2 H/L 数据2
10 DB3 H/L 数据3
11 DB4 H/L 数据4
12 DB5 H/L 数据5
13 DB6 H/L 数据6
14 DB7 H/L 数据7
15 PSB H/L 接口选择:H-并行;L-串行
16 NC 空脚
17 /RET H/L 硬件复位 (高电平无效)
18 NC 空脚
19 LED_A (LED+5V) 背光源的正极
20 LED_K (LED-OV) 背光源的负极
4.硬件与软件的检测与调试
4.1硬件电路调试
仔细检查所接电路,按照硬件原理图接线,理论上是能实现的,如果液晶12864不显示,则应该检查液晶屏线路是否正确,或是因为单片机没有工作,还是晶振没有起振。如果不能正常刷卡,检测一下RC522电路部分是否连接正确,看看RC522周围电路是否存在虚焊问题。蜂鸣器是低电平有效。如果能注意这些问题,电路基本不会出错。
4.2软件调试
如果硬件电路检查后,没有问题却实现不了设计要求,则可能是软件编程的问题,首先应检查初始化程序,然后是读刷卡程序,显示程序,以及日历程序,蜂鸣器程序对这些分段程序,要注意逻辑顺序,调用关系,以及涉及到了标号,有时会因为一个标号而影响程序的执行,除此之外,还要熟悉各指令的用法,以免出错。还有一个容易忽略的问题就是,源程序生成的代码是否烧入到单片机中,如果这一过程出错,那不能实现设计要求也是情理之中的事。本人在设计的时候在PROTUSE仿真软件进行调试,通过此keil软件进行调试可以很方便的观察单片机内部各个寄存器及内部存储器变化情况,以方便进行调试。
附录:硬件图