基于单片机的电子门禁系统设计毕业设计论文(c语言程序)(编辑修改稿)内容摘要:
锁打开指示灯点亮,延时一段时间后继电器再次动作将门锁锁闭指示灯熄灭;密码错误则洛阳理工学院毕 业设计(论文) 12 蜂鸣器报警,延时一段时间后蜂鸣器 自动 停止报警 ,若再按“确认 \返回 键”则可以手动停止报警。 单片机 资源分配 软、硬件设计是设计中不可缺少的,为了满足功能和指标的要求,资源分配如下: 1.晶振采用 ; 2. 单片机 资源 分配 如 表 2 21 示: 表 21 单片机资源分配表 ( 1) LCD 显示 矩阵键盘 RS RW E 表 22 单片机资源分配表( 2) 锁 蜂鸣器 LED 读卡 按键中断 0 开 0 响 0 亮 1 不开 1 不 响 1 不亮 计算:因为射频卡的读卡头选用 EM4000 型,读卡频率是 ,所以最小系统晶振,必须用 才能读卡。 ( 1) 定时控制字确定:选用定时器 T1,方式 2,所以 TMOD 是 20H。 ( 2) 计算初值 X = 256 ( foxc*( SMOD+1)) /384*波特率 = 256 ( *106 *( 0+1)) /384*9600 = 253 TH1= 0FDH TL1= 0FDH 最小系统的设计 洛阳理工学院毕 业设计(论文) 13 门禁系统数控部分采 用 89C52 单片机作为控制核心,其内部组成包括:一个 8 位的微处理器 CPU 及片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接;片内数据存储器 8KB RAM 低 128 字节,存放读 /写数据;高 128 字节被特殊功能寄存器占用;片内程序存储器 ROM;四个 8 位并行 I/O(输入 /输出)接口 P3— P0,每个口可以用作输入,也可以用作输出;两个定时 /计数器,每个定时 /计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制;五个中断源的中断控制系统;一个全双工 UART(通用异步接收发送器)的串行 I/O 口。 在 89C52 单片机的基础上,外围增加蜂鸣器控制电路、开门指示灯电路、电控锁控制电路以及 1602 显示电路等,构成了门禁系统的控制电路。 其原理图如 图 23 示 : 图 23 门禁系统控制原理图 洛阳理工学院毕 业设计(论文) 14 第 3 章 系统 软件设计 Keil 简介 KeilC51 系统概述 单片机开发中除必要的硬件外,同样离不开软件,汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。 KeilC51 是美国 KeilSoftware公司出品的 51 系列兼容单片机 C 语言软件开发系统 [9],与汇编相比, C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 用过汇编语言后再使用 C 来开发,体会更加深刻。 KeilC51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 KeilC51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 下面详细介绍 KeilC51 开发系统各 部分功能和使用。 C51 工具包的整体结构,其中 uVision 是 C51forWindows 的集成开发环境 (IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。 开发人员可用 IDE 本身或其它编辑器编辑 C 或汇编源文件。 然后分别由 C51及 A51 编译器编译生成目标文件 (.OBJ)。 目标文件可由 LIB51 创建生成库文件,也可以与库文件一起经 L51 连接定位生成绝对目标文件 (.ABS)。 ABS文件由 OH51 转换成标准的 Hex 文件,以供调试器 dScope51 或 tScope51使用进行源代码级调试,也可由仿真器使用直接 对目标板进行调试,也可以直接写入程序存贮器如 EPROM 中。 Keil 软件的 使用 使用 Keil 的软件工具时,项目的开发流程基本上与使用其他软件开发项目一样。 ( 1) 打开 Keil 软件 ,如图 31 示: 洛阳理工学院毕 业设计(论文) 15 图 31 初始界面 ( 2) 创建一个项目。 点击 Project 菜单,选择弹出的下拉式菜单中的 New Project,如图 32 示: 图 32 新建工程 ( 3) 在 “ 文件名 ” 中输入 C 程序项目名称 “电子门禁”, “ 保存 ”后的文件扩展名为 uvproj,这是 KEIL uVision4 项目文件扩展名。 ( 4) 从器件数据库中选择 目标芯片, 这里选择要用的 Ateml 公司的 AT89C52。 如图 33 示: 洛阳理工学院毕 业设计(论文) 16 图 33 选择芯片 ( 5) 配置工具软件的设置 ,如图 34 图 34 软件设置 ( 6) 完成上面步骤后,可以进行程序的编写了。 ( 7) 点击新建文件的快捷按钮,在开发环境下出现一个新的文字编辑窗口。 用 C 创建源程序。 ( 8) 编辑完成后,保存新建的程序,也可以用菜单 File- Save 或快捷键 Ctrl+S 进行保存。 ( 9) 在屏幕左边的 Source Group1 文件夹图标上右击弹出菜单,在洛阳理工学院毕 业设计(论文) 17 这里可以做在项目中增加减少文件等操作。 点击 Add File to Group 39。 Source Group 139。 弹出文件窗口,选择刚刚保存的文件,按 ADD 按钮,关闭文件窗,程序文件已加到项目中了。 这时在 Source Group1 文件夹图标左边出现了一个小 +号说明,文件组中有了文件,点击它可以展开查看。 如图 35 示: 图 35 添加文件 ( 10) C 程序文件已加到了项目中,下面 开始编译运行。 图中第 3 都是编译按钮, 1 是用于编译单个文件; 2 是编译当前项目,如果先前编译 过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的; 3 是重新编译,每点击一次均会再次编 译链接一次,不管程序是否有改动。 在 3 右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。 如图 36 示: 洛阳理工学院毕 业设计(论文) 18 图 36 编译运行 下图中有一个小放大镜的按钮,这就是开启 \ 关闭调试模式的按钮,它也存在于菜单 Debug- Start\Stop Debug Session,快捷键为 Ctrl+F5。 进入调试模式,软件窗口样式大致如图 37 示: 图 37 调试按钮 ( 11) 进入调试模式,软件窗口样式如图 38 示: 图 38 调试 ( 12) 图中按钮 1 为运行,当程序处于停止状态时才有效。 2 为停止,程序处 于运行状态时才有效。 3 是复位,模拟芯片的复洛阳理工学院毕 业设计(论文) 19 位,程序回到最开头处执行。 如图 39 示: 图 39 运行按钮 主程序分析 流程图 主程序流程图如图 310 示: 图 310 主程序流程图 程序清单: include include include 洛阳理工学院毕 业设计(论文) 20 include include include include include include /***********************主程序 *************************/ void main() { LED = 0。 //LED 亮 BUZZER = 0。 //蜂鸣器响 EA = 1。 //开所有中断 INT0_init()。 T1_init()。 lcd_init()。 P1 = 0x0f。 //键盘初始化 delay(100)。 LED = 1。 //熄灭 LED BUZZER=1。 //关 蜂鸣器 while(1) { display()。 delay(50)。 } } 子程序分析 洛阳理工学院毕 业设计(论文) 21 显示 模块 程序 分析 1. 显示程序 流程图 如图 311 示: 图 311 显示程序流程图 清单 : /*************************************************************** 函数功能 :与最近一次 lcd 显示界面比较,以此作是否清屏处理 入口参数 : 出口参数 : ***************************************************************/ void judge_clear_lcd() { if( N_DISPLAY != N_DISPLAY_HISTORY ) { lcd_wcmd(0x01)。 //清屏 洛阳理工学院毕 业设计(论文) 22 } } /*************************************************************** 函数功能 :lcd 显示第 0 幕 入口参数 : 出口参数 : ***************************************************************/ void display0() { uchar i。 judge_clear_lcd()。 //是否清屏处理 lcd_pos(0x00)。 //设置显示位置 delay1(1)。 for(i=0。 wel[i]!=39。 \039。 i++) { lcd_wdat(wel[i])。 } N_DISPLAY_HISTORY=0。 //记录 历史显示界面编号 } /*************************************************************** 函数功能 :lcd 显示第 1 幕 入口参数 : 出口参数 : ***************************************************************/ void display1() { uchar i。 judge_clear_lcd()。 //是否清屏处理 lcd_pos(0x00)。 //设置显示位置 delay1(1)。 洛阳理工学院毕 业设计(论文) 23 for(i=0。 _in[i] !=39。 \039。 i++) //显示 Come in please ! { lcd_wdat(_in[i])。 } lcd_pos(0x40)。 //设置显示位置 delay1(1)。 for(i=0。 push[i] !=39。 \039。 i++) //显示 Push the door ! { lcd_wdat(push[i])。 } N_DISPLAY_HISTORY=1。 //记录 历史显示界面编号 } /*************************************************************** 函数功能 :lcd 显示第 2 幕 入口参数 : 出口参数 : ***************************************************************/ void display2() { uchar i。 judge_clear_lcd()。 //是否清屏处理 lcd_pos(0x00)。 //设置显示位置 delay1(1)。 for(i=0。 pull[i]!=39。 \039。 i++) //显示 Pull the door ! { lcd_wdat(pull[i])。 } N_DISPLAY_HISTORY=2。 //记录 历史显示界面编号 } /*************************************************************** 洛阳理工学院毕 业设计(论文) 24 函数功能 :lcd 显示第 3 幕 入口参数 : 出口参数 : ***************************************************************/ void display3() { uchar。基于单片机的电子门禁系统设计毕业设计论文(c语言程序)(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。