




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
独立式按键矩阵按键例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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咸阳师范学院《舞蹈V》2023-2024学年第一学期期末试卷
- 数字化时代银行零售业务营销策略优化报告
- 江西省吉安市遂州县2025届初三联合调研考试(语文试题理)试题含解析
- 家具生产工艺与设计考题试题及答案
- 山东外事职业大学《立法学》2023-2024学年第二学期期末试卷
- 江西省彭泽县市级名校2025年中考模拟考试试题数学试题试卷含解析
- 上海市徐汇区名校2024-2025学年下学期初三数学试题期末教学质量检测试题含解析
- 电动汽车市场策略的新挑战试题及答案
- 护士主管考试试题及答案
- 山东省日照莒县联考2025届初三下学期期末考试英语试题理试题(A卷)含答案
- 履约评价表模板
- 2021年信阳市罗山县中医院医护人员招聘笔试试题及答案解析
- DB32-T 2665-2014机动车维修费用结算规范-(高清现行)
- 2022年新高考湖南化学高考真题(word版含答案)
- Product Monitoring产品监视与测量程序(中英文)
- SB∕T 10170-2007 腐乳
- 外贸进出口流程图
- 部编人教版小学五年级下册语文文言文阅读理解课后专项练习
- 皮肤管理--ppt课件
- 双向气动插板门使用说明书
- 水利水电工程毕业设计---水闸设计
评论
0/150
提交评论