51单片机C语言实验及实践教程_8.按键识别方法之一

合集下载

51单片机及C语言入门教程

51单片机及C语言入门教程

51单片机及C语言入门教程本教程将介绍51单片机及C语言的入门知识,帮助初学者快速掌握这两个方面的基本内容。

以下是本教程的详细内容:一、51单片机概述(200字)51单片机是由Intel公司推出的一种常见的单片机芯片,具有广泛应用的特点。

它采用了Harvard结构,具有8位数据总线和16位地址总线。

其主要特点是结构简单、易于学习、应用广泛,适用于各种嵌入式系统。

二、C语言基础(300字)C语言是一种高级编程语言,具有跨平台、可移植性强等特点,被广泛应用于各种软件开发和嵌入式系统中。

学习C语言的基础知识是学习51单片机编程的必要前提。

C语言基础知识主要包括数据类型、变量、常量、运算符、表达式、流程控制语句等内容。

这些知识是学习C语言和51单片机编程的基础,需要仔细理解和掌握。

三、51单片机编程入门(400字)1. 搭建开发环境:首先需要安装51单片机的开发工具,如KeilC51等。

然后,连接单片机开发板和电脑,确保硬件连接正确。

2.了解开发板:学习使用51单片机的开发板是学习51单片机编程的第一步。

具体包括开发板上各个接口的功能和使用方法。

3.编写第一个程序:根据教材或教程,编写第一个简单的程序,如让LED灯闪烁等。

学习如何通过C语言编写程序,将其烧录到单片机中,并运行和调试。

四、C语言与51单片机的应用(300字)在学习了C语言和51单片机的基础知识之后,可以进一步学习它们的应用。

1.输入输出操作:学习如何通过51单片机与外部设备进行输入输出操作,如控制LED灯的亮灭、读取按键输入等。

2.定时器和中断:学习如何使用51单片机的定时器和中断功能来实现定时任务和外部事件处理。

3.串口通信:学习如何通过51单片机的串口通信功能与其他设备进行数据交换和通信。

五、实例项目及拓展应用(200字)完成了基础学习后,可以尝试一些实例项目,如温度测量系统、遥控器、电子钟等。

同时,可以进一步学习其他相关知识,如LCD显示、SPI 通信等,以扩展自己的应用能力。

51单片机独立按键实验

51单片机独立按键实验

实验5 单片机独立按键控制数码管加1我们在使用家用电器时经常需要通过按键给电器输入指令,让电器执行动作,比如电磁炉的开关,电饭煲定时时间设定等。

我们知道单片机只能识别高低电平,对51单片机来说,0V为低,5V为高。

按键就相当于一个开关,按下时候导通,按键弹开时断开。

机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。

其抖动过程如图1(a)所示,抖动时间的长短与开关的机械特性有关,一般为5 ~10 ms。

从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。

即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。

为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。

一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。

(本学习板采用软件去抖方式)。

软件去抖的流程图如图1(b)所示。

从按键的去抖流程图我们可以知道,检测到有键按下时,应延时等待一段时间(可调用一个5ms~10ms的延迟子程序),然后再次判断按键是否被按下,若此时判断按键仍被按下,则认为按键有效,若此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。

键盘真正被按下才可进行相应的处理程序,此时基本就算实现了按键输入,进一步的话可以判断按键是否释放。

8个独立按键电路图从图中可知独立式按键采用每个按键单独占用一根I/O 口线结构。

当按下和释放按键时,输入到单片机I/O 端口的电平是不一样的,因此可以根据不同端口电平的变化判断是否有按键按下以及是哪一个按键按下。

按键和单片机引脚连接并加了上拉电阻,这样当没有按键按下的时候,I/O 输入的电平是高电平,当有按键按下的时候,I/O 输入的电平是低电平。

虽然独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O 口线,因此,在按键较多时,I/O 口线浪费较大。

51单片机C语言实验及实践教程1

51单片机C语言实验及实践教程1

51单片机C语言实验及实践教程第一章:硬件资源模块第二章:keil c 软件使用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅1.闪烁灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅2.模拟开关灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅3.多路开关状态指示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅4.广告灯的左移右移at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅5.广告灯(利用取表方式)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅6.报警产生器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅7.I/O并行口直接驱动LED显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅8.按键识别方法之一at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅9.一键多功能按键识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅10.00-99计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅11.00-59秒计时器(利用软件延时)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅12.可预置可逆4位计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅13.动态数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅14.4×4矩阵式键盘识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅15.定时计数器T0作定时应用技术(一)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅16.定时计数器T0作定时应用技术(二)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅17.99秒马表设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅18.“嘀、嘀、……”报警声at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅19.“叮咚”门铃at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅20.数字钟(★)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅21.拉幕式数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅22.电子琴at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅23.模拟计算器数字输入及显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅24.8×8LED点阵显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅25.点阵LED“0-9”数字显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅26.点阵式LED简单图形显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅27.ADC0809 A/D转换器基本应用技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅28.数字电压表at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅29.两点间温度控制at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅30.四位数数字温度计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅31.6位数显频率计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅32.电子密码锁设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅33.4×4键盘及8位数码管显示构成的电子密码锁at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅34.带有存储器功能的数字温度计-DS1624技术应用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅35DS18B20数字温度计使用第一章AT89S51单片机实验及实践系统板简介AT89S51单片机实验及实践系统板(以后简介系统板)集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者及单片机开发者提供不同的开发环境。

51单片机按键检测

51单片机按键检测
按键的相关基础知识简介
对与很多基础比较薄弱的同学可能对 电子器件的实物没有一个感性的认识, 那么就让我们首先来看一下什么是按 键,还有他在我们的风云51基础实验 板中的电路原理图。
风云51实验板实物图
风云51实验板按键连接原理图
单片机IO口独立按键检测原理
由以上电路原理图可以看出,按键的一端与 电源地相连,另一端与单片机的P1口相连, 这也就意味着当按键按下的时候与按键相连 单片机IO口将被拉低,换句话说,当单片机 检测到与按键相连的IO口被拉低就证明此按 键被按下,那门我们将此功能上一个层次来 说呢,按键就是一个人机接口。那么按键的 操作并没有我们想象的“按下松开”那么简 单,在实际应用中,手动操作需要消抖。
按键按下产生的波形图
硬件与非门消抖
硬件与非消抖
图中两个“与非”门构成一个RS触发器。当按键未按下 时,输出为1;当键按下时,输出为0。此时即使用按键的 机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳 开B),只要按键不返回原始状态A,双稳态电路的状态 不改变,输出保持为0,不会产生抖动的波形。也就是说, 即使B点的电压波形是抖动的,但经双稳态电路之后,其 输出为正规的矩形波。这一点通过分析RS触发器的工 作过程很容易得到验证。
按键的消抖
通常的按键所用开关为机械弹性开关,当机械触点断开、闭 合时,电压信号小型如下图。由于机械触点的弹性作用,一 个按键开关在闭合时不会马上稳定地接通,ቤተ መጻሕፍቲ ባይዱ断开时也不会 一下子断开。因而在闭合及断开的瞬间均伴随有一连串的 抖动,如下图。抖动时间的长短由按键的机械特性决定,一 般为5ms~10ms。这是一个很重要的时间参数,在很多场 合都要用到。按键稳定闭合时间的长短则是由操作人员的 按键动作决定的,一般为零点几秒至数秒。键抖动会引起一 次按键被误读多次。为确保CPU对键的一次闭合仅作一次 处理,必须去除键抖动。在键闭合稳定时读取键的状态,并 且必须判别到键释放稳定后再作处理。按键的抖动,可用硬 件或软件两种方法。

51单片机C语言实验及实践教程--Keil C软件使用

51单片机C语言实验及实践教程--Keil C软件使用

本文由lbcumt贡献 doc文档可能在WAP端浏览体验不佳。

建议您优先选择TXT,或下载源文件到本机查看。

Keil C 软件使用 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持 汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。

 下面介绍 Keil C51 软件的使用方法 进入 Keil C51 后,屏幕如下图所示。

几秒钟后出现编辑界 启动 Keil C51 时的屏幕 进入 Keil C51 后的编辑界面 简单程序的调试 学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。

下面通过简单的编 程、调试,引导大家学习 Keil C51 软件的基本使用方法和基本的调试技巧。

 1)建立一个新工程 单击 Project 菜单,在弹出的下拉菜单中选中 New Project 选项 2)然后选择你要保存的路径,输入工程文件的名字,比如保存到 C51 目录里,工程文件的名 字为 C51 如下图所示,然后点击保存. 3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,k eil c51 几乎支持所有的 51 核的单片机,我这里还是以大家用的比较多的 Atmel 的 89C51 来 说明,如下图所示,选择 89C51 之后,右边栏是对这个单片机的基本的说明,然后点击确定. 4)完成上一步骤后,屏幕如下图所示 到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

 5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项 新建文件后屏幕如下图所示 此时光标在编辑窗口里闪烁, 这时可以键入用户的应用程序了, 但笔者建议首先保存该空白 的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在 “文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。

51单片机C语言编程基础及实例

51单片机C语言编程基础及实例

51单片机C语言编程基础及实例C语言是一门通用计算机编程语言,应用广泛。

下面是小编整理的51单片机C语言编程基础及实例,希望对大家有帮助!单片机的外部结构:DIP40双列直*;P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)电源VCC(PIN40)和地线GND(PIN20);高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)四个8位通用I/O端口,对应引脚P0、P1、P2和P3;两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 一个串行通信接口;(SCON,SBUF)一个中断控制器;(IE,IP)针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。

C语言编程基础:十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。

如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。

++var表示对变量var先增一;var—表示对变量后减一。

x|=0x0f;表示为x=x|0x0f;TMOD=(TMOD&0xf0)|0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。

While(1);表示无限执行该语句,即死循环。

语句后的分号表示空循环体,也就是{;}在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)代码#include//该头文档中有单片机内部资源的符号化定义,其中包含P1.3voidmain(void)//void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口{P1_3=1;//给P1_3赋值1,引脚P1.3就能输出高电平VCCWhile(1);//死循环,相当LOOP:gotoLOOP;}注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。

51单片机c语言教程

51单片机c语言教程

51单片机c语言教程在本教程中,我们将学习如何在51单片机上使用C语言进行编程。

无论您是初学者还是有一定经验的开发者,本教程都将对您有所帮助。

首先,我们需要了解一些基本概念。

51单片机是一种基于哈弗微电子公司的MCS-51架构的微控制器。

它采用了Harvard结构,即将程序存储器和数据存储器分开。

它具有各种功能和接口,可以满足不同的应用需求。

在使用C语言进行51单片机编程之前,必须安装相应的开发工具。

这里我们推荐使用Keil C51开发环境。

安装完成后,我们就可以开始编写第一个程序了。

#include <reg51.h>void main(){// 在这里编写您的代码}以上是一个简单的C语言程序模板。

我们使用了reg51.h头文件,该文件包含了与51单片机相关的寄存器定义和常量。

接下来,我们可以开始编写具体的功能代码了。

例如,如果我们想要在LED灯上闪烁一个简单的模式,可以使用以下代码:#include <reg51.h>sbit LED = P1^0;void main(){while(1){LED = 0; // 点亮LEDdelay(1000); // 延时1秒LED = 1; // 熄灭LEDdelay(1000); // 延时1秒}}在这个程序中,我们首先定义了一个LED的控制引脚,然后通过循环实现了闪烁的功能。

在每次循环中,我们先点亮LED,然后通过调用延时函数延时1秒,再将LED熄灭,再次延时1秒。

这样就形成了一个简单的LED闪烁效果。

除了控制IO口外,51单片机还可以实现其他各种功能,如定时器、串口通信等。

这些功能的实现也都可以通过C语言来完成。

希望通过本教程,您可以对51单片机的C语言编程有一个基本的了解。

在以后的学习中,您可以深入研究这些知识,并通过实践来提升自己的能力。

祝您学习愉快!。

51单片机实验报告按钮开关精品文档6页

51单片机实验报告按钮开关精品文档6页

单片机实验制作实验题目:按钮开关应用实验完成时间:2013年5月31日系别:班级:姓名:学号:按钮开关应用实验一、实验目的1.掌握七段LED数码管的结构及工作原理;2.掌握共阳极LED数码管连接方法、及其静态和动态显示方法;3.进一步掌握并行接口芯片8255A的使用方法;4.掌握独立式按键的控制方法的设计。

二、实验器材七段LED数码管 89S51单片机三个按钮开关 30pF的两个微电容 1个0.1uF电容晶振限流电阻(220欧7个、10千欧2个、100千欧1个)导线若干三、实验说明1.按一下PB1按钮,LED数码管会显示一个数字1,再按一下会显示数字2,就这样连续按,数字将会从1依次变到9。

2.按一下PB0按钮(复位键),LED数码管上的数字将会从9归零。

3.按一下PB2按钮,LED数码管上的数字将从0变到9,连续按数字将会从9逐一的变到0。

4.所以此按钮开关的运用可以通过PB1按钮和PB2按钮以及PB0按钮的控制来进行简单的计数功能。

四、实验原理1.七段LED数码管的组成如图1所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。

通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。

LED 数码管中的发光二极管共有两种连接方法:共阳极接法:把发光二极管的阳极连在一起构成公共阳极。

使用时公共阳极接+5V。

这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

常用的七段LED数码管尺寸与引脚配置图七段LED数码管的七个LED组合图如图12.七段LED数码管的显示代码把发光二极管的阳极连在一起构成公共阳极。

使用时公共阳极接+5V。

这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。

七段发光二极管,再加上一个小数点位,共计八段。

项目3__51单片机按键识别的设计

项目3__51单片机按键识别的设计

任务2
多路按键状态指示的设计
• B) 反转法: 1)行输入、列输出,将列输出端全置为0, 通过接口读取行线电平,判断行的位置 2)列输入、行输出,将行输出端全置为0, 通过接口读取列线电平,判断列的位置 综合两步获取按键号。
任务2
多路按键状态指示的设计
• 3.矩阵式键盘的软件设计 • 无论采用哪种方式,都要编制相应的键盘扫描程 序。在键盘扫描程序中一般要完成以下几个功能: • (1)判断键盘上有无按键按下; • (2)去键的机械抖动影响; • (3)求所按键的键号; • (4)转向键处理程序。
任务2
多路按键状态指示的设计
◇ 知识链接
• 一、矩阵式键盘 • 1.结构和工作原理 • 当输入部分有多个按键时,若仍然采用独立键盘, 必然会占用大量的I/O口,采用矩阵键盘是一种比 较节省资源的方法。矩阵式键盘又称行列式键盘, 往往用于按键数量较多的场合。矩阵式键盘的按 键设置在行与列的交点上。
任务3
任务2
单键控制LED的设计
软件消抖流程图
任务2
单键控制LED的设计
1.提出任务 • 用单键(即独立键盘中的按键)实现对LED进行控制, 每按一次按键时,LED 方式变化一次,用以表示按键控 制的结果。
2.任务分析 • (1)硬件电路设计 • 以8051单片机作为控制电路,按键连接至单片机的P1.4 引脚,另一端接地,P2.0口外接1个采用共阳极连接方式 的发光二极管(LED)和 1个限流电阻,硬件电路原理 图所示。
main() { while(1) { key=keyscan( ); if(key!=16) //显示二进制键 值 P2=~key; else P2=0xff; //无按键不显示
} }

基于51单片机的按键识别实验内容设计

基于51单片机的按键识别实验内容设计

基于51单片机的按键识别实验内容设计作者:曹晓龙来源:《课程教育研究》2019年第19期【摘要】讨论了一种用于单片机实验教学中有关矩阵式按键识别实验内容的设计。

通过设置从简单到复杂的按键识别内容,加深了学生对这一技术的理解。

【关键词】单片机; 按键识别; 实验教学【中图分类号】G42 【文献标识码】A 【文章编号】2095-3089(2019)19-0223-01单片机的应用早已渗透到了我们社会生产、生活的方方面面。

例如在航海[1]、医疗[2]、智能家居[3]等方面都有其应用。

因此,了解单片机的原理并能掌握单片机系统的设计、开发一直是电子信息类及其相关专业学生学习的终极目标[4]。

一、实验内容的现状单片机是一门实践性很强的课程。

其主要内容是在了解单片机主要构成的基础上,能够结合其他外围电路构建控制系统。

为了加强学生对单片机设计技術的掌握,实验环节在整个教学中占据了一定的比重。

实验主要分为验证性及设计性两种类型。

验证性有具体的电路及程序,无需学生自行设计。

而设计性需要学生在理解所学的内容基础上,设计电路并写出驱动程序。

验证性实验的设置是否得当,必将对学生的理解以及后期的设计产生很大影响。

为此本文以单片机中“按键识别”的实验内容设计为基础,讨论一种可加深学生理解并掌握其实现原理的实验内容设计。

二、按键识别当前的实验内容单片机的按键识别原理实验的主要内容是让学生了解单片机与4×4矩阵式按键的电路原理图以及程序设计的思想。

大致需要学生了解的信息是:1)4×4的矩阵按键通过单片机的某个并口接入,并口的四位为一组,分别接入矩阵按键中的行和列。

2)为了能够识别按下的键,依次从第一行开始为低电平,检测在这一行上是否存在某一列也为低电平,依行数与列数即可确定被按下的键。

3)按键识别的消除抖动及键释放问题。

实验中按键数量多,电路相对复杂,而用于识别的程序代码也过长,对初次接触单片机及汇编语言的学生而言,在理解整个过程及原理上存在一定的困难。

51单片机C语言实验及实践教程_8.按键识别方法之一

51单片机C语言实验及实践教程_8.按键识别方法之一

3. 系统板上硬件连线
图 4.8.1
(1. 把“单片机系统”区域中的 P3.7/RD 端 口连接到“独立式键盘”区域中的 SP1 端口上;
(2. 把“单片机系统”区域中的 P1.0-P1.4 端口用 8 芯排线连接到“八路 发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0 连接到 L1,P1.1 连接到 L2,P1.2 连接到 L3,P1.3 连接到 L4 上。
4. 程序设计方法
(1. 其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,
也就是说,当我们按下一个按键时,总希望某个命令只执行一次,而
在按键按下的 过程中,不要有干扰进来,因为,在按下的过程中,
一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。因
此在按键按下的时候,
图 4.8.2
void main(void) {
while(1) { if(P3_7==0) { delay10ms(); if(P3_7==0) { count++; if(count==16) { count=0; } P1=~count; while(P3_7==0); } } }
}
(2. 但对程序设计过程中按键识别过程的框图如右图所示:
5. 程序框图
6. 汇编源程序
ORG 00H
START: 0,表示从 0 开始计数
MOV R1,#00H
MOV A,R1
CPL A
;初始化 R7 为 ;
;取反指

MOV P1,A
;送出 P1 端口由发光二极管显示
REL:
JNB P3.7,REL
51 单片机 C 语言实验及实践教程_8.按键识别方法之一

单片机按键的识别与显示实验报告

单片机按键的识别与显示实验报告

单片机按键的识别与显示实验报告
一、实验目的
1.掌握单片机I/O的工作方式;
2.掌握单片机以串行口方式0工作的LED显示;
3.掌握按键的识别和LED显示的编程方法。

二、实验器材
1.G6W仿真器一台。

2.MCS—51实验板一台。

3.PC机一台。

4.电源一台。

三、实验内容及要求
8051单片机的PI口作为8个按键的输入端,构成独立式键盘。

四个LED显示器通过四个串/井移位寄存器74L51644接口至8051的串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示的段码数据,TXD则作为发送时钟来对显示数据进行移位操作。

编写一个计算器程序,当某一键按下时可执行相应的加、减、乘、除运算方式,在四个显示器上显示数学算式和最终计算结果。

注:①通过按键来选择加、减、乘、除四种运算方式。

②输入两个数字均为一位十进制数,可预先放在内存中。

手把手教你学51单片机(C语言版)

手把手教你学51单片机(C语言版)
10.1 数字秒表实例
10.1.2 定时时间精准性调 整
10.1.4 数码管扫描函数算 法改进
12
Part One
11 UART串口通信
11 UART串口通信
11.1 串行通信的 初步认识
11.2 RS-232通 信接口
11.3 USB转串口 通信
11.4 IO口模拟 UART串口通信
11.5 UART串口 通信的基本应用
A
C
E
13.2 1602整屏 移动
13.4 计算器实 例
13.6 练习题
13.1 通信时序 解析
13.3 多.c文件 的初步认识
B
13.5 串口通信机制 和实用的串口例程
D
F
15
Part One
14 I^2C总线与E^2PROM
14 I^2C总线与E^2PROM
14.1 I2C时 序初步 认识
14.2 I2C寻 址模式
18 RS-485通信与Modbus协议
01
18.1 RS485通信
02
18.2 Modbus 通信协议介绍
18.2.1 Modbus协议 特点 18.2.2 RTU协议帧数 据
03
18.3 Modbus 多机通信例程
04
18.4 练习题
20
Part One
19 实践项目开发——多功能电子钟
19 实践项目开发——多功能电子钟
1.6 答读者问
03
Part One
2 点亮你的LED
2 点亮你的LED
2.1 单片机的 内部资源
2.2 单片机最 小系统
2.3 LED小灯
2.6 练习题
2.5 程序下载

51系列单片机实验实训教材(汇编语言及C语言)(第1版)

51系列单片机实验实训教材(汇编语言及C语言)(第1版)

国家示范性高等职业院校重点建设专业机电一体化技术专业《51系列单片机》实验实训教材(汇编语言及C语言)(第一版)刘克编制机械系·机电教研室二○一三年二月实验操作工作单项目一、数据传送(RAM–>XRAM)专业班级姓名学号小组日期一、目的熟悉星研集成环境软件或熟悉Keil C51集成环境软件的使用方法。

熟悉MCS51汇编指令,认识内外部数据段的传送、校验,并逐条标注。

二、实验内容1、熟悉星研集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。

2、熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法3、读取程序,认识内外部数据段的传送、校验,并逐条标注。

三、程序框图开始堆栈指针初始化计数器、地址初始化内部RAM数据传送外部RAM一次地址指针+1计数器-1=0?计数器、地址指针复位取内部RAM和对应的外部RAM比较是否相等地址指针+1计数器-1=0?传送正确传送错误结束NNYYYN数据传送程序框图四、实验步骤在内部RAM 30H ~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM的1000H ~100FH中的内容。

熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。

五、程序清单(Convction.asm);将内部RAM Address1 开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。

Address1 DATA 30HAddress2 XDATA 1000HORG 0000HLJMP STARORG 0100HSTAR: MOV SP,#60HMOV R0,#Address1MOV DPTR,#Address2MOV R7,#10HSTAR1: MOV A,@R0MOVX @DPTR,AINC R0INC DPTRDJNZ R7,STAR1MOV R0,#Address1MOV DPTR,#Address2MOV R7,#10HSTAR2: MOV B,@R0MOVX A,@DPTRCJNE A,B,STAR3INC R0INC DPTRDJNZ R7,STAR2SJMP $STAR3: SJMP $END六、思考题:1、运行程序前,打开变量窗、二个存贮器窗(一个选择片内数据,起始地址选择30H;一个选择片外数据,起始地址选择1000H),每个存贮器窗有四个标签,有何好处?;2、使用单步进入命令,第一次运行到“DJNZ R7,STAR1”后,运行过程中变量窗有何变化?将鼠标停留在A、SP、@R0、@DPTR上一秒后,出现什么?,它与变量窗使用场合的区别?3、在“CJNE A,B,STAR3”上,设置一个断点,使用全速断点命令运行几次,观察运行结果,它与运行到光标处命令有何区别?4、使用全速运行命令,稍后,点击工具条上停止运行命令按钮,当前执行箭头停在哪一行?运行结果是否正确?它与全速断点运行命令有何区别?5、观察寄存器,有哪几种方法?1)在工作区窗的通用寄存器标签视中;2)变数窗3)鼠标停留在寄存器上4)观察窗5)寄存器窗6、查看CPU内部数据RAM、CPU片外数据RAM:1)存贮器窗 2)变量窗3)鼠标停留在CPU内部数据RAM、CPU片外数据RAM的地址、@R0、@DPTR上七、考核评价考核内容与要求考核办法扣分备注小组长指导教师(1)纪律性(10分)纪律和考勤制度。

一种实用的单片机按键检测方式

一种实用的单片机按键检测方式

一种实用的单片机按键检测方式《手把手教你学51单片机》第八课讲解按键相关内容的时候,介绍了一种状态检测扫描按键的办法,既可以检测按键,又可以有效消抖。

但是部分同学以前没有接触过类似的思想和方式,所以可能接受起来有点难度,这里我再详细给讲解分析一下,如果教程第八课你已经彻底明白,那么这里可以不用再学习了,如果还模模糊糊,可以再巩固一下。

1、独立按键常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如下图所示。

4条输入KeyIn1、KeyIn2、KeyIn3、KeyIn4接到单片机的IO口上,当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就和GND等电位,是个低电平。

当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V就应该是等电位,是一个高电平。

我们就可以读取通过KeyIn1这个IO口的高低电平来判断是否有按键按下,独立按键的原理还是很简单的。

2、矩阵按键在某一个系统设计中,如果需要使用很多的按键时,做成独立按键会大量占用IO口,因此我们引入了矩阵按键的设计方式,如下图所示,用了8个IO口实现了16个按键检测的电路。

上图,一共有4组按键,我们只看其中一组,如下图所示。

大家认真看一下,如果KeyOut1输出一个低电平,KeyOut1就相当于是GND,是否相当于4个独立按键呢。

当然这时候KeyOut2、KeyOut3、KeyOut4都必须输出高电平,它们都输出高电平才能保证与它们相连的三路按键不会对这一路产生干扰,大家可以对照两张原理图分析一下。

同理,可以将KeyOut1,KeyOut3,KeyOut4都拉高,把KeyOut2拉低,来读取KEY5到KEY8的值。

关于按键扫描的具体程序部分,大家可以去参考教程,我这里只把一段摘出来给大家讲一下,部分同学对其中一条语句有所疑问。

单片机原理(按键识别 )实验报告

单片机原理(按键识别 )实验报告
while(x--); } void main() {
教育资料
.
while (1) {
if(key==0) {
delay(1000); if(key==0) {
led=~led; while(key==0); }
} } } (2)按键识别 ( 按下灭,再按闪) #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit led=P2^6; sbit key=P2^7;
.
switch(j) { case 0 : led=0;break; case 1 : led=~led;delay(100);break; default:break; }
}
}
(3)按键识别 ( 按下数码管数值加 1) #include<reg51.h> #define uint unsigned int #define uchar unsigned char uchar code LedCode[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00}; uchar DispBuf[8]; sbit led=P2^6;
教育资料
.
if(hour>=24) {
hour=0; }
}
void main() {
uint i=2; while (1) {
if(key==0) {
delay(1000); if(key==0) {
i++; while(key==0); i=i%3;
教育资料
.
} } switch(i)

《51单片机基础实验与课程实训教程(C语言版)》电子教案 第1章 单片机C程序基础

《51单片机基础实验与课程实训教程(C语言版)》电子教案 第1章 单片机C程序基础
第1章 单片机C程序基础
• 1.1 Keil C程序基本结构 • 1.2 变量、常数与数据类型 • 1.3 存储器的形式与模式 • 1.4 Keil C的运算符 • 1. 5 Keil C的流程控制
下一页 返回
第1章 单片机C程序基础
• 1. 6 数组与指针 • 1. 7 函数与中断子程序 • 1.8 Keil C的预处理命令 • 1.9 Keil C的编程规范
上一页 下一页 返回
1. 2 变量、常数与数据类型
• 若要使用*bll数据类型,则其声明存储器形式的变量,再声明属于该变量的sbit变
量,语句为: • char bdata scan; /*声明*can为bdata存储器类型的字符*/ • sbit inpul_0 = scanfn; /*声明inpul_0为*can变量的bit0*/ • 2)先声明一个sfr变量,再声明属于该变量的sbit变量 • 3)直接指定存储器位置 • 这种声明必须要熟记每个地址才行。 • (3) sfr数据类型 • sfr数据类型是用于8 x51内部特殊功能寄存器(寄存器名称使用大写),
• 数据类型 常数/变量名称[=默认值]; • 其中的“[=默认值]”并非必要项目,而分号是结束符号。
• 1.2. 1数据类型
• 在使用常数或变量时,首先必须要声明数据类型,其日的是让编译程 序为该常数或变量保留存储器空间。要保留多大的存储空间?这与常 数或变量的数据类型有关。
• Keil C所提供的数据类型可分为通用数据类型和8 x51特有的数据类 型。
上一页 下一页 返回
1. 1 Keil C程序基本结构
• 2.注释 • 所谓“注释”就是说明,属于编译器不处理的部分。 • C语言的注释以“/*”开始,以“*/”结束。另外,也可以输入“//”,其
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机C语言实验及实践教程_8.按键识别方法之一
发布: 2009-4-04 12:57 | 作者: 孙青安 | 查看: 88次
1.实验任务 I/O并行口直接驱动LED显示
每按下一次开关SP1,计数值加1,通过AT89S51单片机的P1端口的P1.0到P1.3显示出其的二进制计数值。

2.电路原理图
图4.8.1
3.系统板上硬件连线
(1.把“单片机系统”区域中的P3.7/RD端
口连接到“独立式键盘”区域中的SP1端口上;
(2.把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0连接到
L1,P1.1连接到L2,P1.2连接到L3,P1.3连接到L4上。

4.程序设计方法
(1.其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说,当我们按下一个按键时,总希望某个命令只执行一次,而
在按键按下的过程中,不要有干扰进来,因为,在按下的过程中,
一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。


此在按键按下的时候,图4.8.2
要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除
掉,一般情况下,我们可以采用电容来滤除掉这些干扰信号,但实际
上,会增加硬件成本及硬件电路的体积,这是我们不希望,总得有个
办法解决这个问题,因此我们可以采用软件滤波的方法去除这些干扰
信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着
一定的干扰信号,按下之后就基本上进入了稳定的状态。

具体的一个
按键从按下到释放的全过程的信号图如上图所示:
从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时5ms
以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程。

从而提高了系统的可靠性。

由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。

(1.对于按键识别的指令,我们依然选择如下指令JB BIT,REL指令是用来检测BIT是否为高电平,若BIT=1,则程序转向REL处执行程序,
否则就继续向下执行程序。

或者是JNB BIT,REL指令是用来检测
BIT是否为低电平,若BIT=0,则程序转向REL处执行程序,否则就
继续向下执行程序。

(2.但对程序设计过程中按键识别过程的框图如右图所示:
5.程序框图
6.汇编源程序
ORG 00H
START: MOV R1,#00H ;初始化R7为
0,表示从0开始计数
MOV A,R1 ;
CPL A ;取反指令
MOV P1,A ;送出P1端口由发光二极管显示
REL: JNB P3.7,REL ;判断SP1是否按下
LCALL DELAY10MS ;若按下,则延时10ms左右
JNB P3.7,REL ;再判断SP1是否真得按下
INC R7 ;若真得按下,则进行按键处理,使
MOV A,R7 ;计数内容加1,并送出P1端口由
CPL A ;发光二极管显示
MOV P1,A ;
JNB P3.7,$ ;等待SP1释放
SJMP REL ;继续对K1按键扫描
DELAY10MS: MOV R6,#20 ;延时10ms子程序
L1: MOV R7,#248
DJNZ R7,$
DJNZ R6,L1
RET
END
7.C语言源程序
#include <AT89X51.H>
unsigned char count;
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main(void)
{
while(1)
{
if(P3_7==0)
{
delay10ms();
if(P3_7==0)
{
count++;
if(count==16) {
count=0;
}
P1=~count;
while(P3_7==0); }
}
}
}。

相关文档
最新文档