版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
独立式按键矩阵按键例10:按键1、程序key1:实验目的:通过按键key1、key2、key3、key4分别控制前四盏LED的亮灭。实验思路:
P0口各位的电位高低可以控制LED的亮灭,P0口的低四位对应控制前四盏小灯。根据实验要求,可让key1-key4控制P0的低四位,进而可以控制前四盏LED的亮灭。又key1-key4控制直接keyin1-keyin4,也即控制P2口的高四位,故可以让key1-key4控制P2口的高四位(按键按下去,相应P2口为0),然后将P2口高四位对应赋值给P0口低四位。设计步骤:1)使能三八译码器,让LED具备可以亮的条件;2)独立式按键初始化,让keyout1=0,接地,使得key1-key4组成一组独立按键;3)将P2口高四位对应赋值给P0口低四位,P0=P2>>44)为确保P0口高四位为1,P0=(P2>>4)|0XF0,这样后四盏小灯就不会亮了。#include<reg52.h>sbitA0=P1^0;sbitA1=P1^1;sbitA2=P1^2;sbitE3=P1^3;sbitENLED=P1^4;sbitkeyout1=P2^3;main(){keyout1=0;ENLED=0;E3=1;A2=1;A1=1;A0=0; while(1){P0=(P2>>4)|0xF0;}}补充知识点:编写头文件1)头文件建立方法:*.h,例如此处key.h2)将头文件写入程序中:#include“key.h”3)头文件与所写程序应该在相同文件夹下,如其他程序需要可直接复制粘贴头文件即可。4)头文件的具体编写方法如下:编写头文件:#ifndef_KEY_H_#define_KEY_H_typedefunsignedintuint16;typedefunsignedcharuint8;sbitkeyin1=P2^4;//特殊功能位声明sbitkeyin2=P2^5;sbitkeyin3=P2^6;sbitkeyin4=P2^7;sbitkeyout1=P2^3;sbitkeyout2=P2^2;sbitkeyout3=P2^1;sbitkeyout4=P2^0;sbitA2=P1^2;//特殊功能位声明,以便使能三八译码器sbitA1=P1^1;sbitA0=P1^0;sbitENLED=P1^4;sbitE3=P1^3;#endif#include<reg52.h>#include"key.h"main(){ keyout1=0; ENLED=0; E3=1; A2=1; A1=1; A0=0; while(1) P0=(P2>>4)|0XF0; }使用自编头文件后程序简化如下:例10:按键2、程序key2:设计内容:通过按键key1、key2控制第一个数码管显示的数字加1或减1。设计思路:定义数组,数组内容从0-9、空。key1每次按下,数码管显示数字加1,key2每次按下,数码管显示数字减1。设计步骤:1)定义数组,该数组中元素从0-9、空显示;2)使能三八译码器,让LED具备可以亮的条件;3)初始化按键,使得key1、key2组成一组独立式按键;4)编写程序,使得key1每次按下,数码管显示数字加1,key2每次按下,数码管显示数字减1。#include<reg52.h>#include"key.h"codeuint8number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF};uint8n=0;main(){ keyout1=0;//初始化按键
A2=0;//让第一个数码管亮
A1=0; A0=0;
E3=1;//使能三八译码器
ENLED=0; P0=number[0];//给P0赋初值
while(1){ if(!keyin1)//将keyin1取反,结果只有两种,1或0,!keyin1的结果是按键1按下去结果为1,也即要执行以下操作,弹上来结果为0,不进行以下操作。
{
if(n>=9)//按键1按下去的时候数字从0增至9,当到9时,又从新从0开始显示
n=0; else n++; P0=number[n];
while(!keyin1);
//等待按键弹起来,防止按键由于手动操作,按下去时间过长,导致计数变化过多,加入这条语句,只要按键还没弹上来,则会一直执行while空语句
}
if(!keyin2) { if(n<=0) n=9; else n--; P0=number[n]; while(!keyin2); } }}例10:
3、程序key3:
按键抖动(课本P109)硬件去抖软件去抖:检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。
设计思路:在上一个程序的基础上加一个延时程序,延时程序后再次判断按键是否按下,如果按下执行以后程序。
在程序2的基础上稍作修改,实现软件按键防抖1)编写延时程序:voiddelay(){ uint16i=1000; while(i--);}2)将延时程序写入main中
if(!keyin1){ delay();//如果按键按下,延时,再确认按键是否按下
if(!keyin1) { if(n>=9) n=0; else n++; P0=number[n]; while(!keyin1); }}例10:按键4、程序key4:设计内容:通过按键key1-key15控制LED按二进制方式显示数字0-16。设计思路:使用矩阵按键,让k1-k4、k5-k8、k9-k12、k13-k16依次构成四组独立式按键,每次只能构成使用一组。然后让k1-k16按下时,LED以二进制方式显示。设计步骤:1)使能三八译码器,让LE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025海南海洋招聘4人笔试历年参考题库附带答案详解
- 银行柜员个人账户异常处理指南
- 2025浙江绍兴市城投建筑工业化制造有限公司招聘5人笔试历年参考题库附带答案详解
- 2025浙江湖州湖融供应链管理有限公司招聘3人笔试历年参考题库附带答案详解
- 2026学年黑龙江省齐齐哈尔市六年级数学期末自测快速提分卷(附答案)详细答案和解析
- 诸暨市机场2026年安全生产月知识竞赛考试题及答案
- 员工培训材料标准化制作与共享平台
- 满堂脚手架专项整改落实保证措施
- 2027年高考物理复习-动量
- 2026学年吉林省珲春市五年级语文期末提升绝密预测题详细参考解析详细答案和解析
- 铸造厂高危作业审批制度
- 《智能产品设计》全套教学课件
- 《消费者行为学》课件 第5章 消费者的需要与动机
- 设备调试进度汇报说明4篇
- 养殖猪场应急预案(3篇)
- 保育员技能比赛主持稿
- 羊水栓塞救治中的团队协作效率提升策略
- GB/T 10801.2-2025绝热用挤塑聚苯乙烯泡沫塑料(XPS)
- 2025年博物馆展览管理与维护规范
- 河南周口介绍
- 国家事业单位招聘2024中国人民银行数字货币研究所招聘6人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
评论
0/150
提交评论