基于AT89C51单片机的矩阵键盘电子密码锁设计

基于AT89C51单片机的矩阵键盘电子密码锁设计
基于AT89C51单片机的矩阵键盘电子密码锁设计

摘要

在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用数字密码代替钥匙的单片机控制的电子密码锁应运而生。

在这次毕业设计中我采用AT89C51单片机为核心4*4矩阵键盘作为输入器件,LCD1602字符型液晶作为显示电路来制作基于单片机的电子密码锁。该密码锁具有可更改密码、密码掉电保护、输入密码错误报警、输入密码错误三次锁定键盘的功能。该密码锁具有操作人性化、低功耗、高保密性等一系列优点。本文详细地介绍了系统硬件与软件的设计,以及仿真调试的详细过程。

关键词:4*4矩阵键盘, AT89C51, 1602LCD显示器,密码锁

Abstract

In our daily life, the security of house, company department, documents and finance forms, also some personal information always used the lock to protect them. If use the normal keys to lock out the door, we should taken many keys with us . That is so difficult to use. And if we lost the keys with careless, the security looks very easy to break out. As the developing of the technology people ask for high security machines. For satisfy this request, the cipher lock is appeared. The cipher has higher security, lower cost, lower power and easy to use.

At the graduation design I AT89C51 microcontroller as the core 4 * 4 matrix as input devices, LCD1602 keyboard type LCD display circuit as a character based on single chip to make the electronic combination lock. This combination lock has may change your password, password off electricity protection, input password mistake alarm, input password mistake three times the function of lock the keypad. This combination lock have operation humanization, low power consumption, high confidentiality and so on a series of advantages. This paper introduced in detail the system hardware and software design, and the detailed process simulation debugging.

Keywords: matrix keyboards, AT89C51, 1602LCD, combination lock

河南城建学院本科毕业设计(论文)目录

目录

第1章概论 (1)

1.1 设计意义 (1)

1.2背景知识介绍 (1)

1.3 本文主要工作以及内容安排 (2)

第2章系统总体方案设计 (3)

2.1 总体方案设计 (3)

2.1.1 实现功能: (3)

2.1.2 4*4键盘说明 (4)

2.2 AT89C51单片机介绍 (4)

2.3硬件设计 (6)

2.3.1 时钟电路的设计 (6)

2.3.2 复位电路的设计 (7)

2.3.3 密码存储电路的设计 (8)

2.3.4 键盘电路设计 (9)

2.3.5 显示电路的设计 (11)

2.3.6 报警电路 (14)

2.3.7 开锁电路 (15)

第3章软件设计 (16)

3.1 编程工具介绍 (16)

3.2 编程语言介绍 (17)

3.3 软件编程 (18)

3.3.1软件设计原则 (18)

3.3.2 软件设计方案 (18)

3.3.3 4*4矩阵键盘的编程方法 (19)

3.3.4液晶显示子程序 (21)

3.3.5 密码比较和报警程序 (22)

3.3.6 密码重置程序设计 (23)

第4章软件仿真以及调试 (26)

4.1 仿真软件简介 (26)

4.2 仿真程序基本工作界面 (27)

4.3 仿真过程 (27)

总结 (30)

参考文献 (31)

致谢 (32)

附录A:程序主函数 (33)

附录B:总电路图 (36)

第1章概论

1.1 设计意义

单片机的应用是具有高度现实意义的。单片机极高的可靠性,微型性和智能性,单片机已成为工业控制领域中普遍采用的智能化控制工具,已经深深地渗入到我们的日常生活当中。在这次基于单片机的电子密码锁毕业设计中,不仅使我加深对大学所学知识的理解,而且使我对单片机有了进一步的了解。在设计的过程中,不仅使我熟悉了AT89C51单片的基本结构和相关的参数,而且了解单片机最小系统的构成。在这次设计中所学到的相关知识也许会在将来的工作和学习中用到。

随着单片机在各个领域的广泛应用,许多用单片机做控制的密码锁系统也应运而产生,如用单片机控制LCD液晶的各种显示器显示数据,用单片机控制LED 七段操作显示器等。本次设计用由AT89C51编程控制LCD1602液晶作显示的密码锁系统。该系统具有设定密码并储存密码、报警、输入密码错误锁定键盘等功能。它具有高保密性,操作方便、性能稳定等特点,可以广泛适合各类档案管理场所或者家庭室内财务保管处。通过本次基于AT89C51系列单片机密码锁的设计,可以了解、熟悉有关单片机开发设计的过程,并加深对单片机的理解和应用以及掌握单片机与外围接口的一些方法和技巧,这主要表现在以下一些方面:

1) 密码锁系统包含了8051系列单片机的最小应用系统的构成。

2) 可以了解到1602液晶的接口、工作原理以及这种显示器的接口实例与具体连接与编程方法。

3) 用AT24C02储存密码的原理和方法。

1.2背景知识介绍

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,

价格低廉,可靠性高,灵活性好,开发较为容易。单片机以其一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各个层次中,如车间流水线控制、自动化系统等、智能型家用电器等。

ATMEL公司开发生产了新型的8位单片机——AT89系列单片机。它不但具有一般MCS-51单片机的所有特性,而且还拥有一些独特的优点,此次设计中所用到的AT89C51就是其中典型的代表。单片机内部也有和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机,排烟罩VCD等等的家电里面都可以看到它的身影。

1.3 本文主要工作以及内容安排

本文主要介绍电子密码锁需要实现的功能以及如何利用单片机来制作电子密码锁。在本文中详细地介绍了具体硬件设计和软件模块化编程以及设计中各个功能的实现方法和过程。具体内容有:

全文共分4章,结构安排如下:

第1章绪论介绍了本次设计目的及意义以及单片机的发展现状、1602字符型液晶在电子密码锁系统中的应用以及主要实现的功能。

第2章介绍了本次设计的硬件电路的设计思路以及元件的选择,详细的说明电路图中各个部分的功能和连线方式,为下一步的编程设计作好铺垫。

第3章介绍了单片机编程软件和常用的编程语言,确定了编程的主题思路以及设计功能的具体实现方法。

第4章介绍了如何在电脑上实现设计的软件仿真。

第2章系统总体方案设计

2.1 总体方案设计

考虑各方面因素本设计采用的是用以AT89C51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加掉电存储、声光提示甚至添加遥控控制功能。其设计方案如图2.1所示。

图2.1 单片机控制方案

实现此方案硬件是基础,程序是关键。要充分利用仿真软件,不断调试程序,以使程序在满足各种功能的情况下最简。

2.1.1 实现功能:

密码锁初始密码为:000000.

(1)开锁:插上电源后,程序自动调入初始密码,此时依次输入:000000,然后按[#](确认)键,此时锁会打开,可以看到显示open,密码锁打开。

(2)退出并关锁:按下[*](取消)键,此时锁关闭,所有输入清除。

(3) 修改密码:在开锁状态下,再次输入正确的密码并按下[#](确认)键,

此时听到两声提示,输入新的六位密码并按[D](重设)键,再重复输入一次新密码并按[D],会听到两声提示音,表示重设密码成功,内部保存新密码并存储到AT24C02。(如两次输入的新密码不一样,则重设密码失败)。

(4) 报警并锁定键盘:当输入密码错误后,报警并锁定键盘3秒,如3秒内又有按键,3秒后再启动。

当重置新密码时,新密码会保存于AT24C02存储器里.。

2.1.2 4*4键盘说明

采用4*4键盘输入,键盘对应名称如表2.1

表2.1 键盘名称分布

其中,[0 9]为数字输入键,用于输入相应的数字

[*]号键为取消当前操作

[#]号键为确认

[D]键为修改密码

其它键无功能及定义

2.2 AT89C51单片机介绍

AT89C51单片机包括:一个8位的微型处理器CPU;一个128K的片内数据存储器RAM;4K片内程序存储器ROM;四个8位并行的I/O接口P0 P3,每个接口既可以输入,也可以输出;两个定时器/记数器;五个中断源的中断控制系统;一个全双工UART的串行I/O口;片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率是12MHZ。以上各个部分通过内部总线相连接。下面简单介绍其主要部分的功能。

处理器:CPU是单片微型计算机内部的核心部件,由它读入用户程序,并

逐条执行指令,它是由8位算术逻辑运算部件(简称ALU)、定时/控制部件,若干寄存器A、B、PSW、SP以及16位程序计数器(PC)和数据指针寄存器(DPTR)等主要部件组成。算术逻辑单元的硬件结构与典型微型机相似。它具有对8位信息进行+、-、*、/ 四则运算和逻辑与、或、异或、取反、清“0”等运算,并具有判跳、转移、数据传送等功能,此外还提供存放中间结果及常用数据寄存器。控制器部件是由指令寄存器、译码器、定时与控制电路以及信息传送控制等部件组成的。指令寄存器中存放指令代码。在执行指令时,从程序存储器中取来经译码器译码后,根据不同指令由定时与控制电路发出相应的控制信号,送到存储器、运算器或I /O接口电路,完成指令功能。程序计数器PC用来存放下一条将要执行的指令地址,共16位.可对以64K字节的程序存储器直接寻址,指令执行结束后,PC计数器自动增加,指向下一条要执行的指令地址。CPU功能,总的来说是以不同的方式,执行各种指令。不同的指令其功能略异。有的指令涉及到寄存器之间的关系;有的指令涉及到单片机核心电路内部各功能部件的关系;有的则与外部芯片如外部程序存储器发生联系。事实上,CPU是通过复杂的时序电路完成不同的指令功能。所谓CPU的时序是指控制按照指令功能发出一系列在时间上有一定次序的信号,控制和启动一部分逻辑电路,完成某种操作。[3]

表 2.2. P3口的第二功能

输入/输出引脚P0口、P1口、P2口及P3口: P0口(22脚~39脚),P0.0~P0.7统称为P0口。当不接外部存储器与不扩展I/O接口时,它可作为准双向8位输入/输出接口。当接有外部程序存储器或扩展I/O口时,P0口为地址/数据分时复用口。它分时提供8位双向数据总线;P1口(1脚~8脚),P1.0~P1.7统称为P1口,可作为准双向I/O接口使用。对于EPROM编程和进行程序校验时,P0口

接收输入的低8位地址;P2口(21脚~28脚),P2.0~P2.7统称为P2口,一般

可作为准双向I/O 接口。当接有外部程序存储器或扩展I/O 接口且寻址范围超过

256个字节时,P2口用于高8位地址总线送出高8位地址。对于EPROM 编程和进

行程序校验时,P2口接收输入的8位地址; P3口(10脚~17脚), P3.0~P3.7

统称为P3口。它为双功能口,可以作为一般的准双向I/O 接口,也可以将每1位

用于第2功能,而且P3口的每一条引脚均可独立定义为第1功能的输入输出或第

2功能。P3口的第2功能见表2.2所示。

中断系统: AT89C51单片机有5个中断源,由两个中断优先级,每个中断

源的优先级可以编程为高优先级或低优先级。中断允许受到CPU 开中断和中断源

开中断的两级控制。

AT89C51单片机有两个中断优先级,高优先级和低优先级,每个中断源都可以

编程为高中断优先级和低中断优先级。这可以实现两级中断嵌套,嵌套的原则是:

一个正在执行的中断服务程序可以被较高优先级的中断请求中断,而不能被同级

或较低级的中断请求所中断。两极中断通过使用IP 寄存器设置。

AT89C51的管脚有四十多个这里就不在一一列出,图2.2.为其管脚分布。

P1.01P1.12

P1.23P1.34P1.45

P1.56P1.67

P1.78RST/VPD 9

RXD P3.010

TXD P3.111INT0 P3.212INT1 P3.313

T0 P3.414T1 P3.515WR P3.616RD P3.717

XTAL218XTAL119VSS 20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN 29ALE/PROG 30EA/VPP 31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC 408031 8051 8751

图2.2. 8051的管脚分布

2.3硬件设计

2.3.1 时钟电路的设计

时钟电路用于产生MCS-51单片机工作时所必需的时钟控制信号,MCS-51单片

机的内部电路在时钟信号的控制下,严格的按时序执行指令进行工作。

电路中的电容C1和C2典型值通常选择为30pF左右本设计采用20pF,电路图如2.3。对外接电容的值虽没有严格的要求,但电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。晶振的振荡频率的范围通常是在1.2MHZ-12MHZ之间,本设计采用12MHZ。晶振的频率越高,则系统的时钟频率也就越高,单片机的运行速度也就越快。但反过来运行速度快对存储器的速度要求也就越高,对印制电路板的工艺要求也高,即要求线间的寄生电容要小;晶振和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证振荡器稳定、可靠地工作。为了提高温度稳定性,应采用温度稳定性良好的电容。[12]

图2.3 时钟电路

2.3.2 复位电路的设计

单片机复位是使CPU 和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。单片机复位的条件是:必须单片机复位引脚加上持续两个机器周期(即24 个振荡周期)以上的高电平,单片机才进入复位状态(即程序从0000H地址开始执行)。复位后的状态:单片机复位后,片内RAM中低128的内容不会改变,但特殊功能寄存器被初始化。复位期间单片机的ALE和PSEN引脚输出高电平,复位后单片机的特殊功能寄存器状态除SP为07H,P0 P3为FFH 外其余都被复位为0。

AT89C51单片机的第9管脚RST(RESET缩写),当向RST管脚输入一个非常短暂的高电平时,单片机就会复位。复位管脚与计算机上的复位键功能很相似,当计算机正在进行或死机时,只要按一下复位键,计算机,就会重新启动。单片机

单片机课程设计4X4矩阵键盘显示要点

长沙学院 《单片机原理及应用》 课程设计说明书 题目液晶显示4*4矩阵键盘按键号 程序设计 系(部) 电子与通信工程系 专业(班级) 电气1班 姓名龙程 学号2011024109 指导教师刘辉、谢明华、王新辉、马凌 云 起止日期2014.5.19—2014.5.30

长沙学院课程设计鉴定表

《单片机技术及应用》课程设计任务书系(部):电子与电气工程系专业:11级电子一班指导教师:谢明华、刘辉

目录 前言 (5) 一、课程设计目的 (6) 二、设计内容及原理 (6) 2.1 单片机控制系统原理 (6) 2.2阵键盘识别显示系统概述 (6) 2.3键盘电路 (7) 2.4 12864显示器 (8) 2.5整体电路图 (9) 2.6仿真结果 (9) 三、实验心得与体会 (10) 四、实验程序 (10) 参考文献 (18)

前言 单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器 应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。现代人类生活中所用的几乎每件有电子器件的产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电子产品中都含有单片机。汽车上一般配备40多片单片机,复杂的工业控制系统上甚至可能有数百片单片机在同时工作!单片机的数量不仅远超过PC机和其他计算机的总和,甚至比人类的数量还要多。 是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗低,因此倍受工程师青睐,适用于使用电池的电子设备。英国科学家在上世纪制造了第一块液晶显示器即LCD。而第一台可操作的LCD基于动态散射模式(Dynamic Scattering Mode,DSM),是RCA公司乔治·海尔曼带领的小组开发的。 LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。 交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键, 键盘是合理的。

51单片机矩阵键盘设计

湖南工业大学 课程设计 资料袋 电气与信息工程学院(系、部)2009--2010 学年第 1 学期课程名称单片机应用系统指导教师贺正芸 学生姓名专业班级电子信息科学与技术学号 题目4*4矩阵键盘 成绩起止日期2009 年11 月23 日~2009 年12 月04 日 目录清单 序号材料名称资料数量备注 1 课程设计任务书 2 课程设计说明书 3 课程设计图纸张 4 5 6

湖南工业大学 课程设计任务书 2009 —2010 学年第 1 学期 电气与信息工程学院(系、部)电子信息科学与技术专业班级 课程名称:单片机应用系统 设计题目:4*4矩阵键盘 完成期限:自2009 年11 月9 日至2009 年11 月20 日共 2 周 内容及任务 由P1.0—P1.3(列)和P1.4—P1.7(行)组成4*4矩阵键盘,P0口接LED静态显示电路。由于P0口内部无上拉电阻,因此必须外部接上上拉电阻,其阻值的选择可以根据LED 数码管发光电流及其亮度来决定,参考值为560欧姆。编写4*4键盘的驱动程序。 编写主程序,当按键按下时,能够在数码管显示器与按键的键值对应的数字。 进度安排 起止日期工作内容2009.11.23-2009.11.24 设计内容及基本原理 2009.11.25-2009.11.27 进行系统的软件设计,2009.11.28-2009.12.04 进行系统的硬件设计 主 要 参 考 资 料 [1] 欧伟明.单片机原理与应用. 电子工业出版社,2009年 指导教师(签字):年月日系(教研室)主任(签字):年月日

单片机应用系统 4*4矩阵键盘设计说明书 学生姓名 班级电科072 学号 成绩 指导教师(签字) 起止日期:2009 年11 月23 日至2009 年12 月4 日 电气与信息工程学院(部)

矩阵键盘设计实验报告

南京林业大学 实验报告 基于AT89C51 单片机4x4矩阵键盘接口电路设计 课程机电一体化设计基础 院系机械电子工程学院 班级 学号 姓名

指导老师杨雨图 2013年9月26日

一、实验目的 1、掌握键盘接口的基本特点,了解独立键盘和矩 阵键盘的应用方法。 2、掌握键盘接口的硬件设计方法,软件程序设计 和贴士排错能力。 3、掌握利用Keil51软件对程序进行编译。 4、用Proteus软件绘制“矩阵键盘扫描”电路,并用测试程序进行仿真。 5、会根据实际功能,正确选择单片机功能接线,编制正确程序。对实验结果 能做出分析和解释,能写出符合规格的实验报告。 二、实验要求 通过实训,学生应达到以下几方面的要求: 素质要求 1.以积极认真的态度对待本次实训,遵章守纪、团结协作。 2.善于发现数字电路中存在的问题、分析问题、解决问题,努力培养独立 工作能力。 能力要求 1.模拟电路的理论知识 2.脉冲与数字电路的理念知识 3.通过模拟、数字电路实验有一定的动手能力 4.能熟练的编写8951单片机汇编程序 5.能够熟练的运用仿真软件进行仿真 三、实验工具 1、软件:Proteus软件、keil51。 2、硬件:PC机,串口线,并口线,单片机开发板 四、实验内容

1、掌握并理解“矩阵键盘扫描”的原理及制作,了解各元器件的参数及格 元器件的作用。 2、用keil51测试软件编写AT89C51单片机汇编程序 3、用Proteus软件绘制“矩阵键盘扫描”电路原理图。 4、运用仿真软件对电路进行仿真。 五.实验基本步骤 1、用Proteus绘制“矩阵键盘扫描”电路原理图。 2、编写程序使数码管显示当前闭合按键的键值。 3、利用Proteus软件的仿真功能对其进行仿真测试,观察数码管的显示状 态和按键开关的对应关系。 4、用keil51软件编写程序,并生成HEX文件。 5、根据绘制“矩阵键盘扫描”电路原理图,搭建相关硬件电路。 6、用通用编程器或ISP下载HEX程序到MCU。 7、检查验证结果。 六、实验具体内容 使用单片机的P1口与矩阵式键盘连接时,可以将P1口低4位的4条端口线定义为行线,P1口高4位的4条端口线定义为列线,形成4*4键盘,可以配置16个按键,将单片机P2口与七段数码管连接,当按下矩阵键盘任意键时,数码管显示该键所在的键号。 1、电路图

51单片机数码管显示矩阵键盘键入值

51单片机实现数码管显示矩阵键盘键入值 #include #define uchar unsigned char uchar code decode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; void delay(uchar); uchar temp,b,c,d,num; void display(uchar); void main() { while(1) { P0=0xfe; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp)

case 0xe0:num=0;break; case 0xd0:num=1;break; case 0xb0:num=2;break; case 0x70:num=3;break; } } } P0=0xfd; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp) { case 0xe0:num=4;break; case 0xd0:num=5;break; case 0xb0:num=6;break; case 0x70:num=7;break;

} } P0=0xfb; temp=P0; temp=temp&0xf0; if(temp!=0xf0) { delay(100); if(temp!=0xf0) { switch(temp) { case 0xe0:num=8;break; case 0xd0:num=9;break; case 0xb0:num=10;break; case 0x70:num=11;break; } } } P0=0xf7; temp=P0;

单片机设计矩阵键盘电子琴

课程设计任务书 课程名称单片机原理及应用课程设计 1.课程设计应达到的目的 本课程是继《单片机原理及应用B》课程之后,训练学生综合运用上述课程知识,进行单片机软件、硬件系统设计与调试,使学生加深对单片机结构、工作原理的理解,提高学生综合应用知识的能力、分析解决问题的能力和单片机最小应用系统的设计技能。通过课程设计,达到理论与实际应用相结合,增强学生对综合电子系统设计的理解,掌握单片机原理就应用的设计方法以及C51编程的能力,并能够在这个基础上进行实际项目的程序设计及软硬件调试,增强学生的工程实践能力。 2.课程设计题目及要求

带存储播放功能的简易电子琴设计 要求:利用行列式键盘和数码管,来控制并显示和产生不同频率的声音。其他扩展功能学生可自己添加,功能不限定与此。 3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕(1)了解相关理论知识,掌握基本的原理,理解相关特殊功能寄存器的设置。 (2)完成电路板的组装 (3)完成硬件电路的测试、以及软件的编程 (4)最终完成具体的课设任务。 4.主要参考文献 1.张洪润等.单片机应用设计200例.北京:北京航空航天大学出版社,2006 2. 胡汉才.单片机原理及其接口技术. 北京:清华大学出版社,2010 3.夏继强等.单片机实验与实践教程.北京:北京航空航天大学出版社,2006 4. 倪晓军等.单片机原理与接口技术教程.北京:清华大学出版社,2007 5(1)硬件方面:单片机。4*4行列式键盘,蜂鸣器,独立数码管,独立建。硬件部分采用逐列扫描,16个键位对应16个音,不断检测16键位,当某个键位被按下,先检测哪一列再检测哪个按键被按下,同时设置四个功能键,p1.0,p1.1播放歌曲,p1.2暂停,p1.3复位,可控制歌曲的播放。 插入图片 (2)音乐频率 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。单片机12MHZ晶振,高中低音符与单片机计数T0相关的计数值如下表所示: 音符频率简码值(T值) 低3 M 330 64021 低4 FA 349 64103 低5 SO 392 64260 低6 LA 440 64400 低7 SI 494 64524 中 1 DO 523 64580 中 2 RE 587 64684 中 3 M 659 64777 中 4 FA 698 64820 中 5 SO 784 64898 中 6 LA 880 64968

51单片机矩阵键盘扫描程序

/*----------------------------------------------- 名称:矩阵键盘依次输入控制使用行列逐级扫描 论坛:https://www.360docs.net/doc/ee16546075.html, 编写:shifang 日期:2009.5 修改:无 内容:如计算器输入数据形式相同从右至左使用行列扫描方法 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 #define KeyPort P1 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void DelayUs2x(unsigned char t);//us级延时函数声明 void DelayMs(unsigned char t); //ms级延时 void Display(unsigned char FirstBit,unsigned char Num);//数码管显示函数 unsigned char KeyScan(void);//键盘扫描 unsigned char KeyPro(void); void Init_Timer0(void);//定时器初始化 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char num,i,j; unsigned char temp[8]; Init_Timer0(); while (1) //主循环 { num=KeyPro();

51单片机矩阵键盘与8051连接设计

51单片机矩阵键盘与8051连接设计 众所周知,51单片机一般的键盘检测原理为非编码键盘检测,没有专门用来产生键编码号或键值的电路芯片;而我们使用的电脑键盘为编码键盘,通过编码电路芯片为每个按键产生一个编码号,可以通过串行总线把键值传输给电脑。在进行矩阵键盘检测时,书本或老师一般教的都是扫描检测,即一行一行地检测或者一列一列地检测,代码繁琐复杂,且缺点很多(例如执行效率较低)。 举例电路: 矩阵键盘与8051连接如上图所示,首先,令P3=0x0f,

检测P30、P31、P32、P33哪一行被按下,将此时P3的值存入寄存器1。然后,令P3=0xf0 | 寄存器1,检测P34、P35、P36、P37哪一列被按下,将此时P3的值存入寄存器2。最后,把寄存器1的值和寄存器2的值组合起来即可得到矩阵键盘的编码。 代码如下: #include《reg52.h》 unsigned char NUM=1; /*----------------------------- 特殊功能位定义 -----------------------------*/ sbit L1=P0 ; sbit L2=P0 ; sbit L3=P0 ; sbit L4=P0 ; sbit L5=P0 ; sbit L6=P0 ; sbit L7=P0 ; sbit L8=P0 ; sbit DUAN=P2 ; sbit WEI=P2 ; /*-----------------------------

定时器0初始化函数 -----------------------------*/ void init() { EA=1; ET0=1; TMOD=0X01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; } /*----------------------------- 中断服务函数 -----------------------------*/ void TImer0()interrupt 1 { TR0=0; //定时终止 TH0=(65536-10000)/256; //定时器0初值重装TL0=(65536-10000)%256; NUM--; } /*-------------------------------------------------- 矩阵键盘检测兼编码函数

第13讲51单片机按键电路

标题:键盘接口电路 教学目标与要求: 1.键盘去抖动和连接、控制方式 2.独立式按键及其接口电路 3.矩阵式键盘及其接口电路 授课时数:2 教学重点:.矩阵式键盘及其接口电路 教学内容及过程: 一、键盘接口概述 1、按键开关去抖动问题 机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图9-11所示,抖动时间的长短与开关的机械特性有关,一般为5 10 ms 在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。在硬件上可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路。图9-12是一种由R-S触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。 软件上采取的措施是:在检测到有按键按下时,执行一个10 ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态。同理,在检测到该键释放后,也应采用相同的步 骤进行确认,从而可消除抖动的影响。

2.编制键盘程序 一个完善的键盘控制程序应具备以下功能: (1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。 (2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。 (3) 准确输出按键值(或键号),以满足跳转指令要求。 二、独立式按键 单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。 1. 独立式按键结构 独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图7.4所示。 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。 2.矩阵式键盘 I/O端线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线发生短路。特点: ①占用I/O端线较少; ②软件结构教复杂。 适用于按键较多的场合。 3.键盘扫描控制方式 ⑴程序控制扫描方式 键处理程序固定在主程序的某个程序段。 特点:对CPU工作影响小,但应考虑键盘处理程序的运行间隔周期不能太长,否则会影响对键输入响应的及时性。 ⑵定时控制扫描方式 利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。 特点:与程序控制扫描方式的区别是,在扫描间隔时间内,前者用CPU工作程序填充,后者用定时/计数器定时控制。定时控制扫描方式也应考虑定时时间不能太长,否则会影响对键输入响应的及时性。 ⑶中断控制方式 中断控制方式是利用外部中断源,响应键输入信号。 特点:克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。 三、独立式按键及其接口电路 1、按键直接与I/O口连接

单片机矩阵键盘毕业设计

单片机矩阵键盘毕业设计 摘要 矩阵式键盘乃是目前使用较为广泛的一种键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。4*4矩阵式键盘采用89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程,单片机将检测到的按键信号转换成数字量,显示于数码管显示器,系统灵活性强,易于操作,可靠性能好。单片机简介及主系统电路 单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换444器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。单片机在工业控制领域广泛应用,它由芯片内仅有CPU的专用处理器发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中,本次课程设计我们采用的是AT89C51型号的单片机。 AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,提高了系统的性价比。其最小系统电路图如下:

矩阵键盘程序c程序,51单片机.

/*编译环境:Keil 7.50A c51 */ /*******************************************************/ /*********************************包含头文件********************************/ #include /*********************************数码管表格********************************/ unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x 8E}; /**************************************************************************** 函数功能:延时子程序 入口参数: 出口参数: ****************************************************************************/ void delay(void) { unsigned char i,j; for(i=0;i<20;i++) for(j=0;j<250;j++); } /**************************************************************************** 函数功能:LED显示子程序 入口参数:i 出口参数: ****************************************************************************/ void display(unsigned char i) { P2=0xfe; P0=table[i]; } /**************************************************************************** 函数功能:键盘扫描子程序 入口参数: 出口参数: ****************************************************************************/ void keyscan(void) { unsigned char n; //扫描第一行 P1=0xfe;

51单片机矩阵键盘程序

/*风清云扬*/ # include #define uchar unsigned char #define uint unsigned int void delay(uint i) { uchar x,j; for(j=0;j

} else if(temp0==0x0b) { switch (temp1) { case 0xe0: num=12;break; case 0xd0: num=11;break; case 0xb0: num=10;break; case 0x70: num=9;break; default:num=0;break; } } else if(temp0==0x07) { switch (temp1) { case 0xe0: num=16;break; case 0xd0: num=15;break; case 0xb0: num=14;break; case 0x70: num=13;break; default:num=0;break; } } } } return num; } void main() { char num; while(1) { num=key_scan(); P2=num/10; P3=num%10; } }

51单片机矩阵键盘程序示例

;lab5_asm ;vol 1.0 ;zqy ;2012/2/18 ;定义初始化 LED_CHABIT PSW数码管显示标志位,为1显示十位,为0显示个位;数字0-9 ORG 00H JMP START ORG 000BH JMP INT_T0转到中断服务程序,更改数码管显示 ORG 0100H LED_TAB1:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH DB 0FDH,87H,0FFH,0EFH,0BFH DB 86H,0DBH,0CFH,0E6H,0EDH,0FDH LED_TAB2: DB 0BFH,0BFH,0BFH,0BFH,0BFH DB 0BFH,0BFH,0BFH,0BFH,0BFH DB 86H,86H,86H,86H DB 86H,86H,86H START: ;工作寄存器和某些数据单元的初始化

MOV R0,#0 ;数码管显示初始化 SETB LED_CHA MOVDPTR, #8300H位选地址赋给DPTR高八位P2 口,选中U13锁存器 MOVA,#OFEH位选数据,选中个位数码管,置低为选中 MOVX@DPTR,脸选数据,对片外I/O 口的外设芯片访问 MOVDPTR,#8200H段选地址 MOVA,#OBFH段选数据,个位显示0 MOVX@DPTR, A ;定时器初始化 MOV IE,#82H开启定时器T0中断 MOV TMOD,#01H设定定时器T0为模式1 MOV TH0,#0D8H MOV TL0,#0F0H装入初值,10MS 延时12MHZ SETB TRC启动定时器T0 KEY: ;按键处理 LCALL KEY_START用判断有无键按下子程序 JZ KEY无键按下,重新扫描 LCALL KEY_DELAY键按下,延时去抖 LCALL KEY_START

基于51单片机4乘4矩阵键盘的设计

编程实现4乘4的矩阵键盘控制连接在P0口和P1口上的16个LED,当按下某键并释放后只有对应的LED 灯亮,例如按S0后D0亮,按S1后D1亮。 程序及仿真: #include unsigned char code led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char KEY=0xff; void keyscan(void) { unsigned char a,b; P2=0xf0;//高四位作为输入(高电平),低四位输出低电平 a=P2;//读高四位 P2=0x0f; //反转,低四位作为输入,高四位输出低电平 b=P2;//读低四位 P2=0x0f; b=P2; a=a|b; switch(a) { case 0xee:KEY=0;break; case 0xde:KEY=1;break; case 0xbe:KEY=2;break; case 0x7e:KEY=3;break; case 0xed:KEY=4;break; case 0xdd:KEY=5;break; case 0xbd:KEY=6;break; case 0x7d:KEY=7;break; case 0xeb:KEY=8;break; case 0xdb:KEY=9;break; case 0xbb:KEY=10;break; case 0x7b:KEY=11;break; case 0xe7:KEY=12;break; case 0xd7:KEY=13;break; case 0xb7:KEY=14;break; case 0x77:KEY=15;break; default:break;}} void display(unsigned char n) { if(n<8) { P0=led[n];

51单片机04矩阵按键逐行扫描行列扫描代码

矩阵键盘扫描原理 方法一: 逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 方法二: 行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。 //行列扫描

#include #define GPIO_KEY P0 #define GPIO_LCD P2 unsigned char code a[17]= {~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0, ~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00}; //按位取反的用法 void delay10ms(); void keydown();//要与下面的定义一致 void main() { GPIO_LCD=a[16];//初始化数码管 while(1) { keydown(); } } void delay10ms()

{ unsigned char a,b; for(a=38;a>0;a--) for(b=130;b>0;b--); } void keydown() //检测按下,按下时需要消抖,检测松开,返回按键值//没有按键时保持 { unsigned char n=0,key; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay10ms(); //延时10ms消抖 if(GPIO_KEY!=0x0f)//再次检测按键是否按下 { GPIO_KEY=0x0f;//测试列 switch(GPIO_KEY) { case 0x07: key=0;break; case 0x0b: key=1;break;

基于51单片机的电子密码锁设计

基于51单片机的电子密码锁设计 摘要:本文设计了一种基于单片机的电子密码锁,由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超次锁定、报警、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外,还具有掉电存储、声光提示等功能。本密码锁具有安全性高、成本低、功耗低、易操作、记住密码即可开锁等优点。 关键词:STC89C52;电子密码锁;矩阵键盘 1绪论 1.1 课题背景 随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。锁自古以来就是把守护门的铁将军,人们对它要求甚高,既要安全可靠的防盗,又要使用方便,这也是制锁者长期以来研制的主题。随着电子技术的发展,各类电子产品应运而生,电子密码锁就是其中之一。据有关资料介绍,电子密码锁的研究从20世纪30年代就开始了,在一些特殊场所早就有所应用。这种锁是通过键盘输入一组密码完成开锁过程。研究这种锁的初衷,就是为提高锁的安全性。由于电子锁的密钥量(密码量)极大,可以与机械锁配合使用,并且可以避免因钥匙被仿制而留下安全隐患。电子锁只需记住一组密码,无需携带金属钥匙,免除了人们携带金属钥匙的烦恼,而被越来越多的人所欣赏。电子锁的种类繁多,例如数码锁,指纹锁,磁卡锁,IC卡锁,生物锁等。但较实用的还是按键式电子密码锁。 1.2 课题设计目标 本设计采用STC89C52单片机为主控芯片,通过软件程序组成电子密码锁系统,能够实现: (1) 密码输入错误,蜂鸣器报警。 (2) 密码为6位,可以随意更改, (3) 采用矩阵按键输入。 (4)通过LCD1602液晶显示。 (5) 有开锁指示灯。 (6)查阅有关文献与资料,深入学习单片机硬件原理图及软件编程相关知识。 2系统方案论证 系统将从主控部分和密码输入方式两方面进行论证。

4×4矩阵键盘51单片机识别实验与程序

4×4矩阵键盘51单片机识别实验与程序 1.实验任务 如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。对应的按键的序号排列如图4.14.1所示 图4.14.1 2.硬件电路原理图

图4.14.2 3.系统板上硬件连线 (1.把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上; (2.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 4.程序设计内容 (1.4×4矩阵键盘识别处理 (2.每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键 的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电 阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的 任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还 要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码, 使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回 馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。 5.程序框图

图4.14.3 C语言源程序 #include unsigned char code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; unsigned char temp; unsigned char key; unsigned char i,j; void main(void) { while(1)

X4扫描式矩阵键盘课程设计

X4扫描式矩阵键盘课程设计 (总13页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

4X4扫描式矩阵键盘课程设计 课程设计名称: 4_4扫描式矩阵键盘设计 姓名: DUKE 班级:电子1008班 学号: 10086 成绩: 日期: 2014年1月6日

摘要 随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。 矩阵式键盘提高效率进行按键操作管理有效方法,它可以提高系统准确性,有利于资源的节约,降低对操作者本身素质的要求。是它能准时、实时、高效地显示按键信息,以提高工作效率和资源利用率。 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N 个按键,显示在LED数码管上。单片机控制依据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

目录 第一章:系统功能要求-------------------------------------------------------- 4*4 矩阵式键盘系统概述------------------------------------------------ 本设计任务和主要内容--------------------------------------------------- 第二章:方案论证--------------------------------------------------------------- 第三章:系统硬件电路的设计------------------------------------------------ 单片机控制系统原理----------------------------------------------------- 原理图绘制说明---------------------------------------------------------- 画出流程图---------------------------------------------------------------- 原理图绘制--------------------------------------------------------------- 第四章:系统程序的设计------------------------------------------------------ 程序的编写步骤-----------------------------------------------------------

51单片机矩阵键盘模块

unsigned char KeyScan( ) //键盘扫描函数,使用行列反转扫描法{ unsigned char cord_h,cord_l;//行列值中间变量 P3=0x0f; //行线输出全为0 cord_h=P3&0x0f; //读入列线值 if(cord_h!=0x0f) //先检测有无按键按下 { DelayMs(10); //去抖 if((P3&0x0f)!=0x0f) { cord_h=P3&0x0f; //读入列线值 P3=cord_h|0xf0; //输出当前列线值 cord_l=P3&0xf0; //读入行线值 while((P3&0xf0)!=0xf0) ;//等待松开并输出 return(cord_h+cord_l);//键盘最后组合码值 } } return(0xff); //返回该值 } unsigned char KeyPro( ) { switch(KeyScan()) { case 0xee:return 0;break;//0 按下相应的键显示相对应的码值case 0xde:return 1;break;//1 case 0xbe:return 2;break;//2 case 0x7e:return 3;break;//3 case 0xed:return 4;break;//4 case 0xdd:return 5;break;//5 case 0xbd:return 6;break;//6 case 0x7d:return 7;break;//7 case 0xeb:return 8;break;//8 case 0xdb:return 9;break;//9 case 0xbb:return 10;break;//a case 0x7b:return 11;break;//b case 0xe7:return 12;break;//c case 0xd7:return 13;break;//d case 0xb7:return 14;break;//e case 0x77:return 15;break;//f default:return 0xff;break; } }

51单片机矩阵键盘特征码法法

#include #include unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x40,}; unsigned char temp; unsigned char display; unsigned char keyzhi=12; unsigned char temp1=0; /****************延时函数********************/ void deley(unsigned int xms) // {unsigned char i,j; // for(i=xms;i>0;i--) // for (j=115;j>0;j--); // } /***************按键检测函数**********************/ void key() { P0 =0xff; P0 =0Xf0; temp =P0; if (temp!=0xf0) {deley (10); temp =P0; if (temp!=0xf0)//消抖程序 { P0 =0xf0; temp =P0; P0 =0x0f; temp1 =P0; temp =temp|temp1; switch (temp) {case 0xed: keyzhi=0;break; case 0xdd: keyzhi=1;break; case 0xbd: keyzhi=2;break; case 0x7d: keyzhi=3;break; case 0xeb: keyzhi=4;break; case 0xdb: keyzhi=5;break; case 0xbb: keyzhi=6;break; case 0x7b: keyzhi=7;break; case 0xe7: keyzhi=8;break; case 0xd7: keyzhi=9;break; case 0xb7: keyzhi=10;break; case 0x77: keyzhi=11;break;}

相关文档
最新文档