单片机原理与接口技术
课程设计
题目:电子密码锁设计
院 系:工学院电气与电子工程系
烟台南山学院教务处
二〇一七年九月
电子密码锁设计
摘 要
随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统机械锁构造简单,被撬事件屡见不鲜;电子锁其保密性高,使用灵活性好,
烟台南山学院单片机原理与接口技术课程设计 第Ⅰ页
安全系数高,受到了广大用户的青睐。
本设计以单片机STCC52作为密码锁监控装置的检测和控制核心,分为主机控制和从机执行机构。实现钥匙信息在主机上的初步认证注册、密码信息的加密、钥匙丢失报废等功能。根据51单片机之间的串行通信原理,这便于对密码信息的随机加密和保护。而且采用键盘输入的电子密码锁有较高的优势。采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。
关键词 单片机密码锁单片机设计电子锁。
烟台南山学院单片机原理与接口技术课程设计
目录
第1章绪论 ........................................................................................................................... 1 1.1 项目设计及背景意义 ................................................................................................ 1 1.2 设计目的 .................................................................................................................... 2 第2章 设计方案比较 ....................................................................................................... 3 2.1 系统方案的提出 ........................................................................................................ 3 2.2 方案比较及确定 ........................................................................................................ 4 第3章 硬件电路设计 ....................................................................................................... 5 3.1 STCC52最小系统设计 ......................................................................................... 5 3.1.1 时钟电路设计 .................................................................................................... 5 3.1.2 复位电路设计 .................................................................................................... 6 3.2 键盘、显示电路硬件设计 ........................................................................................ 6 3.2.1 键盘电路硬件设计 ............................................................................................ 6 3.2.2 显示电路硬件设计 ............................................................................................ 7 3.3 继电器驱动电路及报警电路设计 .......................................................................... 8 3.3.1 固态继电器简介 ................................................................................................ 8 3.3.2固态继电器驱动电路设计 ................................................................................. 10 3.3.3 报警提示电路 .................................................................................................. 10 第4章 软件设计 ............................................................................................................. 11 4.1 主程序模块 .............................................................................................................. 11 4.2 密码比较判断模块 .................................................................................................. 11 4.3 键盘扫描模块 .......................................................................................................... 11 第5章 系统调试 ............................................................................................................. 13 结论 ..................................................................................................................................... 14 致谢 ..................................................................................................................................... 15 参考文献 ............................................................................................................................. 16 附录 ..................................................................................................................................... 17
烟台南山学院单片机原理与接口技术课程设计 第 1 页
第1章
绪论
1.1 项目设计及背景意义
在单片机向着大容量、多功能、高性能、高速度、低电压、低功耗及外围电路内装化的方向发展的时代,选择一种性价比最优的芯片显得尤为重要。
在本次课程设计中,程序编写可选汇编和C语言。而汇编效率高,对硬件的可操控性更强,体积小,但不易维护,可移植性很差;C语言效率比较低,硬件可操控性比较差,目标代码体积大,但容易维护,可移植性很好。该系统用C语言编写程序,与汇编语言相比具有更好的移植性和可读性,便于修改和增减功能,故本次课程设计我选择了C语言。
通过对此次设计的理解和掌握,使我受益很多:
1、熟悉掌握单片机的结构及工作原理,锻炼设计、制作和调试单片机应用系统的软硬件开发的过程和方法。
2、通过MCS-51单片机应用系统的设计与编程应用,将理论知识和实际应用结合起来,加深对电子电路、电子元器件、印刷电路板等方面的知识,提高在软件编程、排错调试、焊接技术、相关设备的使用技能。掌握单片机的接口及外围设备的特性,使用和控制方法。为以后设计和实现单片机应用系统打下良好的基础。
3、通过密码锁的设计将所学知识融会贯通,锻炼设计、制作和调试单片机应用系统的能力,领会单片机应用系统的软件、硬件调试方法和习题研制开发过程,为进一步的动手实践活动打下一定的基础。
4、这次课程设计时我翻阅了很多资料例如张毅刚主编的《单片机原理及应用》、高峰编的《单片微型计算机原理与接口技术》等书籍,还从网上找了STCC52、74LS244以及74LS06的资料。让我在学习开发单片机应用系统时对芯片功能的学习有了更新的理解,这不仅需要电子技术方面要有数字电路和模拟电路等方面的理论基础,还需要英语基础。
烟台南山学院单片机原理与接口技术课程设计
第2页
1.2 设计目的
单片机,亦称单片微电脑或单片微型计算机。它是把处理器(CPU )、随机存取存储器(RAM )、只读存储器(ROM )、输入/输出端口 (I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。本设计从经济实用的角度出发,采用A TC51单机,研制了一款具有防盗自动报警功能的电子密码锁。该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,具有一定的推广价值。
(1)系统初始设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。 (2)密码由用户自己设定,在开锁状态下,用户可自行修改密码。长度可任意指定。
(3)具有自动报警功能,由蜂鸣器发出报警声。
(4)密码输入错误3次,则报警。系统工作时,用户通过按键输入密码,单片机将输入密码与设定密码进行比较,若密码正确,则发出开锁信号,将门打开,系统不报警;若密码不正确,则有相应的指示灯闪动,并要求重新输入密码,重新输入密码的次数不能超过3次,若3次输入的密码都不正确,则发出报警信号。 、
烟台南山学院单片机原理与接口技术课程设计
第3页
第2章 设计方案比较
2.1 系统方案的提出
本次课程设计的密码锁电路主要由四个模块组成:键盘输入模块、数据处理模块、显示控制模块,继电器驱动模块和蜂鸣器报警模块。
方案一:以单片机为电子密码锁系统核心,使用4*4矩阵键盘作为数据输入方式,驱动4位数码管显示器提示程序运行过程和开锁的步骤,利用继电器及蜂鸣器模拟电子门锁作出是否开门以及报警等反应。图2.1为单片机控制密码锁的系统原理框图。
电源模块 矩阵 键盘 控制 单片机 四位数码管 继电器 控制电路 时钟及复位电路 图2.1 单片机控制密码锁的系统原理框图
蜂鸣器提示电路 方案二:以74LS112双JK触发器构成的数字逻辑电路控制方案,如图2.2。
烟台南山学院单片机原理与接口技术课程设计
第4页
输入按扭开关组5秒定时电路 20秒定时电路 声光指示电路 输入锁存电路 开锁控制电路 密码存储电路 图2.2 数字逻辑控制方案电子密码锁原理框图
机械动作构件 2.2 方案比较及确定
由于利用单片机灵活的编程设计和强大的I/O端口,及其控制的准确性,不但能实现基本的密码锁功能,还可以增添掉电存储、声光提示等功能,故选用方案一。
CPU的选择
STCC52系列单片机,高速、低功耗、新增在系统/在应用可编程(ISP,IAP)功能,使不具有E2PROM的单片机具有了E2PROM的功能,可以在线对现场历史数据的存储功能,适用于一些需经常改变数据的应用产品(如计费器、门禁系统等)及需远距离改变设备参数的产品(遥控设备等)。采用STCC52单片机设计的电子密码锁,利用内部E2PROM资源,不需要外接程序存储器就能完成修改密码等多种功能,并且保密性高、成本低、简单易行,符合住宅、部门办全要求。
ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离,是一个强大易用的功能。具有双工UART串行通道。内部集成看门狗计时器,不再需要像ATC51那样外接看门狗计时器单元电路
键盘电路采用矩阵式键盘,显示电路采用四位数码管动态显示方式,动态显示相对于静态显示有占用I/O口资源少的特点,恰好适合于本系统。方案中没有采用键盘、显示接口芯片8279实现键盘、显示接口。由于本次课程设计所使用的键盘数量、显示的方式及单片机的I/O口线使用情况等,采用前一种方式就足以能完成课程设计的要求,不必要多用一个芯片。根据本次课程设计的实际情况,兼顾经济性、使用性、简单易行、操作简单等多方面因素,本次课程设计采用方案一来完成。
烟台南山学院单片机原理与接口技术课程设计
第5页
第3章 硬件电路设计
本次课程设计的密码锁电路主要由四个模块组成:键盘输入模块、数据处理模块、显示控制模块,继电器驱动模块和蜂鸣器报警模块。通过单片机送给开锁执行机构,电路驱动继电器吸合,从而达到开锁的目的。如图3.3所示,为密码锁开锁电路原理图。
当用户输入的密码正确时,单片机便输出开门信号,送到继电器驱动电路,然后驱动继电器常开触点闭合,达到开门的目的。本次设计中,继电器选用固态继电器,信息通过数码管显示,并利用蜂鸣器和发光二极管声光指示。其中,绿发光二极管亮,表示开锁;否则,红发光二极管亮,表示密码输入错误并开启报警电路。
锁定 STCC52 单片机 密码 正确 是 开锁驱动电路 否 开锁
图3.3密码锁开锁电路原理图
3.1 STCC52最小系统设计
单片机最小系统包括CPU、时钟电路和复位电路等三部分。下面则分别介绍这三部分的选取。
3.1.1 时钟电路设计
时钟电路用于产生单片机工作时所必需的时钟控制信号,常用的时钟电路有内部时钟方式和外部时钟方式。内部时钟方式电路外接两个电容和一个晶振,根据振荡频率要求的不同选用不同阻值的电容和晶振。时钟电路中的晶振震荡频率范围通常是1.2MHz~12MHz,ATS51常选择6MHz或12MHz的石英晶体,为消除误差,得到准确的波特率,本设计选择震荡频率为11.0592MHz的石英晶,时钟电路如图3.4所示。
烟台南山学院单片机原理与接口技术课程设计
第6页
图3.4 时钟电路
3.1.2 复位电路设计
复位是单片机的初始化操作,只需在单片机的复位引脚加上大于2个机器周期的高电平就可使单片机复位,当程序运行出错或操作进入死循环状态可通过复位重新启动程序。MCS-51的复位是由外部的复位电路来实现的,STCC52也不例外,复位电路通常采用上电自动复位和按钮复位两种方式,为方便复位操作,本文采用按键电平复位,电路如图5所示。其中C取10uF,R2取10KΩ,复位电路如图3.5所示。
图3.5 复位电路
3.2 键盘、显示电路硬件设计 3.2.1 键盘电路硬件设计
键盘是系统中的手动控制部分,所以键盘的设计就显得尤为的重要。每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要M条行线和N条列线,即可组成具有M×N个按键的键盘。由于本设计中要求使用16个按键输入,为减少键盘与单片机接口时所占用的I/O线的数目,
烟台南山学院单片机原理与接口技术课程设计
第7页
故使用矩阵键盘。本设计中,矩阵键盘列线和单片机P2.0-P2.3相连,行线与单片机P2.4-P2.7相连。
键盘扫描采用行扫描法,即依次置行线中的每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下,如图3.6所示。
图3.6 矩阵按键
3.2.2显示电路硬件设计
显示是系统的输出部分,用于观察当前的输入状态。显示电路采用三极管对位码进行驱动。LED数码管有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳的,相反的,就叫共阴的,那么应用时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了 ,如图3.7所示。
图3.7 共阳、共阴数码管
烟台南山学院单片机原理与接口技术课程设计
第8页
显示方式有静态显示和动态显示两种显示方式。静态显示时,数据是分开送到每一位LED上的;而动态显示则是数据是送到每一个LED上,再根据位选线来确定是哪一位LED被显示。静态显示亮度很高,但口线占用较多;动态显示占用口线数目较少,适合用在显示位数较多的场合,但显示位数的增多,将占用大量的CPU时间。本次设计选用动态显示。
显示电路硬件连接图如图3.8、图3.9所示。
330Ω
图3.8 数码管驱动电路
图3.9 四位数码管
3.3 继电器驱动电路及报警电路设计 3.3.1 固态继电器简介
固态继电器(Solid State Relay,缩写SSR),是由微电子电路,分立电子器件,电力电子功率器件组成的无触点开关。用隔离器件实现了控制端与负载端的隔离。固态继电器的输入端用微小的控制信号,达到直接驱动大电流负载。
烟台南山学院单片机原理与接口技术课程设计
第9页
固态继电器有三部分组成:输入电路,隔离(耦合)和输出电路。按输入电压的不同类别,输入电路可分为直流输入电路,交流输入电路和交直流输入电路三种。有些输入控制电路还具有与TTL/CMOS兼容,正负逻辑控制和反相等功能。固态继电器的输入与输出电路的隔离和耦合方式有光电耦合和变压器耦合两种。固态继电器的输出电路也可分为直流输出电路,交流输出电路和交直流输出电路等形式。交流输出时,通常使用两个可控硅或一个双向可控硅,直流输出时可使用双极性器件或功率场效应管。
1、固态继电器的优点
(1)高寿命,高可靠:固态继电器没有机械零部件,有固体器件完成触点功能,由于没有运动的零部件,因此能在高冲击,振动的环境下工作,由于组成固态继电器的元器件的固有特性,决定了固态继电器的寿命长,可靠性高。
(2)灵敏度高,控制功率小,电磁兼容性好:固态继电器的输入电压范围较宽,驱动功率低,可与大多数逻辑集成电路兼容不需加缓冲器或驱动器。
(3)快速转换:固态继电器因为采用固体器件,所以切换速度可从几毫秒至几微妙。
(4)电磁干扰小:固态继电器没有输入“线圈”,没有触点燃弧和回跳,因而减少了电磁干扰。大多数交流输出固态继电器是一个零电压开关,在零电压处导通,零电流处关断,减少了电流波形的突然中断,从而减少了开关瞬态效应。
2、固态继电器的缺点
(1)导通后的管压降大,可控硅或双相控硅的正向降压可达1~2V,大功率晶体管的饱和压降也在1~2V之间,一般功率场效应管的导通电阻也较机械触点的接触电阻大。
(2)半导体器件关断后仍可有数微安至数毫安的漏电流,因此不能实现理想的电隔离。
(3)由于管压降大,导通后的功耗和发热量也大,大功率固态继电器的体积远远大于同容量的电磁继电器,成本也较高。
(4)电子元器件的温度特性和电子线路的抗干扰能力较差,耐辐射能力也较差,如不采取有效措施,则工作可靠性低。
(5)固态继电器对过载有较大的敏感性,必须用快速熔断器或RC阻尼电路对
烟台南山学院单片机原理与接口技术课程设计
第10页
其进行过载保护。固态继电器的负载与环境温度明显有关,温度升高,负载能力将迅速下降。
(6)主要不足是存在通态压降(需相应散热措施),有断态漏电流,交直流不能通用,触点组数少,另外过电流、过电压及电压上升率、电流上升率等指标差。 3.3.2固态继电器驱动电路设计
当用户输入的密码正确时,单片机便输出开门信号,送到继电器驱动电路,然后驱动继电器常开触点闭合,绿发光二极管亮,表示开锁;否则,红发光二极管亮,表示密码输入错误。 硬件电路如图3.10所示
图3.10 固态继电器驱动电路
3.3.3 报警提示电路
报警提示电路采用小蜂鸣器提示。蜂鸣器能够根据脉冲信号,以及信号的频率发出各种不同的声音,这样可以根据系统要求在密码出入正确和密码输入错误时发出不同的声音提示,已达到报警的要求。蜂鸣器电路,如图3.11所示。
图3.11 报警电路
烟台南山学院单片机原理与接口技术课程设计
第11页
第4章 软件设计
在系统设计中,除了硬件设计之外,软件设计也是很重要的,它是系统工作的指挥者,因此系统软件设计时要遵循结构合理、操作性能好、具有一定的保护措施、兼容性好的设计原则来开发设计。密码锁系统软件设计主要包括主程序模块、密码比较判断模块、键盘扫描模块、修改密码模块、数码管显示模块等及按键检测模块。
4.1 主程序模块
主程序主要用于定义全局变量,给全局变量赋初值,启动定时器,为整个程序提供数据;检测按键;调用显示等功能。
4.2 密码比较判断模块
该模块的功能是将键盘输入的密码利用if语句与设定的密码进行逐个比较,若密码完全正确则开锁;若不正确,则开启报警电路,可重新输入密码。其密码输入和比较判决流程图如图4.12所示。
输入密码 核对 N键盘锁定,开启报警 开锁灯亮,可密码修改 复位
图4.12 密码输入和比较判决流程图
4.3 键盘扫描模块
键盘使用矩阵式键盘,由行和列组成,CPU对所有键盘进行监视,从而实现逐列扫描键盘确定被按键的具体位置、判断键盘上有无键按下、消除去抖动、判断闭合的键是否释放等功能。如图4.13所示为键盘扫描流程图。
烟台南山学院单片机原理与接口技术课程设计
第12页
开始 否 有按键输入 是延时去抖动 Y有键按下? 是计算输入键 否 否有键按下? 是读入键值 返回
图4.13 键盘扫码流程图
4.4 修改密码模块
在密码输入正确情况下,可以按下“重置密码”对密码进行重新设置,每设定一位就将密码存储起来,当设置4位密码完毕后,系统将自动跳到程序开始,调用新设置的密码。
4.5 数码管液晶显示模块
此模块包括数码管初始化、动态扫描等。
在显示之前,我们编好了段选表0—6,通过查表来显示,由于本次设计采用动态显示,所以先送段选给每一位,然后给相应的数码管送位选,延时1MS,再给下一位送段选,送位选,延时1MS,以此类推,让4位数码管显示不同的数字,利用人的视觉暂留,使我们看到4位数码管的动态显示效果。
烟台南山学院单片机原理与接口技术课程设计
第13页
第5章 系统调试
在本次软件调试中,我们使用的是STC_ISP_V481C51单片机下载工具和Keil uVision2软件,Keil uVision2是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,使您能在很短的时间内就能学会使用keil c51来开发您的单片机应用程序 。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
烟台南山学院单片机原理与接口技术课程设计
第14页
结论
经过二周的紧张设计,终于顺利完成了设计任务。本次课程设计主要是针对密码锁系统做了详细介绍,以STCC52为核心,并通过调试运行可以实现数码管显示器显示密码输入的相关信息,通过6位数字按键设置4位数字密码,实现2位功能按键
A(输入校验密码并验证密码)和B (设置新密码),利用继电器模拟电子门锁作出是否
开门以及报警等反应。
通过课程设计让我对单片机系统有了较详细的了解,而且触及到与其相关的很多新知识,而且随着电子技术的发展简易数字电压表也会越来越完善,作为大学生的我们应该跟上时代的步伐,时刻关注形势变化,不断充实更新自己的知识。
在设计中既应用到了基础知识,也用到了专业知识,它是对三年来所学知识的综合考察。最重要的是我通过亲自设计,亲自绘制原理图,印制电路板以及系统调试培养了我的耐心和细心,这对我以后的工作和学习有很大的帮助。
烟台南山学院单片机原理与接口技术课程设计
第15页
致谢
在这次课程设计的撰写过程中,我得到了许多人的帮助。
首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。同时也感谢学院为我提供良好的做课程设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学
烟台南山学院单片机原理与接口技术课程设计
第16页
参考文献
[1] 魏雅,杜云. 基于单片机的电子密码锁设计[J].电子设计工程,2016,
[2] 曾素琼,曾静玲,罗建成,王智豪,刘特威,陈思畅.基于52单片机电子密码锁的设计[J]. 电脑与电信,2016,
[3] 王府井,陈凯元. 应用ATC2051单片机设计电子密码锁[J]. 电子制作,2014, [5] 姚龙. 基于单片机与串行通信的电子密码锁设计分析[J]. 电子世界,2014, [6] 韩团军. 基于单片机的电子密码锁设计[J]. 国外电子测量技术,2010,
烟台南山学院单片机原理与接口技术课程设计
第17页
附录
#include #define DataPort P0 //定义数据端口数码管显示 #define KeyPort P2 //按键扫描 sbit DIG1=P3^1; sbit DIG2=P3^2; sbit DIG3=P3^3; sbit DIG4=P3^4; bit key_flag; bit Flag; bit clr_flag; sbit P23=P2^3;//继电器控制端 sbit P30=P3^0;//蜂鸣器控制端 unsigned char code dofly_DuanMa[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e};// 显示段码值0~F unsigned char TempData[4]; //存储显示值的全局变量 unsigned char time_flag; unsigned char delay_count1; unsigned char delay_count2; unsigned char change_flag; unsigned char c_flag; void Delay(unsigned int z); void Display(void);//数码管显示函数 unsigned char KeyScan(void);//键盘扫描 void Init_Timer0(void);//定时器初始化 void Init_Timer1(void); void main (void) { unsigned char key,i,j,count; unsigned char num; unsigned char temp[4]; unsigned char password[4]={0,0,0,0}; Init_Timer0(); Init_Timer1(); i=0; num=0; time_flag=0; count=0; clr_flag=0; change_flag=0; key=0; c_flag=0; delay_count1=0; delay_count2=0; for(j=0;j<4;j++) { TempData[j]=0xff; } TempData[0]=0xbf; // TempData[1]=0xbf; // TempData[2]=0xbf; // TempData[3]=0xbf;// while (1) //主循环 { key_flag=0; key=KeyScan(); if(delay_count1!=0) 烟台南山学院单片机原理与接口技术课程设计 第18页 P23=1; while(key_flag) { if(clr_flag==1) { clr_flag=0; for(j=0;j<4;j++) { TempData[j]=0xbf; } } switch(key) { case 0x11:num=0;break; case 0x21:num=1;break; case 0x41:num=2;break; case 0x81:num=3;break; case 0x12:num=4;break; case 0x22:num=5;break; case 0x42:num=6;break; case 0x82:num=7;break; case 0x14:num=8;break; case 0x24:num=9;break; case 0x44:num=10;break; case 0x84:num=11;break; default:break; } key_flag=0; if(change_flag==1&&num==11&&i==0) { c_flag=1; } if(change_flag==1&&c_flag==1) { if( i<5&&i>0) password[i-1]=num; TempData[i-1]=dofly_DuanMa[num]; if(i==5&&num==10) { for(j=0;j<4;j++) { TempData[j]=0xbf; } 烟台南山学院单片机原理与接口技术课程设计 第19页 } i++; if(i==6) { change_flag=0; c_flag=0; i=0; clr_flag=1; } } else { if(i<4) { temp[i] =num; TempData[i]=0x;//把按键值输入到显示数组中 } if(i==4&&num==10) { Flag=1;//先把比较位置1 for(j=0;j<4;j++) Flag=Flag&&(temp[j]==password[j]); for(j=0;j<4;j++) TempData[j]=0XFF; if(Flag) { TempData[0]=0xc0; // \"o\" TempData[1]=0x8c; // \"p\" TempData[2]=0x86; // \"E\" TempData[3]=0xc8; // \"n\" P23=1; TR0=1; //定时器开关打开 change_flag=1; } else { count++; if(count==3) { TempData[0]=0x86; // \"E\" TempData[1]=0x88; // \"r\" TempData[2]=0x88; // \"r\" TempData[3]=0xb0;//\"3\" count=0; P30=0; TR1=1; //定时器0开关打开 } else { //否则显示\"Err\" TempData[0]=0x86; // \"E\" TempData[1]=0x88; // \"r\" TempData[2]=0x88; // \"r P30=0; TR1=1; //定时器1开关打开 } } clr_flag=1; } if(i==4&&num!=10) { TempData[0]=0x86; // \"E\" TempData[1]=0x88; // \"r\" 烟台南山学院单片机原理与接口技术课程设计 第20页 TempData[2]=0x88; // \"r TempData[3]=0xff; // } i++; if(i==5) i=0; } } Display(); } } void Delay(unsigned int z) { unsigned int x; unsigned int y; for(x=z;x>0;x--) for(y=100;y>0;y--); } void Display(void) { DataPort=0xff; //清空数据,防止有交替重影 DIG1=0; DIG2=1; DIG3=1; DIG4=1; DataPort=TempData[0]; //取显示数据,段码0 Delay(2); DataPort=0xff; //清空数据,防止有交替重影 DIG1=1; DIG2=0; DIG3=1; DIG4=1; DataPort=TempData[1]; //取显示数据,段码1 Delay(2); DataPort=0xff; //清空数据,防止有交替重影 DIG1=1; DIG2=1; DIG3=0; DIG4=1; DataPort=TempData[2]; //取显示数据,段码2 Delay(2); DataPort=0xff; //清空数据,防止有交替重影 DIG1=1; DIG2=1; DIG3=1; DIG4=0; DataPort=TempData[3]; //取显示数据,段码3 Delay(2); DIG1=1; DIG2=1; DIG3=1; DIG4=1; } void Init_Timer0(void) { TMOD |= 0x01; TH0=(65536-50000)/256; //重新赋值 50ms TL0=(65536-50000)%256; EA=1; //总中断打开 ET0=1; //定时器中断打开 } void Timer0_isr(void) interrupt 1 using 1 { TH0=(65536-50000)/256; //重新赋值 50ms TL0=(65536-50000)%256; delay_count1++; if(delay_count1==100) { P23=0; delay_count1=0; TR0=0; //定时器 烟台南山学院单片机原理与接口技术课程设计 第21页 关 } } void Init_Timer1(void) { TMOD |= 0x10; TH1=(65536-40000)/256; TL1=(65536-40000)%256; EA=1; //总中断打开 ET1=1; //定时器中断打开 //TR1=1; //定时器开关打开 } void Timer1_isr(void) interrupt 3 using 1 { TH1=(65536-40000)/256; //初值40ms TL1=(65536-40000)%256; delay_count2++; if(delay_count2==100) { P30=1; delay_count2=0; TR1=0; //定时器关 } } unsigned char KeyScan(void) { unsigned char l_code,h_code; KeyPort=0xf0; if((KeyPort&0xf0)!=0xf0) { Delay(5); if((KeyPort&0xf0)!=0xf0) { key_flag=1; l_code=0xfe; while((l_code&0x10)!=0) { KeyPort=l_code; P23=0; if((P2&0xf0)!=0xf0) { h_code=(KeyPort&0xf0)|0x0f; while((KeyPort&0xf0)!=0xf0); return((~l_code)+(~h_code)); } else l_code=(l_code<<1)|0x01; } } return(0); } }
因篇幅问题不能全部显示,请点此查看更多更全内容