任务3.3 独立按键的实现

合集下载

《第三单元 第11课 制作按钮 制作具有动态效果的按钮》作业设计方案-初中信息技术人教版八年级上册

《第三单元 第11课 制作按钮  制作具有动态效果的按钮》作业设计方案-初中信息技术人教版八年级上册

《制作具有动态效果的按钮》作业设计方案(第一课时)一、作业目标通过本次作业,学生将掌握如何使用信息技术课程所学的知识,制作具有动态效果的按钮。

这不仅是对课堂所学知识的复习和巩固,也是对学生动手实践能力的锻炼。

二、作业内容1. 任务一:制作按钮基本形状学生需根据教师提供的素材,使用图形处理工具,绘制一个基本的按钮形状,如圆形、方形等。

要求颜色鲜艳、线条清晰。

2. 任务二:添加动态效果在基本按钮的基础上,学生需为按钮添加动态效果,如移动、放大、缩小等。

可以使用软件提供的预设动画效果,也可以自行设计。

3. 任务三:调整按钮属性学生需调整按钮的属性,如大小、位置、颜色等,使按钮更加美观、易于识别。

4. 任务四:测试与保存学生需对制作好的按钮进行测试,确保其功能正常。

完成后,学生需将按钮保存为图片文件,以便后续使用。

三、作业要求1. 独立完成:学生需独立完成所有任务,不得抄袭或参考他人作品。

2. 创新性:鼓励学生尝试不同的动态效果和属性调整,展示自己的创意。

3. 美观性:要求学生在保证功能的基础上,注重按钮的美观性,使其易于识别。

4. 文件格式:保存时需确保文件格式为常见的图片格式,以便于后续使用。

四、作业评价1. 完成情况:学生提交作业后,教师将根据任务完成情况进行评分。

2. 创新性:对具有创新性的作品给予额外加分,以鼓励学生的创新精神。

3. 美观性:对制作精美、视觉效果良好的作品给予高度评价。

五、作业反馈1. 学生:学生需在完成作业后,对自己的作品进行自评,总结优点和不足,以便进一步提高。

2. 教师:教师将对学生的作品进行评价,并提供反馈和建议,以帮助学生更好地掌握信息技术知识。

通过本次作业,学生将进一步巩固课堂所学知识,提高动手实践能力,为后续学习打下坚实的基础。

在完成这个作业的过程中,学生需要熟练使用图形处理工具,如Photoshop、GIMP等,同时需要具备一定的创意和审美能力。

教师可以通过作业评价和学生反馈,及时了解学生的学习情况,提供针对性的指导,帮助学生更好地掌握信息技术知识。

独立按键工作原理

独立按键工作原理

独立按键工作原理
独立按键是指在键盘或其他输入设备上单独存在的按键,与其他按键没有物理连接。

独立按键的工作原理可以分为以下几个步骤:
1. 电路设计:独立按键通常由一个机械开关和一个电路组成。

机械开关是按键的实体部分,当按下按键时,机械开关会闭合。

而电路则通过控制机械开关的开闭来识别按键的状态。

2. 连接到主控制器:独立按键的电路会与主控制器相连。

主控制器可以是键盘控制器或其他的输入设备控制器。

按下独立按键时,机械开关的闭合会使电路与主控制器建立连接。

3. 识别按键状态:主控制器会通过扫描或轮询的方式不断地检测连接到它的电路中的独立按键状态。

当检测到某个按键被按下时,主控制器会相应地记录下按键的信息。

4. 发送输入信号:主控制器会将按键的信息转换为对应的输入信号,然后将该信号发送给计算机或其他接收设备。

接收设备会根据接收到的信号来执行相应的操作,例如输入字符、执行功能等。

总的来说,独立按键通过机械开关和电路的配合工作,利用主控制器来识别按键状态并发送输入信号。

这样,用户在按下独立按键时,就能够通过电子设备实现相应的操作。

13键控彩灯

13键控彩灯

1.
IT0和IT1为外中断INT0 和INT1中断触发方式选择, 若选下降沿触发则相应位置1;若选低电平触发 ,IT相 应位置0。 某中断源有中断请求,该中断标志置1,无中断请求, 该中断标志置0 TR0 和 TR1 为定时器T0和T1 工作启动和停止控制。
2. 3.
中断优先级控制
IP (B8H)
0 2
任务布置
1、扫描独立按键控制彩灯控制。 2、利用中断实现彩灯控制。 3、增加数码管显示花样编号。
主程序流程
中断服务子程序流程
设计一个4行4列的行列式键盘,键号位 0~15。每按下一个键,得到一个键号。
快速扫描程序
功能:判断是否有键按下。 设置列线输出,行线输入。 列线全部输出0,看行线是否有0输入。 • 若行线有0输入,说明有键按下。 • 若行线没有0输入,说明没有键按下。 设置行线输出,列线输入。 行线全部输出0,看列线是否有0输入。 • 若列线有0输入,说明有键按下。 • 若列线没有0输入,说明没有键按下。
(1)独立式键盘 各个按键相互独立,每个按键独立地与一 根输入线相连。 适合于按键较少的系统。
(2)行列式键盘 按键设置在行列的交点上。 适合于按键较多的系统。
按键的去抖 机械式按键在按下或释放时,由于机械弹性 作用的影响,通常伴随有一定时间的触点机械 抖动,然后其触点才稳定下来,抖动时间一般 为510ms,在触点抖动期间检测按键的通与断 状态,可能导致判断出错。
中断控制的有关寄存器
(1)中断的允许和禁止—允许 该中断源中断则该位置1,禁止中断则该位置0 。
EA
-
中断总控 不 允/禁 用
不 串行口 T1 INT1 T0 INT0 用 允/禁 允/禁 允/禁 允/禁 允/禁

单片机独立按键电路组成和工作原理

单片机独立按键电路组成和工作原理

单片机独立按键电路组成和工作原理下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!1. 简介单片机独立按键电路是指由单片机控制按键输入的电路。

单片机实践-独立按键电路原理及代码实现

单片机实践-独立按键电路原理及代码实现
一定要去掉“前沿抖动”和 “后沿抖动”的脉冲,两者 统称为按键去抖动。
11 原理分析
那怎么样对键盘去抖动呢?
一般可以采用硬件电路和软件程序两种方法消除键盘抖动。但在现代电 子产品开发过程中,一般都采用软件去抖动。
11 原理分析
软件程序消除键盘抖动措:
① 检测判断是否有键按下; ② 若有则执行5~10ms的延时程序; ③ 再重新检测判断该键是否仍然按下。 同理,在检测到该键释放时,也采用先 延时再判断的方法消除抖动的影响。一 般释放键时,不需要检测和去抖动操作 。
//按键处理,开灯、关灯等 } else if(P11==0)//判断是否为P11的按键按下 {
//按键处理,开灯、关灯等 } while(P10==0||P11==0);//等待两个按键都松开 } //返回
}
THANK YOU
独立按键工作原理 及代码实现
CONTENTS
原理分析
代码实现
11 原理分析
按键电路的工作原理: 按下:A为低电平,0v 松开:A为高电平,5v
独立按键电路
11 原理分析
机械式按键的开、关分别是通过机械触点的合、断来实现,由于机械触 点的弹性作用,在闭合或者断开的瞬间均有抖动现象,会出现一系列电脉冲 ,抖动时间长短,与开关的机械特性、按键动作等因素有关。抖动时间一般 有5~10ms。在抖动期间检测按键的开或者关,可能导致键盘识别出错。
}
N
判断键按下?
Y 延时去抖动
N 再判断键按下? Y 按键处理
N 等待按键松开 Y
21 代码实现
两个按键的 判断方法:
void KeyScan( )
{
if(P10==0||P11==0) //判断是否有按键按下 {

独立按键输入课程设计

独立按键输入课程设计

独立按键输入课程设计一、课程目标知识目标:1. 学生能理解独立按键输入的基本概念,掌握其在电路中的应用原理。

2. 学生能够识别并描述不同类型的独立按键,了解其功能和使用方法。

3. 学生能够运用所学知识,设计并搭建简单的独立按键输入电路。

技能目标:1. 学生能够运用独立按键输入电路,实现与微控制器等电子设备的交互。

2. 学生培养观察、分析和解决问题的能力,能够调试并解决独立按键输入电路中可能出现的问题。

3. 学生通过小组合作,提高团队协作能力和沟通能力。

情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发创新意识和探索精神。

2. 学生在学习过程中,培养严谨、认真的学习态度,养成良好的学习习惯。

3. 学生通过学习独立按键输入电路,认识到科技与社会生活的密切关系,增强社会责任感。

本课程针对初中电子技术课程,结合学生年龄特点和认知水平,以实用性和趣味性为导向,注重培养学生的实践操作能力和团队协作能力。

课程目标明确,可衡量,有助于学生和教师在教学过程中进行有效的评估和指导。

二、教学内容本章节教学内容主要包括以下几部分:1. 独立按键的基本概念与原理- 按键的分类及特点- 独立按键的电路符号及工作原理- 独立按键在不同电路中的应用2. 独立按键输入电路设计- 设计原理及步骤- 电路元件的选择与连接- 搭建简单的独立按键输入电路3. 独立按键与微控制器交互- 微控制器的基本概念- 独立按键与微控制器的连接方法- 编写程序实现按键控制功能4. 电路调试与故障排查- 常见故障现象及原因分析- 调试方法与技巧- 故障排查及解决实例5. 实践操作与团队协作- 小组合作设计并搭建独立按键输入电路- 交流与分享电路设计经验- 评价与反思实践操作过程教学内容根据课程目标和学生的认知水平进行科学组织和安排,参照教材相关章节,确保教学内容的系统性和连贯性。

在教学过程中,教师需关注学生的实际操作能力培养,鼓励学生积极参与讨论和协作,提高教学效果。

独立按键程序

独立按键程序

/********************************************************************* 文件名:独立按键.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<reg52.h>#define uchar unsigned char#define uint unsigned intsbit 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<i;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. 连接线路:用于连接按键开关和其他电子元件的导线。

这些导线通常是细小的金属线,通过连接线路,按键可以与其他电子元件进行信号传输。

3. 电源:独立按键通常需要受到电源的供电以正常工作。

电源可以是直流电源、交流电源或电池等,具体取决于使用场景和需要。

4. 信号输入/输出:按键通常用于输入或输出信号。

输入信号指从按键输入到电子设备中的信号,输出信号指从电子设备输出到按键的信号。

5. 过滤电路:为了减少按键使用过程中的干扰,独立按键通常会加入过滤电路,用于滤除不必要的电磁波干扰或静电干扰。

6. 接地线:独立按键通常需要接地,以确保电路的稳定性和减少漏电等问题。

接地线与电源线及信号线相连,形成一个完整的电路系统。

通过以上部分的组合和连接,按下独立按键时,按键开关会接
通相应的信号,并将其输入到电子设备中,从而实现相应的操作。

同时,过滤电路和接地线的作用可以保证按键的稳定性和减少干扰。

这样,独立按键就能够在各种电子设备中发挥作用,如电脑键盘、遥控器、手机等。

任务七:独立式按键显示

任务七:独立式按键显示

任务七:独立式按键控制实验此任务为4个独立按键,一旦按键被按下,则显示相应的数字,同时蜂鸣器滴一声。

(1)电路图主程序流程图(3)程序ORG 00HLJMP MAINORG 30HMAIN: MOV P2,#0FFH ;初始化MOV P0,#0FFHMOV P1,#0FFHLOOP: MOV A,P1 ;输入P1口的状态,CPL A ;取反,无建按下,P1.4~1.7为“0”ANL A,#0F0H ;屏蔽无用的低四位JZ LOOP ;A为“0”转移LCALL DELAY; 延时10MSMOV A,P1 ;再判断CPL AANL A,#0F0HJZ LOOPJB ACC.4,KEY1 ;这一位为“1”转移JB ACC.5,KEY2JB ACC.6,KEY3JB ACC.7,KEY4LJMP LOOPKEY1: MOV P0,#0F9HMOV P2,#0F0HLCALL BEEP;调用蜂鸣器子程序LJMP LOOPKEY2: MOV P0,#0A4H;显示“2”,此为段码值MOV P2,#0F0H ;控制哪一位显示LCALL BEEPLJMP LOOP;返回,继续检测按键KEY3: MOV P0,#0B0HMOV P2,#0F0HLCALL BEEPLJMP LOOPKEY4: MOV P0,#099HMOV P2,#0F0HLCALL BEEPLJMP LOOPDELAY:MOV R7,#40;延时10MS子程序D1:MOV R6,#123NOPD2:DJNZ R6, D2DJNZ R7,D1RET BEEP:MOV R5,#200;蜂鸣器滴一声子程序BEEP1:CLR P2.7 ;P3.7引脚不断输出LCALL DEL ;方波,使蜂鸣器发SETB P2.7 ;出声音,改变其输LCALL DEL ;出频率,可调整蜂DJNZ R5, BEEP1 ;鸣器音调RETDEL:MOV R4,#225;供蜂鸣器使用延时DJNZ R4,$RETEND。

实验5-独立键盘和矩阵键盘

实验5-独立键盘和矩阵键盘

实验5 独立键盘和矩阵键盘一、实验目的1、学会用C语言进行独立按键应用程序的设计。

2、学会用C语言进行矩阵按键应用程序的设计。

二、实验内容1、独立按键:对四个独立按键编写程序:当按k1时,8个LED同时100ms闪烁;当按k2时,8个LED从左到右流水灯显示;当按k3时,8个LED从右到左流水灯显示;当按k4时,8各LED同时从两侧向中间逐步点亮,之后再从中间向两侧逐渐熄灭;2、矩阵按键:采用键盘扫描方式,顺序按下矩阵键盘后,在一个数码管上顺序显示0~F,采用静态显示即可。

3、提高部分(独立按键、定时器、数码管动态扫描):编写程序,实现下面的功能。

用数码管的两位显示一个十进制数,变化范围为00~59,开始时显示00,每按一次k1,数值加1;每按一次k2,数值减1;每按一次k3,数值归零;按下k4,利用定时器功能使数值开始自动每秒加1;再按一次k4,数值停止自动加1,保持显示原数。

三、实验步骤1、硬件连接(1)使用MicroUSB数据线,将实验开发板与微型计算机连接起来;(2)在实验开发板上,用数据线将相应接口连接起来;2、程序烧入软件的使用使用普中ISP软件将HEX文件下载至单片机芯片内。

查看结果是否正确。

四、实验结果——源代码1. #include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;#define LED P2sbit key1=P3^1;sbit key2=P3^0;sbit key3=P3^2;sbit key4=P3^3;const char tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; u8 code begMid[]={0x7e, 0xbd,0xdb,0xe7, 0xdb, 0xbd, 0x7e}; void Delay(u16 i){ while(i--);}void KeyDown(){u8 i;if(key2==0){Delay(1000);if(key2==0){for(i=0;i<8;i++){LED=tab[i];Delay(50000);}while(!key2);}LED=0xff;}else if(key1==0){Delay(1000);if(key1==0)for(i=0;i<3;i++){LED=0x00;Delay(10000);LED=0xff;Delay(10000);}}}}void Int0Init(){IT0=1;EX0=1;EA=1;}void Int1Init(){IT1=1;EX1=1;EA=1;} void main(){Int0Init();Int1Init();while(1){KeyDown();}}void Int0() interrupt 0{u8 i;if(key3==0){Delay(1000);if(key3==0)for(i=7;i>=0;i--){LED=tab[i];Delay(50000);}}}}void Int1() interrupt 2{u8 i;if(key4==0){Delay(1000);if(key4==0){for(i=0;i<=6;i++){LED=begMid[i];Delay(50000);}}}}2.#include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;u8 KeyValue;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//??0~F?? void delay(u16 i){while(i--);}void KeyDown(void){char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f){delay(1000);if(GPIO_KEY!=0x0f){GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}while((a<50)&&(GPIO_KEY!=0xf0)){delay(1000);a++;}}}}void main(){LSA=0;LSB=0;LSC=0;while(1){KeyDown();GPIO_DIG=smgduan[KeyValue];}}3.#include <reg52.h>typedef unsigned int u16;typedef unsigned char u8;#define KEYPORT P3sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit key1=P3^1;sbit key2=P3^0;sbit key3=P3^2;sbit key4=P3^3;u16 t;u8 sec;u8 DisplayData[2];u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void Time1Init(){TMOD |= 0x10;TH1=0Xd8;TL1=0Xf0;EA=1;ET1=1;}void delay(u16 i){while(i--); }void DigDisplay(){u8 i;for(i=0;i<2;i++){switch(i){case 0:LSA=0;LSB=0;LSC=0;break;case 1:LSA=1;LSB=0;LSC=0;break;}P0=DisplayData[i];delay(100);P0=0x00;}}void datapros(){DisplayData[0]=smgduan[sec%10];DisplayData[1]=smgduan[sec/10];}void main(){Time1Init();while(1){if(key4==0){delay(1000);if(key4==0){TR1=!TR1;while(key4==0);}}if(key3==0){delay(1000);if(key3==0){sec=0;while(key3==0);}}if(key2==0){delay(1000);if(key2==0){sec--;while(key2==0);}}if(key1==0){delay(1000);if(key1==0){sec++;while(key1==0);}}}}void Time1() interrupt 2{TH1=0Xd8;TL1=0Xf0;t++;if(t==100){t=0;sec++;if(sec>=60){sec=0;}}datapros();DigDisplay();}五、实验体会——结果分析1、独立按键:位定义四个按键key1、key2、key3、key4,宏定义LED为P2口,tab数组保存流水灯D0-D7依次点亮的数值,begMid数组保存流水灯同时从两侧向中间逐步点亮,之后再从中间向两侧逐渐熄灭的赋值方式。

单片机之路—独立按键操作

单片机之路—独立按键操作

单片机之路—独立按键操作1、概述我们在使用家用电器时经常需要通过按键给电器输入指令,让电器执行动作。

比如电磁炉的开关、电饭煲定时时间设定等等。

今天我们来讲一下单片机怎么识别按键操作指令的。

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

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

2、硬件电路分析我们来看一下按键和单片机的接口电路图:独立按键与单片机接口我们直接把单片机P3.2引脚和P3.3引脚接到按键的一端,按键的另外一端接地。

因为单片机的P3引脚是接有上拉电阻的,所以可以这样接。

如果是P0口不能这样接。

3、程序编写在开始写程序之前,我们需要了解一个实际应用的中知识点,按键在按下和释放的时候并不是我们想象的是一个理想的方波脉冲,实际是在电平跳变的时候是有产生抖动的,这些抖动会导致单片机采集按键状态时出现误判的情况。

从实际波形我们可以看到在按键实际波形的中间有一段稳定的波形,我们可以采集这段波形进行判断。

也就是说在程序处理中,我们检测到按键按下后延时3~5ms再次检测按键是否处于按下状态。

按键实际波形和理想波形我们在上次流水灯的程序基础上进行编写,实现触碰P3.2引脚的KEY1流水灯间隔亮灭,触碰P3.3引脚的KEY2流水灯从低位往高位依次点亮。

我们先把两个按键引脚定义一下sbit KEY1 P3^2sbit KEY2 P3^3接下来我们写一个按键扫描函数unsigned char KeyScan(void){static unsigned char keynum = 0;if(KEY1 == 0){delay_ms(3);if(KEY1 == 0){keynum = 1;}}else if(KEY2 == 0){delay_ms(3);if(KEY2 == 0){keynum = 2;}}return keynum;}在这函数的处理中我们判断当KEY1按下时,我们返回1,当KEY2按下时,我们返回2,其他的情况返回0。

任务3.3独立按键的实现课案

任务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)。

任务三 开关、键盘控制应用

任务三    开关、键盘控制应用

{ uint i;
//在函数内部定义变量
D1=0;
//初始化为开机就亮
while(1)
{ i=0;
while(i<30000)i=i+1; //延时
D1=!D1;
//然后,取反
if(sw==1){ D1=1;break;}
}
}
int main()
{ while(1)
{ if(sw==0) flasher();
2. 键盘设计注意事项
对于键盘的程序设计,需要及时并且准确地响应按键的动作。在进行单片 机键盘接口设计的时候,需要注意如下几个方面。合理的按键编码、可靠的输入 检测、程序响应。
六、任务总结
(1) 当系统需要的按键数量不多时,独立式按键不失为一种简单可行的解决方案。但需要较多 按键时,该方案占用10资源太多。在本任务中,采用顺序检测的方法实现各个按键的检测,并调 用相应的按键处理程序,如果按键处理程序运行时间较长,有可能无法及时响应用户的按键动作, 导致出现“按键失灵”现象。在使用中,要注意每个按键处理程序的运行时间,尽量避免出现 “按键失灵”现象。按键五部曲:首判有键,其次消抖,确认按下,待键释放。实现功能。
开关sw断(关) 开关sw通(开) 开关sw断(关) 开关sw通(开)
设置P2.1=0 则读P2.0
设置P2.0=0 则读P2.1
表3-1开关通断关系
亚龙YL-236实验台中,指令模块包含了8个钮子开关。其实 物及内部电路如图3-1所示。钮子开关拨向上侧为“断开”,

过l0k电阻向输出插孔SAx(x为1~8)提供上拉电平。 钮子关 拨向下侧为“闭合” , SAx输出低电平,同时LED发光作为开
有无按键 消抖 计算键值

独立键盘工作原理

独立键盘工作原理

独立键盘工作原理独立键盘是一种与电脑或其他设备连接的输入设备,它具有相对独立的工作原理和结构。

下面我将具体介绍独立键盘的工作原理。

独立键盘的主要组成部分包括按键、内部电路和连接接口。

按键是用户与独立键盘进行交互的主要方式,内部电路是实现按键输入功能的核心部分,连接接口用于将独立键盘与计算机或其他设备进行连接。

首先,我们来了解一下按键的工作原理。

独立键盘的每个按键上都有一个弹簧,按下按键时,弹簧会被压缩,同时与底部电路接触,从而形成一个电路通路,信号将会通过连接线传输给计算机或其他设备。

接下来,我们来看一下内部电路。

内部电路主要由按键解码电路和连接接口电路组成。

按键解码电路负责将按键输入的信号解码成对应的键值,然后将键值信号传递给连接接口电路。

连接接口电路负责将键值信号转换成计算机或其他设备可以识别和处理的格式,并将信号通过连接线发送给计算机或其他设备。

在连接接口电路中,独立键盘通常采用USB、蓝牙或无线信号等方式与计算机或其他设备进行连接。

其中,USB连接是最常用的一种方式,通过USB连接线将键盘与计算机连接起来,键盘的按键输入信号会通过USB连接线传递给计算机,从而实现与计算机的交互。

在操作系统中,计算机会识别并处理来自独立键盘的输入信号。

当用户按下一个按键时,按键解码电路会解析出对应的键值信号,并通过连接接口电路将信号传递给计算机。

计算机接收到键值信号后,会根据预设的键值对应表将其转换成相应的字符或操作指令,然后在屏幕上显示或执行相应的操作。

总结一下,独立键盘的工作原理主要包括按键、内部电路和连接接口三个方面。

按键通过触发弹簧将按键信号转化成电信号,内部电路负责将按键信号解码并转换成计算机可以识别的格式,连接接口负责将信号传递给计算机或其他设备进行处理。

通过这种方式,独立键盘可以实现与计算机或其他设备的交互,为用户提供便捷的输入体验。

值得一提的是,独立键盘不仅仅局限于计算机领域,在许多行业和场景中都有广泛的应用。

独立按键工作原理

独立按键工作原理

独立按键工作原理
独立按键(也称为机械按键或机械开关)是一种常用的电子设备元件,用于实现各种按钮和开关功能。

独立按键的工作原理基于物理机械设计,具有可靠性高、操作手感好等优点。

独立按键通常由外壳、弹簧、触点和接线材料组成。

当按下按键时,外壳底部的弹簧受到压缩并存储能量。

同时,触点也会被按下并与外壳连接,从而建立电路。

当松开按键时,弹簧将恢复原状,并使触点离开外壳,断开电路连接。

这样,按键就完成了一个完整的开关过程。

独立按键的工作原理可分为两个重要的阶段:触发和恢复。

触发是指当按键被按下时,弹簧与触点接触并建立电路连接。

恢复则是指当按键松开时,弹簧恢复原状,使触点与外壳分离,断开电路连接。

独立按键采用机械结构,使得按键具有独特的手感和稳定性。

不同的独立按键可能具有不同的结构设计,如膜片式按键、轴式按键等。

这些设计差异主要影响着按键的操作力、寿命和触发方式。

总的来说,独立按键通过机械设计实现按钮和开关的功能,具有可靠性高、操作手感好等特点。

在电子设备中广泛应用,如键盘、电子游戏控制器、电脑鼠标等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

任务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<reg52.h>#define uchar unsigned char#define uint unsigned intsbit KeyInput=P1^0; //按键接口//段码uchar code Seg7Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code Seg7Posit[]={0xfe,0xfd}; //位码uchar DispBuffer[2]; //缓冲区//void DelayMs(uint xms ) ms级延时函数,省略//void Seg7Display() 2位数码管显示函数,省略void main(void){uchar DispCnt=0; //按键加1计数器while(1){Seg7Display(); //动态扫描if(KeyInput==0) //检测到按键按下{DispBuffer[0]=DispCnt/10;DispBuffer[1]=DispCnt%10; //计数值的个位和十位的分解if(++DispCnt>=100) //每按一次,计数器加1,超过99,归0DispCnt=0;}}}程序编译好后烧录到单片机中,看一下运行效果。

上电后,数码管显示“00”,按一下按键,数码管向上加数,但是每按一下,向上加好几个数,如果按键不弹起,会连续加1,程序中没有实现我们想要的按一下加1的效果。

我们回到刚才编写的程序中,在大循环while(1)中,不停的监测按键是否按下,如果按下则加1,逻辑是正确的。

按键按下到按键释放大约需要0.2秒到0.5秒,而程序扫描的速度非常快,按键每按下一次,程序中已经扫描多次了,所以才会出现上述的现象。

怎样才能实现按键每按一次加1的效果呢?4、等待按键释放我们在之前按键检测程序上结尾加这样一条语句:While(!key_value); 编译后烧录到单片机中,就可以实现按一次按键加1的效果了。

if(KeyInput==0) //检测到按键按下{DispBuffer[0]=DispCnt/10;DispBuffer[1]=DispCnt%10;if(++DispCnt>=100) //每按一次,计数器加1,超过99,归零DispCnt=0;While(!KeyInput); //如果按键没有弹起,程序指针就会停在这里, } //直到按键释放While(!key_value); 这个语句是怎么消除了按一下加多个数的问题呢?程序中初次检测到了按键按下,则执行数值分解语句和加1语句,最后执行While(!key_value);按键按下后,key_value的值为0,取反后,为1,则while语句的条件为真,程序指针会停在这里,不停的检测按键是否释放,按键释放后,key_value的值变为1,取反后变为0,条件为假,程序指针向下执行。

这样实现了按下一次加1的效果了。

如果不停的按下按键,我们会发现,大多数按下的时候会加1,但有的时候还是会出现按一下加几个数的现象,这又是什么原因造成的呢?5、按键消抖动按键的开关为机械弹性触点开关,它是利用机械点接触和分离实现电路的通断。

由于机械点的弹性作用,加上人们按键时的力度、方向的不同以,按键开关从按下到接触稳定要经过数毫秒的弹跳抖动,即在按下的几十毫秒里会连续产生多个脉冲。

释放按键时,电路也不会一下断开,同样会产生抖动。

这两次抖动的时间分别为10-20ms左右,而按键的稳定闭合通常大于0.3-0.5秒。

因此,为了确保MCU对一次按键动作只确认一次,按键闭合时,必须要进行消抖处理。

否则由于MCU执行的速度较快,会将抖动的多个脉冲误认为为多次的按键。

图3.3.5是按键按下抖动示意图。

图3.3.5 按键按下抖动示意图按键的消抖动既可以采用硬件方法,也可以采用软件的方法。

使用硬件消抖的方式,需要在按键连接的硬件设计上增加硬件消抖电路,如RS触发器或者RC积分电路等。

采用硬件消抖方式增加了系统的成本,而利用软件方式消抖则是比较经济的做法,但增加了软件设计的复杂性。

软件方式消抖的基本原理是在软件中对按键进行两次确认,既在第一次检测到按键按下后,间隔10ms左右再次检测该按键是否按下,只有两次都检测到按键按下时才最终确认有键按下,从而跳过了按键的抖动,消除了抖动的影响。

程序如下:if(KeyInput==0) //检测到按键按下{DelayMs(10); //延时消抖if(KeyInput==0) //再次检测按键是否按下{DispBuffer[0]=DispCnt/10;DispBuffer[1]=DispCnt%10;if(++DispCnt>=100) //每按一次,计数器加1,超过DispCnt=0;while(!KeyInput); //等待按键释放}}}检测按键按下,10ms消抖,等待按键弹起,称之为按键检测三部曲,但本节教程的程序仅能作为功能演示用,在实际项目中有很大的弊端,第4单元任务1给出了按键高效扫描方法。

3.3.2 任务实施本节的任务实现程序如下:include<reg52.h>#define uchar unsigned char#define uint unsigned int//按键接口sbit KeyInput1=P2^0; //“调整”键sbit KeyInput2=P2^1; //“增减”键sbit KeyInput3=P2^2; //“减少”键sbit KeyInput4=P2^3; //“确定”键//状态灯sbit LedHour=P3^0;sbit LedMinute=P3^1;sbit LedSecond=P3^2;//段码uchar code Seg7Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code Seg7Posit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位码uchar DispBuffer[6]; //缓冲区//ms级延时函数void DelayMs(uint xms){uint i,j;for(i=0;i<xms;i++)for(j=0;j<122;j++);}//6位数码管显示子函数,在第二位和第四位上显示小数点void Seg7Display(){uchar i;for(i=0;i<6;i++){P1=0xff; //消隐P0=Seg_7[DispBuffer[i]]; //送段码if((i==1)||(i==3)) P0&=~0x80; //在第二位和第四位数码管上加小数点P1=Posit[i]; //送位选DelayMs(1); //延时}}//主函数void main(void){uchar Cnt; //时间计数器uchar Hour=9; //“小时”初值uchar Minute=23; //“分”初值uchar Second=37; //“秒”初值uchar KeyValue=0; //按键值uchar AdjustNum=0; //按下“调整”按键时对应的调整值LedHour=LedMinute=LedSecond=1; //三个状态灯初始时都不点亮while(1){KeyValue=GetKeyValue(); //检测按键是否按下,并返回键值if(KeyValue==0x01) //按下确定键,进入到调整界面{if(++AdjustNum>=4) //AdjustNum的取值为1、2、3AdjustNum=1; //分别对应"小时"、"分"、"秒"if(AdjustNum==1) //点亮"小时"对应的LED{LedHour=0;LedMinute=LedSecond=1;}if(AdjustNum==2) //点亮"分"对应的LED {LedMinute=0;LedHour=LedSecond=1;}if(AdjustNum==3) //点亮"秒"对应的LED {LedSecond=0;LedHour=LedMinute=1;}}if(KeyValue==0x02) //按下“增加”按键{if(AdjustNum==1) //小时加1{if(++Hour>=24)Hour=0;}if(AdjustNum==2){ //分加1if(++Minute>=60)Minute=0;}if(AdjustNum==3) //秒加1{if(++Second>=60)Second=0;}}if(KeyValue==0x04) //返回正常界面{AdjustNum=0; //状态灯熄灭,把AdjustNum赋值为0 LedHour=LedMinute=LedSecond=0;}TimeToBuff(Hour,Second,Minute); //把待显示的值送入缓冲区Seg7Display(); //动态扫描,1ms×6=6msif(++Cnt>=166) //Cnt计数83次×12=996ms{Cnt=0;if(++Second>=60) //1秒计数60次,为1分钟{Second=0;if(++Minute>=60) //1分钟计数60次,为1小时{Minute=0;if(++Hour>=24) //24小时后清零Hour=0;}}}}}程序解释如下:(1)程序中加粗的是有关于本节按键程序的,其余部分是上一节中的内容,在这里我们只解释和按键相关的程序。

相关文档
最新文档