基于ic卡考勤终端系统的设计与实现内容摘要:
令 类 型 SEQ/CmdType 命 令 /状 态 Cmd/Status 信 息 长度 Length 信息 Info 校 验 和 BCC 帧 结 束符 ETX 1byte 1byte 1byte 1byte N bytes 1byte 1byte 网络层字段说明如表 43 所示: 表 43 数 据 帧 各 字 段 说 明表 字段 长度 说明 补充 FrameLen 1 数 据 帧 的 长 度 , 包 含 它 自 己。 SEQ/ CmdType 1 Bit 74: 该 包 序 号 ,从 0 到 15 循 环。 可 以 用 来 作 为 通 信 间的 错 误 检查 , 从 机 接 收 到 主 机 发 来 的 信 息 , 在 应 答 信 息 中 发 出一 个同 样的 SEQ 信息 , 主 机 可 以 通 过 此 信 息 检 查 是 否 发 生 的 “包 丢失 ”的 错 误。 第 一 个 包 的 SEQ 可 为 任 意 值。 该 字 段 主 机 发 送 和 接 收 的 应 该 相 同 Bit 30: 命 令 类 型。 0x00: 协 议 控 制 类 命 令 , 如 设 置 地 址 、 读 产 品 序 号 等 0x01:设备控制类 命 令,如读写 IO、控制蜂鸣器、读写寄存 器等 0x02: ISO14443A 命令 其它 值 保 留。 从 机 返 回 相同的 CmdType Cmd/ Status 1 主 机 ——从 机 : 命 令 从 机 ——主 机 : 状 态 Length 1 该 帧 所 带 数 据 信 息 长度 若 模 块 返 回 状 态不为 0,则 Length=0。 Info Length 数 据 信息 基于单片机的智能停车场停车位管理系统的设计与实现 16 BCC 1 校 验 和。 从 FrameLen 开始到 Info 的最后一 字 节 异 或 取 反 , C 语 言 程 序 描 述 如 下 :( SerBfr 为 一 帧 数 据 缓 冲 区 首 址 ) BCC = 0。 for(i=0。 i(SerBfr[0]2)。 i++) { BCC ^= SerBfr[i]。 } SerBfr[SerBfr[0]2] = ~BCC。 ETX 1 0x03: “End of Text”标 准 的 控 制 字 符 , 是 一 个 帧 的 结 束 标 志 数据帧接收规则: 一帧的结束一定是 ETX,但接收到 0x03 则不一定是帧结束; 帧长必须不小于 6 字节,最大不能超过 54 字节,且帧长必须等于信息长度加 6; 无论是主机还是从机所接收的数据必须符合以上规则,否则从机不会执行任何命令,也不 会有任何错误响应,主机也必须丢弃这帧数据,以找出错误原因,从而纠正错误。 (三)串口通信原理 随着计算机技术的发展,串口通信在诸多领域得到了广泛的应用,计算机可以通过串口来获得设备的各种数据。 然后利用计算机强大的功能进行处理,再根据处理的结果发送数据来控制设备。 在串口的几种编程方式中,利用嵌入式汇编语言编写计算机的串口通信程序需要员对低级语言的了解和掌握: windows api 串 口编程虽然实现了设备无关性,但是编程过于繁琐: Microsoft 公司提供了 MSComm 控件,使得开发串口程序变得十分简单。 Visual Basic 是近年来发展最快的一种计算机语言,其简洁和实用性已经受到众多计算机用户和程序员的欢迎,尤其是其 版本,功能强大且易于掌握,是一种优秀的可视化开发环境,在 VB 应用程序中调用 MSComm 控件也十分容易,由于 VB 的通用控件 MSComm友好、功能强大,提供了功能完善的串口数据的发送和接收功能,同时编程速度快是众人皆知的,所以在数据通讯量不是很大时,在单片机通讯领 域广泛地使用 VB 的MSComm通信控件来开发上层通讯软件。 列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如 Modern),还可以发送命令、进行数据交换以及监视和响应。 在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工的、事件驱动 的 、高效实用的通信程序。 下面就对其通信控件作 MSComm 进行一定的说明。 一般用 VB开发串行通信程序有两种方法:一是利用 Windows 的通信 API 函数;另一种是采用 VB标准控件 MSComm 来实现。 利用 API 编写串口通信程序较为复杂,需要掌握大量通信知识,其优点是可实现的功能更丰富、应用面更广泛,更适合于编写较为复杂的低层次通信程序。 MSComm 控件的通信功能实现,实际上是调用了 API 函数,而 API函数是由 Comm。 Dv解释并传给设备驱动程序去执行的,对于 VB 程序开发者只需知道MSComm 控件的属性和事件的用法技可以实现串口的操作。 由于 MSComm 控件不属于 工具箱中的最基本的控件,要调用该控件,首先要在 VB环境中添加该部件,即在菜单“工程”的选项“部件”中控件列表中添选择 Microsoft Comm 即可,通过如上步骤,工具栏中就会出现我们需要的通信控件 MSComm,选择该控件,再放置到窗体上就能在程序中方便的使用了。 MSComm 控件 MSComm 控件通过串口端口传输和接受数据,为应用程序提供串行通信功能。 基于单片机的智能停车场停车位管理系统的设计与实现 17 MSComm 控件提供下列两种处理通讯的方式: 事件驱动通讯 这是处理串行端口交互作用的一种非常有效的方法。 在许多情况下,在事件发生时需要得到通知。 例如:在 Camier Detect( CD)或 Request To Send( RTS) 线上一个字符到达或一个变化发生时,捕获并处理 这些通信事件。 OnComm 事件还可以检查和处理通讯错误。 如图 : 图 (四)编程软件介绍 KEIL C51标准 C编译器为 8051微控制器的软件开发提供了 C语言环境 ,,本站特地制作了一个相对简单的教程。 此软件能 嵌入汇编语言保留了汇编代码高效 ,快速的特点。 KEIL C51编译器的功能不断增强 ,使你可以更加贴近 CPU本身 ,及其它的衍生产品,其效率已经达到了相当搞的程度。 C51 已被完全集成到 uVision2 的集成开发环境中 ,这个集成开发环境包含:编译器 ,汇编器 ,实时操作系统 ,项目管理器 ,调试器。 uVision2 IDE 可为它们提供单一而灵活的开发环境。 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编 ,PLM 语言和 C 语言的程序设计,界面友好,易学易用。 如图 界面: 基于单片机的智能停车场停车位管理系统的设计与实现 18 图 keil打开界面 工程新建后保存即可在打开界面进行编程 ,如图。 图 keil打开界面 基于 IC 卡考勤终端系统的设计与实现 19 ( 四 ) 软件程序各模块函数介绍 延时函数 : 函数中 含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振 12M,精确延时请使用汇编 void DelayMs(unsigned char t) { while(t) { //大致延时 1mS DelayUs2x(245)。 DelayUs2x(245)。 } } 信息采集 函数: void InitUART (void) 信息通过串口读取 { SCON = 0x50。 // SCON: 模式 1, 8bit UART, 使能接收 TMOD |= 0x20。 // TMOD: timer 1, mode 2, 8bit 重装 TH1 = 0xFD。 // TH1: 重装值 9600 波特率 晶振 TR1 = 1。 // TR1: timer 1 打开 EA = 1。 //打开总中断 ES = 1。 //打开串口中断 } 液晶屏初始化 函数: 液晶屏初始化 void Init_ST7920() { DelayMs(40)。 //大于 40MS 的延时程序 //PSB=1。 //设置为 8BIT 并口工作模式 DelayMs(1)。 //延时 RES=0。 //复位 基于 IC 卡考勤终端系统的设计与实现 20 DelayMs(1)。 //延时 RES=1。 //复位置高 DelayMs(10)。 Write_Cmd(0x30)。 //选择基本指令集 DelayUs2x(50)。 //延时大于 100us Write_Cmd(0x30)。 //选择 8bit 数据流 DelayUs2x(20)。 //延时大于 37us Write_Cmd(0x0c)。 //开显示 (无游标、不反白 ) DelayUs2x(50)。 //延时大于 100us Write_Cmd(0x01)。 //清除显示,并且设定地址指针为 00H DelayMs(15)。 //延时大于 10ms Write_Cmd(0x06)。 //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加 1 位移动 DelayUs2x(50)。 //延时大于 100us } 实时时钟时间读取函数 void readDS1302() { miao[0]= (ReadDS_S(0x81)amp。 0x70)4。 miao[1]= ReadDS_S(0x81)amp。 0x0F。 fen[0]= (ReadDS_S(0x83)amp。 0x70)4。 fen[1]= ReadDS_S(0x83)amp。 0x0F。 shi[0]= (ReadDS_S(0x85)amp。 0x70)4。 shi[1]= ReadDS_S(0x85)amp。 0x0F。 ri[0]= (ReadDS_S(0x87)amp。 0x70)4。 ri[1]= ReadDS_S(0x87)amp。 0x0F。 yue[0]= (ReadDS_S(0x89)amp。 0x70)4。 yue[1]= ReadDS_S(0x89)amp。 0x0F。 nian[2]= (ReadDS_S(0x8d)amp。 0xf0)4。 nian[3]= ReadDS_S(0x8d)amp。 0x0F。 zhou= ReadDS_S(0x8b)amp。 0x0F。 } 基于 IC 卡考勤终端系统的设计与实现 21 主程序 void main (void) { unsigned char i。 InitUART()。 DS_ini()。 Init_ST7920()。 //初始化 LCD_PutString(0,2, 欢迎您使用 )。 LCD_PutString(0,3, IC 考勤系统 )。 //SendStr(UART test,技术论坛: 请在发送区输入任意信息)。 for(i=0。 i10。 i++) DelayMs(200)。 ClrScreen()。 ES = 1。 //打开串口中断 LCD_PutString(0,2, 请刷卡 ......)。 while (1) 基于 IC 卡考勤终端系统的设计与实现 22 五、调试与仿真 经过较长时间的制作调试,搭接了一个简单的实验模型实现了设计的基本要求下图 给出了调试结果图。 上电显示欢迎界面 刷卡等待 信息采集 基于 IC 卡考勤终端系统的设计与实现 23。基于ic卡考勤终端系统的设计与实现
相关推荐
Info)。 } 杨教授 大学堂 精心创作的优秀程序员 职业提升必读系列资料 杨教授 大学堂 ,版权所有,盗版必究。 7/13 页 public ActionForward doNextPageInLoginUserBBSInfo(ActionMapping mapping, ActionForm form,HttpServletRequest request,
权所有,盗版必究。 10/19 页 (currentSession)。 } return currentSession。 } ( 4)修改 UserManageDAOHibernateImple 类中的 deleteOneUserInfo 方法 public boolean deleteOneUserInfo(String registerUserID) throws
口拉到高电位,这时可用作输入口。 P3 做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。 RST( 9 引脚) : 复位输入。 当输入连续两个机器周期以上高电平时为有效,用来完成单片机的复位初始化操作。 看门狗计时完成后, RST 引脚输出 96 个 晶振周期的高电平。 特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能无效。 DISRTO
稻种植中会产生沼气 马尼拉专电大米是亚洲人的主食之一,水稻也是亚洲各国主要的农作物,不过,最近菲律宾的科学家研究发现,这种农作物会对环境造成威胁。 据菲律宾国际水稻研究学会的气候变化专家赖纳。 瓦斯曼介绍,水稻在生长季需要大量的水,这一特性与其他农作物的生长是完全不一样的。 对于其他农作物来说,人畜粪便、秸秆和污水等各种有机物质的腐烂会产生二氧化碳,但是在水稻田里,由于水阻断了土壤里氧气的来源
, 内部的程序自动从头 开始执行。 一般有上电自动复位和外部按键手动复位,单片机在时钟电路工作以后,在 RESET 端持续给出 2 个机器周期的高电平时就可以完成复位操作。 本设计采用的是外部手动按键洛阳理工学院毕业设计 11 复位电路,需要接上上拉电阻来 提高输出高电平的值。 时钟电路好比单片机的心脏,它控制着单片机的工作节奏。 时钟电路就是振荡电路,是向单片机提供一个正弦波信号作为基准