单片机原理与应用 第4章 单片机输入检测
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <reg52.h> sbit key1=P2^0; sbit led1=P1^7; void main() { while(1)
{ key1=1; if (key1==0) {led1=0;} else {led1=1;}
} }
4.1 独立按键检测
一、独立键盘
【例】P2.0引脚接按键,P1.7引脚接LED,按下按键LED点亮。(标志位)
04
单片机输入检测
重点介绍键盘的工作原理、接口设计与软 件编程以及物理量转换为开关量的信号检测。
04 单片机输入检测
1 独立按键检测 2 矩阵键盘检测 3 开关量信号检测
4.1 独立Leabharlann 键检测键盘具有向单片机输入数据、命令等功能,是人与单片机对话的主要手段。
编码键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生 键编码号或键值的称为编码键盘,如计算机键盘。
{ keyscan(); if(keyflag==1) { led=0; }
}}
void keyscan()//按键检测函数 {
key=1; // 输入先写“1” if (key==0)
{ delay(10);//延时去抖 if(key==0) //按键按下 {
while(!key); //松手检测 keyflag=1;//设标志位 }
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit key=P2^0;//按键声明 sbit led=P1^7;//LED声明 uchar keyflag=0;//按键标志位 void delay(uint i);//延时 void keyscan();//按键检测函数 void main() { while(1)
KEY1=1; // 输入先写“1” if (KEY1==0)
{ delay(10);//延时去抖 if(KEY1==0) //按键按下 {
while(!KEY1); //松手检测 keyflag=1;//设标志位 }
} KEY2=1; // 输入先写“1”
if (KEY2==0)
{ delay(10);//延时去抖 if(KEY2==0) //按键按下 {
{ keyscan(); switch(keyflag) { case 1:P1=0xfe;break; case 2:P1=0xfd;break; case 3:P1=0xfb;break; case 4:P1=0xf7;break; }
优化代码
void keyscan()//按键检测函数 { KEY1=1; // 输入先写“1”
if (KEY1==0)
{ delay(10);//延时去抖 if(KEY1==0) //按键按下 {
while(!KEY1); //松手检测 keyflag=1;//设标志位 }
} KEY2=1; // 输入先写“1”
核心指令
void keyscan() { key=1; // 输入先写“1”
if (key==0) { delay(10);//延时去抖 if(key==0) //按键按下
{while(!key); //松手检测 程序段;
}} }
4.1 独立按键检测
一、独立键盘
【例】P2.0引脚接按键,P1.7引脚接LED,按下按键LED点亮。
}
}
【例】设计4个按键,分别控制4个LED,按下一个按键,只亮一个LED。
KEY1按下:P1=1111 1110B=0xfe; KEY2按下:P1=1111 110 1B=0xfd; KEY3按下:P1=1111 101 1B=0xfb; KEY4按下:P1=1111 011 1B=0xf7;
void keyscan()//按键检测函数 {
while(!KEY2); //松手检测 keyflag=2;//设标志位 }
}}
【例】设计4个按键,分别控制4个LED,按下一个按键,只亮一个LED。
void keyscan()//按键检测函数 { P2=0xff; // 输入先写“1”
if ((P2&0x0f)!=0x0f) //检测有按键按下 {
if (KEY2==0)
{ delay(10);//延时去抖 if(KEY2==0) //按键按下 {
while(!KEY2); //松手检测 keyflag=2;//设标志位 } …… ……
}}
【例】设计4个按键,分别控制4个LED,按下一个按键,只亮一个LED。
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit KEY1=P2^0;//按键声明 sbit KEY2=P2^1;//按键声明 sbit KEY3=P2^2;//按键声明 sbit KEY4=P2^3;//按键声明 uchar keyflag=0;//按键标志位 void delay(uint i);//延时 void keyscan();//按键检测函数 void main() { while(1)
非编码键盘:靠软件编程来识别的称为非编码键盘; 在单片机系统中,用的最多的是非编码键盘。
非编码键盘分成独立键盘和矩阵(行列式)键盘
一、独立键盘
图1 弹性按键
4.1 独立按键检测
一、独立键盘
1 按键检测原理
弹起高电平 按下低电平
按键在闭合和断开时,有10ms抖动期如何去抖?
4.1 独立按键检测
2 软件按键去抖动
delay(10);//延时去抖 if(KEY1==0) //KEY1按键按下
{keyflag=1;//设标志位1 while(!KEY1); }//松手检测 if(KEY2==0) // KEY2按键按下 {keyflag=2;//设标志位2 while(!KEY2);} //松手检测 if(KEY3==0) // KEY3按键按下 {keyflag=3;//设标志位3 while(!KEY3);} //松手检测 if(KEY4==0) // KEY4按键按下 { keyflag=4;//设标志位4 while(!KEY4);} //松手检测 } }
{ key1=1; if (key1==0) {led1=0;} else {led1=1;}
} }
4.1 独立按键检测
一、独立键盘
【例】P2.0引脚接按键,P1.7引脚接LED,按下按键LED点亮。(标志位)
04
单片机输入检测
重点介绍键盘的工作原理、接口设计与软 件编程以及物理量转换为开关量的信号检测。
04 单片机输入检测
1 独立按键检测 2 矩阵键盘检测 3 开关量信号检测
4.1 独立Leabharlann 键检测键盘具有向单片机输入数据、命令等功能,是人与单片机对话的主要手段。
编码键盘:键盘上闭合键的识别由专用的硬件编码器实现,并产生 键编码号或键值的称为编码键盘,如计算机键盘。
{ keyscan(); if(keyflag==1) { led=0; }
}}
void keyscan()//按键检测函数 {
key=1; // 输入先写“1” if (key==0)
{ delay(10);//延时去抖 if(key==0) //按键按下 {
while(!key); //松手检测 keyflag=1;//设标志位 }
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit key=P2^0;//按键声明 sbit led=P1^7;//LED声明 uchar keyflag=0;//按键标志位 void delay(uint i);//延时 void keyscan();//按键检测函数 void main() { while(1)
KEY1=1; // 输入先写“1” if (KEY1==0)
{ delay(10);//延时去抖 if(KEY1==0) //按键按下 {
while(!KEY1); //松手检测 keyflag=1;//设标志位 }
} KEY2=1; // 输入先写“1”
if (KEY2==0)
{ delay(10);//延时去抖 if(KEY2==0) //按键按下 {
{ keyscan(); switch(keyflag) { case 1:P1=0xfe;break; case 2:P1=0xfd;break; case 3:P1=0xfb;break; case 4:P1=0xf7;break; }
优化代码
void keyscan()//按键检测函数 { KEY1=1; // 输入先写“1”
if (KEY1==0)
{ delay(10);//延时去抖 if(KEY1==0) //按键按下 {
while(!KEY1); //松手检测 keyflag=1;//设标志位 }
} KEY2=1; // 输入先写“1”
核心指令
void keyscan() { key=1; // 输入先写“1”
if (key==0) { delay(10);//延时去抖 if(key==0) //按键按下
{while(!key); //松手检测 程序段;
}} }
4.1 独立按键检测
一、独立键盘
【例】P2.0引脚接按键,P1.7引脚接LED,按下按键LED点亮。
}
}
【例】设计4个按键,分别控制4个LED,按下一个按键,只亮一个LED。
KEY1按下:P1=1111 1110B=0xfe; KEY2按下:P1=1111 110 1B=0xfd; KEY3按下:P1=1111 101 1B=0xfb; KEY4按下:P1=1111 011 1B=0xf7;
void keyscan()//按键检测函数 {
while(!KEY2); //松手检测 keyflag=2;//设标志位 }
}}
【例】设计4个按键,分别控制4个LED,按下一个按键,只亮一个LED。
void keyscan()//按键检测函数 { P2=0xff; // 输入先写“1”
if ((P2&0x0f)!=0x0f) //检测有按键按下 {
if (KEY2==0)
{ delay(10);//延时去抖 if(KEY2==0) //按键按下 {
while(!KEY2); //松手检测 keyflag=2;//设标志位 } …… ……
}}
【例】设计4个按键,分别控制4个LED,按下一个按键,只亮一个LED。
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit KEY1=P2^0;//按键声明 sbit KEY2=P2^1;//按键声明 sbit KEY3=P2^2;//按键声明 sbit KEY4=P2^3;//按键声明 uchar keyflag=0;//按键标志位 void delay(uint i);//延时 void keyscan();//按键检测函数 void main() { while(1)
非编码键盘:靠软件编程来识别的称为非编码键盘; 在单片机系统中,用的最多的是非编码键盘。
非编码键盘分成独立键盘和矩阵(行列式)键盘
一、独立键盘
图1 弹性按键
4.1 独立按键检测
一、独立键盘
1 按键检测原理
弹起高电平 按下低电平
按键在闭合和断开时,有10ms抖动期如何去抖?
4.1 独立按键检测
2 软件按键去抖动
delay(10);//延时去抖 if(KEY1==0) //KEY1按键按下
{keyflag=1;//设标志位1 while(!KEY1); }//松手检测 if(KEY2==0) // KEY2按键按下 {keyflag=2;//设标志位2 while(!KEY2);} //松手检测 if(KEY3==0) // KEY3按键按下 {keyflag=3;//设标志位3 while(!KEY3);} //松手检测 if(KEY4==0) // KEY4按键按下 { keyflag=4;//设标志位4 while(!KEY4);} //松手检测 } }