独立按键汇编程序

独立按键汇编程序
独立按键汇编程序

急求独立按键汇编程序

我自己写的一个拷面包炉的程式,可以给你参考。我的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释放

MOV TCOUNT,#00H ;TO计数清0

MOV TSEC,#00H ;秒数清0

MOV ID,#00H ;ID清0

MOV P1,#01110111B 1口开始时为01110111

MOV ID,#00H ;ID清0

MOV A,ID

ADD A,#04H

MOV ID,A

MOV TCOUNT,#00H

MOV TMOD,#00000001B

MOV TL0,#236

MOV TH0,#120

SETB TR0

LOOP:JB K1,M1 ;判断K1是否按下,BIT=1时,转M1,BIT=0时,继续

LCALL DELAY ;

JB K1,LOOP ;

JMP START ;

M1:JB K2,M2 ;判断K2是否按下,BIT=1时,转M2,BIT=0时,继续

LCALL DELAY ;

JB K2,M1;

JMP START1

M2:JB K5,M3 ;开始键盘按下

LCALL DELAY ;

JB K5,LOOP ;

MOV A,ID

JMP SET0

M3:JB K4,M4

LCALL DELAY ;

JB K4,LOOP ;

CPL RY1

CALL BZ

JNB K4,$

M4:JMP LOOP ;

;向下键..................................................

START:INC ID ;ID加1

MOV A,ID ;ID放入A

CJNE A,#08H,REL ;如果A=8,继续,否则转REL

MOV A,#0H

ADD A,#07H

JMP IS6

START1EC ID ;ID减1

MOV A,ID ;ID放入A

CJNE A,#00H,REL ;如果A=0,继续,否则转REL

MOV A,#0H

ADD A,#01H

JMP IS6

REL: CALL BZ

REL1:CJNE A,#01H,IS0 ;如果A不等于1,转IS0

MOV P1,#00111111B ;

JMP IS6 ;

IS0: CJNE A,#02H,IS1 ;

MOV P1,#01011111B

JMP IS6 ;

IS1: CJNE A,#03H,IS2 ;

MOV P1,#01101111B

JMP IS6

IS2: CJNE A,#04H,IS3 ;

MOV P1,#01110111B ;

JMP IS6 ;

IS3: CJNE A,#05H,IS4 ;

MOV P1,#01111011B

JMP IS6 ;

IS4: CJNE A,#06H,IS5 ;

MOV P1,#01111101B

JMP IS6 ;

IS5: CJNE A,#07H,IS6 ;

MOV P1,#01111110B

JMP IS6

IS6:MOV ID,A

JNB K1,$

JNB K2,$

JMP LOOP

;0.5秒钟延时子程式...................................

DELAY1S:MOV R5,#50

D2:CALL DELAY

DJNZ R5,D2

RET

;10ms延时............................................

DELAY: MOV R6,#20 ;延时10ms 子程序

L1: MOV R7,#248

DJNZ R7,$

DJNZ R6,L1

RET

;喇叭哗一声..........................................

BZ:

MOV R2,#248

B1:CALL DEX

CPL SPK

DJNZ R2,B1

CLR SPK

RET ;....................................................

DEX:MOV R4,#38

DE1:NOP

DJNZ R4,DE1

RET

;喇叭哗三声..........................................

BZ1:MOV R3,#15

C2:MOV R2,#248

C1:CALL DEX

CPL SPK

DJNZ R2,C1

DJNZ R3,C2

CLR SPK

RET

;定时结束............................................

TIME_END: ;定时时间结束

MOV P1,#01111111B ;

CLR RY1 ;继电器1为OFF

CLR RY2 ;继电器2为OFF CALL DELAY ;延时10ms

CALL BZ1 ;喇叭响一声

MOV R1,#2

BXX1:CALL DELAY1S

CALL BZ1

DJNZ R1,BXX1

CALL DELAY1S

JNB K5,$ ;等待K5松开

MOV A,#0H

MOV A,ID

MOV TSEC,#00H

JMP REL1 ;跳到REL1

SET0:

SETB RY2

JMP SET1

SET1:CJNE A,#01H,SET2

MOV ID,A

BB1:CALL COM

CPL LED1

CJNE A,#90,BB1 ;90秒定时时间

JMP TIME_END

SET2:CJNE A,#02H,SET3

MOV ID,A

BB2:CALL COM

CPL LED2

CJNE A,#110,BB2

JMP TIME_END

SET3:CJNE A,#03H,SET4

MOV ID,A

BB3:CALL COM

CPL LED3

CJNE A,#130,BB3

JMP TIME_END

SET4:CJNE A,#04H,SET5

MOV ID,A

BB4:CALL COM

CPL LED4

CJNE A,#150,BB4

JMP TIME_END

SET5:CJNE A,#05H,SET6

MOV ID,A

BB5:CALL COM

CPL LED5

CJNE A,#170,BB5

JMP TIME_END

SET6:CJNE A,#06H,SET7

MOV ID,A

BB6:CALL COM

CPL LED6

CJNE A,#190,BB6

JMP TIME_END

SET7:CJNE A,#07H,SB

MOV ID,A

BB7: CALL COM

CPL LED7

CJNE A,#210,BB7

JMP TIME_END

SB:JMP LOOP

COM:CALL AA1

JNB TF0,COM ;TF0=1,继承,否则返回XX1 CLR TF0 ;清除TF0为0

MOV TL0,#120 ;加载低字节,5MS定时

MOV TH0,#236 ;加载高字节,5MS定时

SETB TR0 ;开启定时器

INC TCOUNT ;计数器加1

MOV A,TCOUNT

CJNE A,#SS,COM ;5ms*(SS)200=1秒,1秒时间到 MOV TCOUNT,#00H ;计数器清0

INC TSEC ;秒数加1

MOV A,TSEC

RET

AA1:JB K3,M01 ;K3取消按下,继续,否则转M01

LCALL DELAY ;

JB K3,M01 ;

JMP TIME_END ;

M01:JNB K5,M02 ;K5开始弹起没按下,继续,否则转M02

LCALL DELAY ;

JNB K5,M02 ;

JMP TIME_END ;

M02:JB K4,M03 ;K4半烤键按下,继续,否则转M01

LCALL DELAY ;

JB K4,M03 ;

CPL RY1

CALL BZ

JNB K4,$ ;等待K4松开

M03:RET

END

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

独立式按键和一位数码显示 一.实训目的: 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端口的电压为高电平;当按键按下时,电

第六讲 独立按键和矩阵键盘 第七讲 数码管要点

第六讲独立按键和矩阵键盘 按键是什么东西,我想这个就不必由我向各位阐述了。嗯,如你所见,按键种类繁多,功能有简有繁,极大的充斥着我们的生活。但是无论如何,所有的按键其实都有一个原型,来源于同一种原理,所有的按键无论多复杂,多华丽,都是从这样一个原型发展而成的。好比你就算长的再帅,你也是只猩猩变来的,呵呵。我们平日所见到的绝大部分的按键,其实都可以归类为一种,叫“接触式按键”。下图为一个典型的接触式按键(又称轻触开关)。 需要特别说明的是,这里说的“接触”,是指机械层面上的接触,而不是感光或者某些特殊涂层(比如触摸屏)一类的接触。所以,按键的工作特性其实是一种机械特性,下文会详细说明。 , 如上图,请对照图一想象,1、2、3、4 分别对应按键的四个引脚,其中蓝色的线表示按键未被按下之时的状态,我成为初始状态,它是不导通的;而绿色

的线是却永久导通的。各位明白了么,其实是两个相同的结构连在一起了。我们只要将需要按键开关作用的线路分别接在1、3 和2、4 的任意取一组合,概括起来就是(1,2)、(1,4)、(3,2)、(3,4)四种组合,都可以起到我们预期的开关作用。 相信以上说明使大家对按键的工作原理有了个比较清晰的认识了,现在来说说一个小知识。先看下图(图4): 首先说明的是,上图的连法是不允许的,因为当按键按下之后,电源和地短接,会将导线直接烧毁。但是此处用作特例,假设导线不会烧毁。现在来提出一个问题,当按键按下以后,请问如果这时用万用表测量导线上任何一处的电压,得到的结果是VCC 还是GND 的电压? 答案是:GND,即表示测出的电压为0V。为什么呢,因为导线上,对于两端的电平是一种类似于程序语言逻辑运算里面的“与”,即对于导线两端:有零即为零,只有全为一是才为一。理解了这点,按键的工作前提就有了。 键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的键盘称为非编码键盘,在单片机组成的各种系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(常说的矩阵键盘)。在这一讲中我们介绍一下单片机中键盘使用。 单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,我们把按键的一端接地,另一端与单片机的某个I/O口相连,开始时先给该IO口赋一高电平,然后让单片机不断地检测该I/O口是杏变为低电平,当按键闭合时,即相当于该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

单片机矩阵键盘

单片机 4*4 矩阵键盘 在单片机按键使用过程中,当键盘中按键数量较多时为了减少端口的占用通常将按键排列成矩阵形式如下图所示,在矩阵式键盘中每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种目的呢?大家看下面电路图,单片机的整一个8位端口可以构成4*4=16 个矩阵式按键,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。确定矩阵式键盘上任何一个键被按下通常采用行扫描法。行扫描法又称为逐行查询法它是一种最常用的多按键识别方法。因此,我们就以行扫描法为例介绍矩阵式键盘的工作原理。 首先,不断循环地给低四位独立的低电平,然后判断键盘中有无键按下。将低位中其中一列线(P1.0~P1.3中其中一列)置低电平然后检测行线的状态(高4位,即P1.4~P1.7,由于线与关系,只要与低电平列线接通,即跳变成低电平),只要有一行的电平为低就延时一段时间以消除抖动,然后再次判断,假如依然为低电平,则表示键盘中真的有键被按下而且闭合的键位于低电平的4个按键之中任其一,若所有行线均为高电平则表示键盘中无键按下。再其次,判断闭合键所在的具体位置。在确认有键按下后,即可进入确定具体闭合键的过程。其方法是: 依次将列线置为低电平,即在置某一根列线为低电平时,其它列线为高电平。同时再逐行检测各行线的电平状态;若某行为低,则该行线与置为低电平的列线交叉处的按键就是闭合的按键。下面图5-5是4*4矩阵式按键接法的软件算法操作流程。 图5-4(4*4矩阵式按键的接法) 下面程序按照上述算法流程去编写的,其电路如图5-6,只是在图5-5的基础上多加了P0端口的8只LED灯。从键盘中检测到一个键值,然后将这个值写到LED数码管上显示。

独立按键和矩阵按键

第八章独立按键和矩阵按键 我们和单片机之间进行信息交互,主要包含两大类,输入设备和输出设备。前边讲的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所示。

单片机12-2、3独立按键和矩阵键盘(实训)

福建交通职业技术学院(教案)首页

课程: 单片机技术及应用 10~11 学年 第_2_学期 第 12 周 5 月 12 日 教 学 内 容 备 注 实训环境和器材 1、单片机实训操作台1张; 2、单片机实验板1套(含下载器); 3、计算机1台; 4、电源、通讯电缆、下载线等配件。 5、软件环境:Proteus Professional 7.1仿真软件、Keil 7.50A 编程软件 一、独立按键扫描 查询方式方式按键扫描:一般情况下,一个按键按下的时候,总是在按下的时刻存在着一 定的干扰信号, 按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全过程的信号图如图所示。 从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时 5ms 以 上 ,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下, 若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才 是由于干扰信号引起的误触发,CPU 就认为是误触发信号而舍弃这次的按键识别 过程。从而提高了系统的可靠性。 电路图: P32 P34 软件程序: 该程序实现独立按键去控制 LED 灯 的亮灭,并讲叙了对按键的处理方法。 独立按键相应的IO 口平时为高电平,一旦按键按下,单片机便检测到低电平。

课程:单片机技术及应用 10~11学年第_2_学期第 12 周 5 月 12 日 教学内容备注 #include #define uchar unsigned char #define uint unsigned int sbit KEY1 = P3^2; sbit KEY2 = P3^3; sbit KEY3 = P3^4; sbit LED1 = P0^0; sbit LED2 = P0^1; sbit LED3 = P0^2; /******************************************************************** * 名称 : Delay() * 功能 : 延时,延时时间为 10ms * del * 输入 : del * 输出 : 无 ***********************************************************************/ void Delay(uint del) { uint i,j; for(i=0; i

独立按键汇编程序

急求独立按键汇编程序 我自己写的一个拷面包炉的程式,可以给你参考。我的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释放

单片机实验四 独立键盘与矩阵键盘操作

单片机实验四独立按键和矩阵键盘操作 [实验要求] 独立按键操作: 试操作P3.4~P3.7控制的四个独立按键中的某一个, 每按一次, 数码管上显示数字作一次加1或减1变化, 显示数字在0~9之间. 矩阵键盘操作: 依次按下4*4 矩阵键盘上从第1 到第20 个键,同时在六位数码管上依次显示0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。[实验原理] (1) 按键识别去抖动原理: 我们在手动按键的时候, 由于机械抖动或是其它一些非人为的因素很有可能造成误识别, 一般手动按下一次键然后接着释放, 按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。 (2) 独立按键识别: 判断是否按下键盘,当单片机上电时所有I/O 口为高电平,参照实验电路图, S2 键一端接地另一端接P3.4,所以当键被按下时P3.4 口直接接地,此时检测P3.4 肯定为低电平。 (3) 矩阵键盘识别: 参照实验电路图, 矩阵键盘的四行分别与P3.0-P3.3 连接,四列分别与P3.4-P3.7 连接。如识别第1列按键, 可给P3.4送低电平,其余为高电平, 把P3口数据读回, 判断其第4位是否全为1, 如果全为1,则该列无键按下, 可继续判断下1列, 如有某位为0, 则有键按下,并可根据其位置识别按键所在行,从而确定该按键位置和键值. 其它各列按键识别类同. [实验目的] (1)掌握独立按键的识别方法. (2)掌握按键去抖动的基本原理。 (3)了解矩阵键盘检测的操作方法。 (4)进一步巩固掌握数码管的显示操作方法.

任务七:独立式按键显示

任务七:独立式按键控制实验 此任务为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

矩阵键盘简易计算器

《微处理器系统与接口技术》课程实践报告 计算器 班级: 学号: 学生姓名: 指导老师: 日期: 2014.7.5 ******电子与信息工程学院

目录 1、设计题目:计算器 (3) 2、设计目的 (3) 3、计算器总体设计框图 (3) 4、计算器详细设计过程 (4) 4.1输入模块 (4) 4.2键盘输入电路 (5) 4.3主程序模块 (6) 5、分析与调试 (6) 7、运行结果 (8) 8、结束语 (8) 8、参考文献 (8) 9、源程序附录 (9) 9.1主程序 (9) 9.2延时函数delay (12) 9.3显示函数display (12) 9.4键盘扫描函数 (14) 9.5预定义函数 (15)

1、设计题目:计算器 2、设计目的 此次课程实践题目是基于单片机简单计数器的设计,本此设计使用的是Intel公司MCS-51系列的8051AH单片机。设计的计算器可以实现2位小数的加、减、乘、除运算以及整数的乘方运算,其中用4*4矩阵键盘来输入待参与运算的数据和运算符;八位数码管动态显示输入待参与运算的数据以及运算后产生的结果,每个硬件模块的调用过程中涉及到了函数入口及出口参数说明,函数调用关系描述等。 3、计算器总体设计框图 计算器以MCS-51系列的8051AH单片机作为整个系统的控制核心,应用其强大的I/O功能和计算速度,构成整个计算器。通过矩阵键盘输入运算数据和符号,送入单片机进行数据处理。经单片机运算后控制LED数码管的输出。整体框图如图1所示: 图3 整体框图 本系统硬件主要由矩阵键盘、独立键盘I/O输入输出、数码管显示等主要部分组成。各模块的主要功能如下: (1)矩阵键盘将十六进制编码的数字送到单片机。 (2) 单片机扫描键盘信号并接收,对输入的键盘信号进行处理 (3) LED以动态扫描的方式移位显示每次输入的数据和最后的运算结果。实践设计的具体流程图如下图2所示:

51单片机独立按键实验

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

相关文档
最新文档