独立按键程序

独立按键程序
独立按键程序

/********************************************************************

* 文件名:独立按键.c

* 描述: 该程序实现独立按键的判断,按了相应的独立按键后,

会在数码管上显示最先被按下的值,只有按复位按键或者重新开电才消失。* 创建人:2013年2月7日

* 版本号:1.0

* 杜邦线接法:

独立按键接法:

P3.2接J8的1端。

P3.3接J8的2端。

P3.4接J8的3端。

P3.5接J8的4端。

用8针排线把P0口和J12的1-8连接(P0.0接J12的1端)。

P2.0对应J13的8端。

***********************************************************************/

#include

#define uchar unsigned char

#define uint unsigned int

sbit KEY1 = P3^2;

sbit KEY2 = P3^3;

sbit KEY3 = P3^4;

sbit KEY4 = P3^5;

//数码管的段码编码

uchar table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/********************************************************************

* 名称: Delay_1ms()

* 功能: 延时子程序,延时时间为1ms * x

* 输入: x (延时一毫秒的个数)

* 输出: 无

***********************************************************************/

void Delay_1ms(uint i)

{

uint x,j;

for(j=0;j

for(x=0;x<=148;x++);

}

/********************************************************************

* 名称: Delay()

* 功能: 实现按键功能,并在LED上显示

* 输入: 无

* 输出: 无

***********************************************************************/ uchar KEY(void)

{

if(KEY1==0 || KEY2==0 || KEY3==0 || KEY4==0)

{

Delay_1ms(20); //20毫秒软件防抖

if(KEY1 == 0)

{

while(1)

{

if(KEY1 == 1)

{

Delay_1ms(20);;

if(KEY1 == 1)

{

break;

}

}

}

return 1;

}

else if(KEY2 == 0)

{

while(1)

{

if(KEY2 == 1)

{

Delay_1ms(20);

if(KEY2 == 1)

{

break;

}

}

}

return 2;

}

else if(KEY3 == 0)

{

while(1)

{

if(KEY3 == 1)

{

Delay_1ms(20);

if(KEY3 == 1)

{

break;

}

}

}

return 3;

}

else if(KEY4 == 0)

{

while(1)

{

if(KEY4 == 1)

{

Delay_1ms(20);

if(KEY4 == 1)

{

break;

}

}

}

return 4;

}

}

return 0;

}

/********************************************************************

* 名称: Main()

* 功能: 实现按键控制LED的显示

* 输入: 无

* 输出: 无

***********************************************************************/ void Main(void)

{

uchar temp;

while(1)

{

temp = KEY(); //判断是否有按键按下

if(temp != 0)

{

break; //如果按下,那么退出循环}

}

P0 = table[temp]; //显示是哪个按键按下了P2 = 0xfe;

while(1); //程序停止

}

独立式按键和一位数码显示

独立式按键和一位数码显示 一.实训目的: 1.练习按键编程 2.练习数码显示编程 二.实训任务: (可以根据实际条件改做类似按键和显示的实验) 1. 8个按键,分别对应一个子程序,按1号键,执行第一个子程序,按2号键执行第二个子程序,依此类推。 2.每个子程序功能是,在一位数码管上显示键号。 三.实训准备: 1.分析电路,准备材料,按图连接电路 2.分析任务,编写程序,并仿真调试 3.要求用散转指令实现多分支 参考仿真文件:按键数码.DSN 参考电路: 技能训练9-2参考电路图 说明:此图省略了单片机的复位和晶振电路,试验时必须要加上。 四.参考程序: M1: LCALL ANJIAN MOV A,R7 JZ M1 MOV 20H,A RL A ADD A,20H MOV DPTR,#TAB1 JMP @A+DPTR TAB1: LJMP PRG0

LJMP PRG1 LJMP PRG2 LJMP PRG3 LJMP PRG4 LJMP PRG5 LJMP PRG6 LJMP PRG7 LJMP PRG8 LJMP M1 PRG0: LJMP M1 PRG1: LCALL DISP LJMP M1 PRG2: LCALL DISP LJMP M1 PRG3: LCALL DISP LJMP M1 PRG4: LCALL DISP LJMP M1 PRG5: LCALL DISP LJMP M1 PRG6: LCALL DISP LJMP M1 PRG7: LCALL DISP LJMP M1 PRG8: LCALL DISP LJMP M1 ORG 0080H ANJIAN: MOV R7,#0 MOV A,P2 CPL A JZ ANJIANE MOV R6,#8 ANJIANL:CLR C RRC A INC R7 JC ANJIANE DJNZ R6,ANJIANL ANJIANE:RET

独立按键控制数码管

青岛农业大学海都学院 单片机课程设计实习报告 院系工程系 专业 2014级电气Z1班 学号 201471019 姓名隋永博 实习时间第11周 实习课程单片机应用课程设计 2015年11月6日

按键控制数码管加减显示 目录 一、前言 (3) 二、设计要求 (3) 三、系统硬件设计与说明 (4) 3.1系统组成及总体框图 (4) 3.2 AT89C51 (4) 四、系统软件设计与说明 (5) 4.1 软件部分的程序流程图 (5) 4.2 源程序 (5) 五、仿真过程描述 (7) 六、总结 (8)

一、前言 随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。 基于当前市场上的智能数字市场需求量大,其中数码管显示技术就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。以液晶显示技术的发展为背景,选择了比较常用的T6963C内置控制器型图形LCD(液晶显示嚣)模块,从应用角度介绍了该控制器的特点和基本功能,并描述了单片机控制T6963CLCD模块的显示机理。在此前提下以C51硬件开发语言为基础,给出了8051单片机与T6963C 的接口电路框图,并以字符、图形的具体显示方法为例简要介绍了软件的设计流程及实现。 二、设计要求 名称:K1-K4控制数码管移位显示 说明:按下K1时加1计数并增加显示位, 按下K2时减1计数并减少显示位, 按下K3时清零。

三、系统硬件设计与说明 3.1系统组成及总体框图 图1 系统硬件总图 3.2 AT89C51 该课程设计中我们选用的芯片是AT89C51。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash

按键控制键盘检测原理与应用

按键控制键盘检测原理与应用 一、任务目标: 认知目标 1、 掌握按键分类及工作原理 2、 掌握IF 条件选择结构和使用方法 3、 掌握循环结构和使用原理 4、 掌握独立按键子函数的编写原理及方法 1、独立键盘 在简单的单片机应用系统中,往往只需要几个功能键就能满足要求, 此时,可采用独立 式按键结构。 独立式按键是直接用 I/O 口线构成的单个按键电路,其特点是每个按键单独占用一根 I/O 口线,每个按键的工作不会影响其它 I/O 口线的状态。独立式按键的典型应用如图 1.2.1 所示。 独立式按键示意图 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根 I/O 口线,因此, 在按键较多时,I/O 口线浪费较大,不宜采用。 程序开始,检测按键是否被按下,若按下,则移动机器人启动,未被按下,继续检测。 这里将程序分成三个部分,分别是延时子函数、按键子函数、主函数。 延时子函数,通过参数 t 设置延时时间;按键模块子函数需用到延时函数,对按键进行 消抖;主函数主要调用按键检测程序,实现对移动机器人的控制。程序流程图如图 1.2.2所 示 xnu Lnu Jnu L] iu lu o 1 3 4 5 6 - IL I 」 IL IL IL IL IL IL- PPPPFFPP 3 S-I

程序示例: 在编写程序开始的部分,将系统头文件“STC89C52RC.H ”包含进来,对常用的变量类 型进行宏定义,规划各函数和变量,对变量进行定义和初始化,对自定义子函数进行声明并添加相应标注,程序开始部分如下 sbit IN仁P1A0; sbit IN2=P1A1; Void key(); 编写主函数,在主函数中就是调用按键检测函数。 Void mai n() { key(); } 编写key()按键检测函数,按键按下,输出低电平,通过if语句检测低电平,延时10ms 后,再次检测,若检测为高电平,则表示为机械抖动,若检测到低电平表示按键按下。 Void key() { if(IN1==0) { delay_ms(10); if(IN 仁=0) { while(IN 仁=0); IN2=~IN2 ; } } } 在上面的程序中,就只有一个检查按键扫描的函数key(),key()函数是检查有没有按键

(整理)独立式键盘控制灯移动.

课程设计说明书 课程名称:单片机原理及应用 设计题目:独立式键盘控制灯移动 院系:电子信息与电气工程系 学生姓名: 学号: 专业班级: 指导教师:

课程设计任务书

独立式键盘控制灯移动设计 摘要:单片机具有人机对话功能,开关、键盘是实现人机对话的主要输入设备,也是最常用的设备,通过它能发出各种控制命令和数据到单片机。本课题即针对拨动开关作为输入信号控制输出端拟定。该设计以8位AT89C52单片机为核心,以12MHZ晶振和电容构成外部时钟电路,用电容、电阻和开关组成复位电路,桥堆2W10和7805、电容组成电源电路为整个电路供电,桥堆2W10和7805、电容组成电源电路为整个电路供电,四个按键开关K1、K2、K3、K4分别与单片机P2.4、P2.5、P2.6、P2.7相连,组成独立式键盘接口输入电路;P1端口接8只发光二极管,用作输出演示。 关键词:AT89C52 共阳极二极管 7805 桥堆2W10

目录 1设计背景 (1) 1.1课题的提出…………………………………………………………‥1 1.2单片机的发展现状 (1) 2设计方案 (2) 2.1硬件部分设计方案 (2) 2.2软件部分设计方案 (2) 3方案实施 (2) 3.1硬件部分实施方案 (2) 3.2软件部分实施方案 (6) 4结果与结论 (8) 4.1结果 (8) 4.2结论 (8) 5收获与感谢 (8) 6参考文献 (8) 7附录 (9) 附录一仿真图 (9) 附录二元器件清单 (10) 附录三源程序 (11)

1.1课题的提出 随着单片机的运算速度和处理能力的不断提高,其在各个领域得到更广泛的应用。然而随着其应用领域的不断扩大及集成化的不断提高,单片机的发展与应用越来越智能化。单片机的智能化水平不断提高能够满足人们更多方面的需求。这里以AT89C52系列为例介绍一种人机对话功能,本课题针对独立式键盘的应用而拟定。四个按键开关分别与单片机相连,组成独立式键盘接口电路,8只发光二极管用作输出演示。 1.2单片机的发展现状 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。由于单片机有许多优点,因此其应用领域之广,几乎到了无孔不入的地步。单片机应用的主要领域有:1、智能化家用电器2、智能化家用电器3、商业营销设备4、工业自动化控制5、智能化仪表6、智能化通信产品7、汽车电子产品。 单片机应用的意义不仅在于它的广阔范围及所带来的经济效益。更重要的意义在于,单片机的应用从根本上改变了控制系统传统的设计思想和设计方法。以前采用硬件电路实现的大部分控制功能,正在用单片机通过软件方法来实现。以前自动控制中的PID调节,现在可以用单片机实现具有智能化的数字计算控制、模糊控制和自适应控制。这种以软件取代硬件并能提高系统性能的控制技术称为微控技术。随着单片机应用的广,微控制技术将不断发展完善。

独立按键控制LED灯

项目五独立按键控制LED灯 1.掌握独立按键消抖原理 2.掌握独立按键接口电路设计 1.设计独立按键控制LED的硬件电路 2.编写程序分别实现按下按键1和按键2,LED灯闪烁方式不同 3.下载程序到单片机中,运行程序观察结果并进行软硬件的联合调试 键盘是常见的计算机输入设备,在单片机应用中,按键可以设置电子钟的时间;简易计算器中,按键可以输入数字;按键还可以实现单片机中两个不同功能程序切换。本项目要求两个按键分别实现LDE灯的不同闪烁方式,按键1按下时,8个LED灯从右向左依次点亮,按键2按下时,8个LED灯从左向右依次点亮。 本项目只需2个按键实现LED灯闪烁方式控制,因此按键接口电路设计成独立按键。独立按键即每个按键直接与单片机I/O端口连接,当按键按下和弹开时,单片机I/O端口呈现不同的电平。独立按键接口电路可以设计成当按键按下时,单片机I/O端口为高电平或者低电平,读者可以根据自己的需求自行设计。单片机应用中的独立按键多是机械弹性开关,在按键按下和弹开时,由于按键的机械特性,有抖动产生。消除抖动有硬件方式和软件方式,软件方式就是编程读取I/O端口电平时,产生一个5ms~10ms延时后,再次读取I/O端口电平,以确认按键是否按下或弹开。

1.独立按键与矩阵按键 键盘是实现人机交互的重要计算机输入设备,其中按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。按键按照接口原理可分为编码键盘和非编码键盘,编码键盘是用硬件来实现对键的识别,非编码键盘由软件来实现按键的识别。非编码键盘按连接方式可分为独立按键和矩阵按键。 独立按键特点是每个按键占用一条I/O线,当按键数量较多时,I/O口利用率不高,但程序编制简单,适合所需按键较少的场合。矩阵按键特点是电路连接复杂,软件编程较复杂,但I/O口利用率高,适合需要大量按键的场合。下图为常见独立按键和矩阵按键接口电路。 图独立按键接口电路与矩阵按键接口电路上图四个按键(常开触点开关)S1,S2,S3,S4分别与单片机的四个I/O端口连接。当按键没有按下时,四个I/O端口的电压为高电平;当按键按下

独立按键控制LED灯

项目五独立按键控制LED灯 1. 掌握独立按键消抖原理 2. 掌握独立按键接口电路设计 3. 掌握独立按键控制LED灯的程序编写 於Q项目任务 1. 设计独立按键控制LED的硬件电路 2. 编写程序分别实现按下按键1和按键2,LED灯闪烁方式不同 3. 下载程序到单片机中,运行程序观察结果并进行软硬件的联合调试 键盘是常见的计算机输入设备,在单片机应用中,按键可以设置电子钟的时间;简易计算器中,按键可以输入数字;按键还可以实现单片机中两个不同功能程序切换。本项目要求两个按键分别实现LDE灯的不同闪烁方式,按键1按下时,8个LED灯从右向左依次点亮,按键2按下时,8个LED灯从左向右依次点亮。 卜项目分析 本项目只需2个按键实现LED灯闪烁方式控制,因此按键接口电路设计成独立按键。 独立按键即每个按键直接与单片机I/O端口连接,当按键按下和弹开时,单片机I/O端口呈 现不同的电平。独立按键接口电路可以设计成当按键按下时,单片机I/O端口为高电平或者 低电平,读者可以根据自己的需求自行设计。单片机应用中的独立按键多是机械弹性开关,在按键按下和弹开时,由于按键的机械特性,有抖动产生。消除抖动有硬件方式和软件方式,软件方式就是编程读取I/O端口电平时,产生一个5ms?10ms延时后,再次读取I/O端口 电平,以确认按键是否按下或弹开。

1. 独立按键与矩阵按键 键盘是实现人机交互的重要计算机输入设备,其中按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。按键按照接口原理可分为编码键盘和非编码键盘,编码键盘是用硬件来实现对键的识别,非编码键盘由软件来实现按键的识别。非编码键盘按连接方式可分为独立按键和矩阵按键。 独立按键特点是每个按键占用一条I/O线,当按键数量较多时,I/O 口利用率不高,但程序编制简单,适合所需按键较少的场合。矩阵按键特点是电路连接复杂,软件编程较复杂,但I/O 口利用率高,适合需要大量按键的场合。下图为常见独立按键和矩阵按键接口电路。 图独立按键接口电路与矩阵按键接口电路 上图四个按键(常开触点开关)S1,S2, S3, S4分别与单片机的四个I/O 端口连接。当按键没有按下时,四个I/O端口的电压为高电平;当按键按下时,电

任务3.3 独立按键的实现

任务3.3 独立按键 3.3.1 任务介绍 在数字钟中有四个独立按键,功能分别是调整、加、减、确定,用以调整系统的时间。在单片机系统中,键盘是基本和常用的接口,它是构成人机对话通话的一种常用方式,实现向单片机系统输入数据、传送命令等功能,是人工干预、设置和控制系统运行的主要手段。 本节的任务要求: 利用开发板上的四个按键,配合任务3.2数码管显示程序,实现数字钟的调时,为了简化程序,用3个LED的亮灭来代替对应数码管的闪烁(数码管的闪烁在这里有些难)。正常走时,3个LED都不点亮,当按下“调整”键时,“小时”对应的LED点亮,再次按下“调整”键,则“分”对应的LED点亮,然后再按下“调整”键,则“秒”对应的LED点亮,依次循环,直到按下“确定”键,三个LED返回到不点亮的状态。当按下“调整”键后,按下“加”或者“键”按键,则对应的数码管的显示值每次加1或者减1。 3.3.2 知识准备 1、轻触按键的认识 键盘分为编程键盘和非编程键盘。键盘上闭合键的识别由专用的硬件编码器来实现的为编程键盘,如计算机键盘;闭合键的识别由软件来实现的为非编程键盘,轻触按键属于非编程键盘。轻触按键具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统中。图3.3.1所示的是市面常见的轻触按键,从封装来区分,有贴片的,也有直插的;从引脚的数量来区分,有2个引脚的,也有4个引脚的。开发板上使用的按键时4引脚直插按键,尺寸为6×6×5,如图3.3.2所示。 图3.3.3 各种形状的按键图3.3.2 开发板使用的按键

2、按键的硬件电路和识别方法 图3.3.3是轻触按键的内部结构图,按键的4个引脚两两连通(可以用万用表测量),不连通的引脚,当按键被按下时,在金属弹片和反作用弹簧的作用下也会连通,当按键释放后,弹簧不起作用,引脚不连通。 图3.3.3 轻触按键内部结构图3.3.4 轻触按键的接口电路 图3.3.4是轻触按键的单片机接口电路,按键一端接地,另外一端接I/O口,同时通过上拉电阻接电源(上拉电阻大小5K~10K)。简单分析一下按键检测的原理:当按键没有按下的时候,单片机I/O通过上拉电阻R接到VCC,我们在程序中读取该I/O的电平的时候,其值为1(高电平); 当按键按下的时候,该I/O被短接到GND,在程序中读取该I/O的电平的时候,其值为0(低电平) 。这样,按键的按下与否,就和与该按键相连的I/O的电平的变化相对应起来。结论:我们在程序中通过检测到该I/O口电平的变化与否,即可以知道按键是否被按下,从而做出相应的响应。 3、检测按键按下 按键的检测原理看起来比较简单,我们按照上述的原理先试着写一段任务中的程序看看运行效果怎么样。程序实现的内容为:百位数内的计数器,,按键每按下一次,计数器加1,将计数器的值显示在开发板的两位数码管上。程序如下: #incldue #define uchar unsigned char #define uint unsigned int sbit KeyInput=P1^0; //按键接口 //段码 uchar code Seg7Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code Seg7Posit[]={0xfe,0xfd}; //位码 uchar DispBuffer[2]; //缓冲区

独立按键控制数码管

/*独立键盘控制数码管*/ #include //#include "intrins.h" sbit P34=P3^4; // LCDEN sbit P35=P3^5; // RS sbit P36=P3^6; //WR sbit P37=P3^7; //RD sbit dula=P2^6; //段选 sbit wela=P2^7; //位选 #define uint unsigned int #define uchar unsigned char uchar display_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x00}; //0、1、2、3、4、关闭数码管段选uchar display_data[]={0x3d,0x3b,0x37,0x2f,0x1f,0xff}; //第1、2、3、4位数码管、关闭位选 void delay(uint k) //延时程序 { uchar i,j; for(j=k;j>0;j--) for(i=250;i>0;i--); } void display(uchar i) //显示函数程序 { uchar j; for(j=0;j<5;j++) { P0=display_data[i]; /*位值送入位寄存器*/ wela=1; // _nop_(); // _nop_(); wela=0; P0=display_code[i]; /*段值送入段寄存器*/

dula=1; // _nop_(); // _nop_(); dula=0; delay(1); } } void main() { while(1) { P2=0x00; if(P34==0) //按键LCDEN按下 { delay(20); if(P34==0) { display(1); //在第四位显示1 while(P34==0) ; } } if(P35==0) //按键LCDEN按下 { delay(20); if(P35==0) { display(2); //在第三位显示2 while(P35==0) ; } }

单片机独立按键和矩阵按键

单片机按键(独立按键和矩阵按键) 独立按键 常用的按键电路有两种形式,独立式按键和矩阵式按键,独立式按键比较简单,它们各自与独立的输入线相连接,如图8-6 所示。 图8-6 独立式按键原理图 4 条输入线接到单片机的IO 口上,当按键K1 按下时,+5V 通过电阻R1 然后再通过按键K1 最终进入GND 形成一条通路,那么这条线路的全部电压都加到了R1 这个电阻上,KeyIn1 这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V 就应该是等电位,是一个高电平。我们就可以通过KeyIn1 这个IO 口的高低电平来判断是否有按键按下。 这个电路中按键的原理我们清楚了,但是实际上单片机IO 口内部,也有一个上拉电阻的存在。我们的按键是接到了P2 口上,P2 口上电默认是准双向IO 口,我们来简单了解一下这个准双向IO 口的电路,如图8-7 所示。

图8-7 准双向IO 口结构图 首先说明一点,就是我们现在绝大多数单片机的IO 口都是使用MOS 管而非三极管,但用在这里的MOS 管其原理和三极管是一样的,因此在这里我用三极管替代它来进行原理讲解,把前面讲过的三极管的知识搬过来,一切都是适用的,有助于理解。 图8-7 方框内的电路都是指单片机内部部分,方框外的就是我们外接的上拉电阻和按键。这个地方大家要注意一下,就是当我们要读取外部按键信号的时候,单片机必须先给该引脚写“1”,也就是高电平,这样我们才能正确读取到外部按键信号,我们来分析一下缘由。 当内部输出是高电平,经过一个反向器变成低电平,NPN 三极管不会导通,那么单片机IO 口从内部来看,由于上拉电阻R 的存在,所以是一个高电平。当外部没有按键按下将电平拉低的话,VCC 也是+5V,它们之间虽然有2 个电阻,但是没有压差,就不会有电流,线上所有的位置都是高电平,这个时候我们就可以正常读取到按键的状态了。 当内部输出是个低电平,经过一个反相器变成高电平,NPN 三极管导通,那么

独立按键程序

/******************************************************************** * 文件名:独立按键.c * 描述: 该程序实现独立按键的判断,按了相应的独立按键后, 会在数码管上显示最先被按下的值,只有按复位按键或者重新开电才消失。* 创建人:2013年2月7日 * 版本号:1.0 * 杜邦线接法: 独立按键接法: P3.2接J8的1端。 P3.3接J8的2端。 P3.4接J8的3端。 P3.5接J8的4端。 用8针排线把P0口和J12的1-8连接(P0.0接J12的1端)。 P2.0对应J13的8端。 ***********************************************************************/ #include #define uchar unsigned char #define uint unsigned int sbit KEY1 = P3^2; sbit KEY2 = P3^3; sbit KEY3 = P3^4; sbit KEY4 = P3^5; //数码管的段码编码 uchar table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /******************************************************************** * 名称: Delay_1ms() * 功能: 延时子程序,延时时间为1ms * x * 输入: x (延时一毫秒的个数) * 输出: 无 ***********************************************************************/ void Delay_1ms(uint i) { uint x,j; for(j=0;j

独立按键和矩阵按键

第八章独立按键和矩阵按键 我们和单片机之间进行信息交互,主要包含两大类,输入设备和输出设备。前边讲的LED小灯、数码管、点阵都是输出设备,这节课我们学习一下最常用的输入设备——按键。在本节课的学习过程中我们还会穿插介绍一点硬件设计的基础知识。 8.1 单片机最小系统电路解析 8.1.1 电源 我们在学习过程中,很多指标都是直接用的概念指标,比如我们说+5V代表1,GND代表0等等这些。但在实际电路中是没有这么精准的,那这些指标允许范围是什么呢?随着我们所学的内容不断增多,大家要慢慢培养一种阅读手册的能力。 比如我们使用STC89C52RC单片机的时候,我们找到他的手册的11页,第二个选项,工作电压:5.5V-3.4V(5V单片机),这个地方就说明我们这个单片机正常的工作电压是个范围值,只要电源VCC在5.5V到3.4V之间都可以正常工作,电压超过5.5V是绝对不允许的,会烧坏单片机,电压如果低于3.4V,单片机不会损坏,但是也不能正常工作。而在这个范围内,最典型、最常用的电压值就是5V,这就是后面括号里“5V单片机”这个名称的由来。除此之外,还有一种常用的工作电压范围是2.7V-3.6V、典型值是3.3V的单片机,也就是所谓的“3.3V单片机”了。日后随着大家接触的东西慢慢增多,对这点会有更深刻的理解。 现在我们再顺便多了解一点,大家打开74HC138的数据手册,会发现74HC138手册的第二页也有一个表格,上边写了74HC138的工作电压范围,最小值是4.75V,额定值是5V,最大值是5.25V,可以得知它的工作电压范围是4.75V-5.25V。这个地方讲这些目的是让大家清楚的了解,我们获取器件工作参数的一个最重要,也是最权威的途径,就是通过器件的数据手册。 8.1.2 晶振 晶振通常分为无源晶振和有源晶振两种类型,无源晶振一般称之为crystal(晶体),而有源晶振则叫做oscillator(振荡器)。 有源晶振是一个完整的谐振振荡器,他是利用石英晶体的压电效应来起振,所以有源晶振需要供电,当我们把有源晶振电路做好后,不需要外接电路,它就可以主动产生振荡频率,并且可以提供高精度的频率基准,信号质量比无源信号好。 而无源晶振自身无法振荡起来,它需要芯片内部的振荡电路一起工作才能振荡,它允许不同的电压,但是信号质量和精度较有源晶振差一些。相对价格来说,无源晶振要比有源晶振价格便宜很多。无源晶振两侧通常都会有两个电容,一般其容值都选在10pF~40pF之间,如果手册中有具体电容大小的要求则要根据要求来选电容,如果手册没有要求,我们用20pF 就是比较好的选择,这是一个长久以来的经验值,具有极其普遍的适用性。 我们来认识下比较常用的两种晶振的样貌,如图8-1和图8-2所示。

独立按键汇编程序

急求独立按键汇编程序 我自己写的一个拷面包炉的程式,可以给你参考。我的QQ:597430854 ;........................................................ K1 BIT P3.0 ;定义向下键在p3.0 K2 BIT P3.1 ;定义向上键在p3.1 K3 BIT P3.2 ;定义取消键在p3.2 K4 BIT P3.3 ;定义半烤键在p3.3 K5 BIT P3.4 ;定义开始键在P3.4 ;........................................................ LED1 BIT P1.6 ;定义LED1在P1.6 LED2 BIT P1.5 ;定义LED2在P1.5 LED3 BIT P1.4 ;定义LED3在P1.4 LED4 BIT P1.3 ; ... LED5 BIT P1.2 ; ... LED6 BIT P1.1 ; ... LED7 BIT P1.0 ; ... ;........................................................ RY1 BIT P3.5 ;继电器1半烤定义在P3.5口 RY2 BIT P3.7 ;继电器2定义在P3.7口 SPK BIT P1.7 ;喇叭定义在P3.4口 SS EQU 200 ;秒数值5MS*200=1秒 TSEC EQU 30H ;秒数变量 ID EQU 31H ;ID变量 TCOUNT EQU 32H ;秒数计数器 ORG 0H JMP START0 ORG 0BH JMP SET0 START0:CLR RY1 ;继电器1释放 CLR RY2 ;继电器2释放

单片机独立按键控制秒表

单片机实训报告 项目名称: 专业:班级: 企业指导老师:校内指导老师: 学号:姓名: 地点:时间: 二〇一九年月日

附件3-1: 进度检查及成绩评定表

目录 摘要 (4) 1实验内容要求及目的 (5) 1.1、实训内容 (5) 1.2、实训要求 (5) 1.3、实验目的 (5) 1.4、设计方案 (5) 2设计程序 (6) 2.1、1s定时程序框图 (6) 2.2、按键编程流程图 (6) 3绘制、调试仿真图 (7) 3.1 仿真软件简介 (7) 3.2 仿真图 (7) 3.3 仿真图调试 (7) 3.4调试步骤 (8) 4、绘制原理图、PCB图 (9) 5硬件电路制作 (10) 5.1、51单片机 (10) 5.2、78M05 (10) 5.3、电路板焊接 (10) 5.3.1焊接目的 (10) 5.3.2焊接步骤 (10) 5.3.3焊接的注意事项 (10) 5.4、电路板成果 (11) 5.5、调试 (11)

摘要 这是一篇关于用51单片机定时器做秒表的实验报告。该秒表可显示00.00~59.59秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、分的计时。综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计位!其中有四位数码管用来显示数据,显示时间分、秒。

任务七:独立式按键显示

任务七:独立式按键控制实验 此任务为4个独立按键,一旦按键被按下,则显示相应的数字,同时蜂鸣器滴一声。(1)电路图 主程序流程图

(3)程序 ORG 00H LJMP MAIN ORG 30H MAIN: MOV P2,#0FFH ;初始化 MOV P0,#0FFH MOV P1,#0FFH LOOP: MOV A,P1 ;输入P1口的状态, CPL A ;取反,无建按下,P1.4~1.7为“0” ANL A,#0F0H ;屏蔽无用的低四位 JZ LOOP ;A为“0”转移 LCALL DELAY; 延时10MS MOV A,P1 ;再判断 CPL A ANL A,#0F0H JZ LOOP JB ACC.4,KEY1 ;这一位为“1”转移 JB ACC.5,KEY2 JB ACC.6,KEY3 JB ACC.7,KEY4 LJMP LOOP KEY1: MOV P0,#0F9H MOV P2,#0F0H LCALL BEEP;调用蜂鸣器子程序 LJMP LOOP KEY2: MOV P0,#0A4H;显示“2”,此为段码值MOV P2,#0F0H ;控制哪一位显示 LCALL BEEP LJMP LOOP;返回,继续检测按键 KEY3: MOV P0,#0B0H MOV P2,#0F0H LCALL BEEP LJMP LOOP KEY4: MOV P0,#099H MOV P2,#0F0H LCALL BEEP LJMP LOOP DELAY:MOV R7,#40;延时10MS子程序 D1:MOV R6,#123 NOP D2:DJNZ R6, D2 DJNZ R7,D1 RET BEEP:MOV R5,#200;蜂鸣器滴一声子程序BEEP1: CLR P2.7 ;P3.7引脚不断输出 LCALL DEL ;方波,使蜂鸣器发 SETB P2.7 ;出声音,改变其输 LCALL DEL ;出频率,可调整蜂 DJNZ R5, BEEP1 ;鸣器音调 RET DEL:MOV R4,#225;供蜂鸣器使用延时DJNZ R4,$ RET END

51单片机独立按键实验

实验5 单片机独立按键控制数码管加1 我们在使用家用电器时经常需要通过按键给电器输入指令,让电器执行动作,比如电磁炉的开关,电饭煲定时时间设定等。我们知道单片机只能识别高低电平,对51单片机来说,0V为低,5V为高。按键就相当于一个开关,按下时候导通,按键弹开时断开。 机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图1(a)所示,抖动时间的长短与开关的机械特性有关,一般为5 ~10 ms。从图中可以看出,在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。(本学习板采用软件去抖方式)。软件去抖的流程图如图1(b)所示。 从按键的去抖流程图我们可以知道,检测到有键按下时,应延时等待一段时间(可调用一个5ms~10ms的延迟子程序),然后再次判断按键是否被按下,若此时判断按键仍被按下,则认为按键有效,若此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。键盘真正被按下才可进行相应的处理程序,此时基本就算实现了按键输入,进一步的话可以判断按键是否释放。 8个独立按键电路图 从图中可知独立式按键采用每个按键单独占用一根I/O 口线结构。当按下和释放按键时,输入到单片机I/O 端口的电平是不一样的,因此可以根据不同端口电平的变化判断是否有按键按下以及是哪一个按键按下。按键和单片机引脚连接并加了上拉电阻,这样当没有按

实验6 独立按键电路的设计与仿真

实验项目五独立按键电路的设计与仿真 [实验目的] 1.掌握独立键盘的工作原理 2.掌握独立键盘硬件电路的设计方法 3.掌握对独立键盘的控制方法 [实验原理] [实验仪器] PC机一台 [Proteus用到器件的关键词] 单片机(at89c52)、数码管(7seg-com-cathode)、排阻(respack-7)、按键(button)、蜂鸣器(buzzer active)

[实验内容与步骤] 1.用Proteus软件设计出独立键盘接口电路原理图。 2.用P2.1口来控制独立键盘ADDKEY,每按一次按键,让数码管显示的数值加1一次,一直加到9,再按一次,数码管重新显示0。同时,每按一次键,蜂鸣器会发“滴”的声音。3.在进行按键处理时,要注意按键去抖动的软件处理方法,在按键松开时要进行按键松手检测。 4.用Keil编写程序,完上上面所描述的任务,最后调试程序、编译后生成HEX文件。5.将HEX文件装载到MCU AT89C52中,单击Start按钮开始动态仿真。 [实验数据记录] ADDKEY BIT P2.1 BEEP BIT P2.6 ORG 0000H AJMP MAIN ORG 0050H MAIN: MOV P0,#00H LCALL DELAY MOV DPTR,#0100H LP: JB ADDKEY,$ ;检测到有键按下 CLR BEEP LCALL DELAY ;软件延时去抖 SETB BEEP JB ADDKEY,$ ;确实有键按下 JNB ADDKEY,$ ;松手检测 LCALL DISPLAY SJMP LP DISPLAY:MOVC A,@A+DPTR MOV P0,A INC DPTR CLR A MOV R2,DPL CJNE R2,#10,DONE ;数码显示到9,给DPL重新赋值,并清零计数器R2 MOV R2,#00H MOV DPL,#00H DONE: RET DELAY: MOV R0,#64H ;延时100ms DL1: MOV R1,#0C8H DL2: NOP NOP NOP DJNZ R1,DL2 DJNZ R0,DL1

独立按键连按和长按处理技巧

单片机按键处理技巧及编程方式 2010-10-23 15:01 从这一章开始,我们步入按键程序设计的殿堂。在基于单片机为核心构成的应用系统中,用户输入是必不可少的一部分。输入可以分很多种情况,譬如有的系统支持PS2键盘的接口,有的系统输入是基于编码器,有的系统输入是基于串口或者USB或者其它输入通道等等。在各种输入途径中,更常见的是,基于单个按键或者由单个键盘按照一定排列构成的矩阵键盘(行列键盘)。我们这一篇章主要讨论的对象就是基于单个按键的程序设计,以及矩阵键盘的程序编写。 ◎按键检测的原理 常见的独立按键的外观如下,相信大家并不陌生,各种常见的开发板学习板上随处可以看到他们的身影。 (原文件名:1.jpg) 引用图片 总共有四个引脚,一般情况下,处于同一边的两个引脚内部是连接在一起的,如何分辨两个引脚是否处在同一边呢?可以将按键翻转过来,处于同一边的两个引脚,有一条突起的线将他们连接一起,以标示它们俩是相连的。如果无法观察得到,用数字万用表的二极管挡位检测一下即可。搞清楚这点非常重要,对于我们画PCB的时候的封装很有益。 它们和我们的单片机系统的I/O口连接一般如下:

(原文件名:2.jpg) 引用图片 对于单片机I/O内部有上拉电阻的微控制器而言,还可以省掉外部的那个上拉电阻。简单分析一下按键检测的原理。当按键没有按下的时候,单片机I/O通过上拉电阻R接到VCC,我们在程序中读取该I/O的电平的时候,其值为1(高电平); 当按键S按下的时候,该I/O被短接到GND,在程序中读取该I/O 的电平的时候,其值为0(低电平) 。这样,按键的按下与否,就和与该按键相连的I/O的电平的变化相对应起来。结论:我们在程序中通过检测到该I/O口电平的变化与否,即可以知道按键是否被按下,从而做出相应的响应。一切看起来很美好,是这样的吗? ◎现实并非理想 在我们通过上面的按键检测原理得出上述的结论的时候,其实忽略了一个重要的问题,那就是现实中按键按下时候的电平变化状态。我们的结论是基于理想的情况得出来的,就如同下面这幅按键按下时候对应电平变化的波形图一样:

独立按键程序

#include "stc89rc52.h" sbit key_sr1=P2^0; sbit key_sr2=P2^2; sbit key_sr3=P2^3; sbit key_sr4=P2^1; #define uchar unsigned char #define uint unsigned int #define key_delay_time 10 // 按键去抖动延时的时间 uchar key_flge=0; //按键操作标志位 uchar key_value=0; //按键值 #define comtin_delaytime 40 //按键长按的设定时间 #define comtin_keyvalue 65 //按键长按后,均匀触发的时间间隔 uint key2_sr_comtin_count=0; //按键2连续触发的间隔延时计数器 uint key3_sr_comtin_count=0; //按键3连续触发的间隔延时计数器 uint key1_count_time=0; //按键1去抖动延时计数器 uint key2_count_time=0; //按键2去抖动延时计数器 uint key3_count_time=0; //按键3去抖动延时计数器 uint key4_count_time=0; //按键4去抖动延时计数器 uchar key1_lock=0; //按键1触发后自锁的变量标志 uchar key2_lock=0; //按键2触发后自锁的变量标志 uchar key3_lock=0; //按键3触发后自锁的变量标志 uchar key4_lock=0; //按键4触发后自锁的变量标志 /***按键扫描程序****/ void key_scan() { if(key_sr1==1) //IO是高电平,说明按键没有被按下 { key1_lock=0; //清零自锁的变量标志 key1_count_time=0; //清零去抖动延时计数器 } else if(key1_lock==0) //有按键按下,且是第一次被按下 { key1_count_time++; //去抖动延时计数变量自加 if(key1_count_time>key_delay_time) //自加超过设定的值,则按键在效{ key1_count_time=0; //清零去抖动延时计数器

独立按键控制LED灯

ARM 2110开发板,使用4个独立按键控制LED灯 KEY1控制LED1,KEY2控制LED2,KEY3控制LED3,KEY4控制LED4 #include "systemInit.h" // 定义LED #define LED_PERIPH1 SYSCTL_PERIPH_GPIOF #define LED_PORT1 GPIO_PORTF_BASE #define LED_PIN1 GPIO_PIN_1|GPIO_PIN_2 #define LED_PERIPH2 SYSCTL_PERIPH_GPIOB #define LED_PORT2 GPIO_PORTB_BASE #define LED_PIN2 GPIO_PIN_0|GPIO_PIN_1 // 定义KEY #define KEY_PERIPH1 SYSCTL_PERIPH_GPIOH #define KEY_PORT1 GPIO_PORTH_BASE #define KEY_PIN1 GPIO_PIN_1 #define KEY_PERIPH2 SYSCTL_PERIPH_GPIOB #define KEY_PORT2 GPIO_PORTB_BASE #define KEY_PIN2 GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4 // 主函数(程序入口) int main(void) { clockInit(); // 时钟初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH1); // 使能LED所在的GPIO端口 GPIOPinTypeOut(LED_PORT1, LED_PIN1); // 设置LED所在的管脚为输出 SysCtlPeriEnable(LED_PERIPH2); // 使能LED所在的GPIO端口 GPIOPinTypeOut(LED_PORT2, LED_PIN2); // 设置LED所在的管脚为输出 SysCtlPeriEnable(KEY_PERIPH1); // 使能KEY所在的GPIO端口 GPIOPinTypeIn(KEY_PORT1, KEY_PIN1); // 设置KEY所在管脚为输入 SysCtlPeriEnable(KEY_PERIPH2); // 使能KEY所在的

相关文档
最新文档