A. 单片机button是什么
单片机button是按键开关。buttonn对话框中的一种图形元素。当激活它时,能执行指定的功能。用户可以采用以下方法来激活按钮,用鼠标在其上单击,或者当按钮获得聚焦时按下Return或Enter键。
鼠标上的一个活动片,用于激活一些功能。旧式的鼠标模型只有一个按钮,新式一般有两个或更多个按钮。
单片机功能
单片机SingleChipMicrocomputer是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种IO口和中断系统、定时器。
计数器等功能可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、AD转换器等电路集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
B. 单片机按键功能
按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。
2.输入原理
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序
C. 单片机的独立按键
#include<reg51.h> // 4*4 按键+数码管仿真,可以参考。
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char ledx[8];
bit s0,s1;
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j<z;j++);
}
void scan() //要是按键了,扫描键盘编码值
{
P1=0xF0;
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判断是否按键
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
uchar i;
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
P0=0xff;
P2=LED7Code[ledx[0]];
P0=0xfe;
delay(5);
P0=0xff;
P2=LED7Code[ledx[1]];
P0=0xfd;
delay(5);
P0=0xff;
P2=LED7Code[ledx[2]];
P0=0xfb;
delay(5);
P0=0xff;
P2=LED7Code[ledx[3]];
P0=0xf7;
delay(5);
P0=0xff;
P2=LED7Code[ledx[4]];
P0=0xef;
delay(5);
P0=0xff;
P2=LED7Code[ledx[5]];
P0=0xdf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[6]];
P0=0xbf;
delay(5);
P0=0xff;
P2=LED7Code[ledx[7]];
P0=0x7f;
delay(5);
}
}
D. 单片机怎样识别按键值
一般的源值表如下,按键也对应如下
uchar
code
KeyCode[4][4]
=
{
//矩阵按键编号到标准键盘键码的映射表
{
0x31,
0x32,
0x33,
0x26
},
//数字键1、数字键2、数字键3、向上键
{
0x34,
0x35,
0x36,
0x25
},
//数字键4、数字键5、数字键6、向左键
{
0x37,
0x38,
0x39,
0x28
},
//数字键7、数字键8、数字键9、向下键
{
0x30,
0x1B,
0x0D,
0x27
}};
//数字键0、ESC键、
回车键、
向右键
E. 简述单片机独立按键的任务分为几步,分别是什么
5步。分别是判断按键是否按下,延时消抖,再次判断按键是否按下,等待按键抬起,执行预定语句。
一种是普通io口,一种是中弹的形式,普通io口是按下按键触发按键子程序案件,指程序经过一段时间的,比如20~50毫秒的延时再次毒案件,如果按键值还是会按下,那么就延时等待按键抬起按键,抬起后执行按键程序,然后返回中弹也是一样的,按下按键之后进入中段读按键状态,是否还是为按一下是按一下等待延时再读等待,然后等待案件采取后执行相应的代码,然后退出总代。
F. 单片机控制系统中,按键应如何连接不同连接方式,配置gpio工作模式时应如何
在单片机控制系统中,按键通常使用GPIO引脚连接,以便单片机能够读取按键的状态并作出相应的响应。按键连接的方式通常有两种:短接方式和上拉/下拉电阻方式。
短接方式
短接方式是将按键连接到单片机的两个相邻的GPIO引脚上,当按键被按下时,两个引脚就会短接在一起,形成一个电路,单片机可以通过检测引脚之间的电平变化来检测按键的状态。这种连接方式需要使用输入模式的GPIO引脚,具体的配置操作如下:
(1)选择相邻的两个GPIO引脚,一个用于连接按键的一端,另一个用于连接按键的另一端。
(2)将这两个GPIO引脚的工作模式设置为输入模式。
(3)为这两个GPIO引脚配置上拉电阻或下拉电阻,以确保在按键未被按下时,GPIO引脚处于稳定状态。
上拉/下拉电阻方式
上拉/下拉电阻方式是将按键连接到单片机的一个GPIO引脚上,并在按键与单片机之间添加一个上拉或下拉电阻。当按键未被按下时,上拉/下拉电阻会使GPIO引脚处于稳定状态,当按键被按下时,GPIO引脚裤樱手的电平会发生变化,单片机可以检测到按键的状态。这种连接方式需要使用输入模式的GPIO引脚,具体的配置操作如下:
(1)选择一个GPIO引脚用于连接按键。
(2)将这个GPIO引脚的工作模式设置为输入模式。
(3)为这个GPIO引脚配置上拉电阻或下拉电阻,以确保在按键未被按下时,GPIO引脚处于稳定状态。
需要注意的是,配置GPIO工作模式时,应该根据按键连颂空接方式选择适当的工作模式和上拉/下拉电阻配置,以确保按键的正常工作。胡嫌同时,也应该注意防止按键产生抖动等问题,可以通过软件消抖或硬件滤波等方法来解决。
G. 单片机的按键功能是什么
你们知道单片机的每个按键的具体功能吗?下面是我收集整理关于单片机的每个按键的具体功能的资料以供大家参考学习,希望大家喜欢。·
键盘的分类:
键盘分编码键盘和非编码键盘。
键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘;
而靠软件编程来识别的称为非编码键盘。
在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的。
非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。
本文主要讨论矩阵键盘(独立键盘比较简单可以与此类比),下面是矩阵键盘的电路连接图。
如果单片机检测到的是抖动部分,则无法按键判断是否有效,所以我们需要加入防抖程序。
注:也可以通过硬件防抖,如上图(b)。
功能:矩阵键盘
(按相应的按键,数码管从0~F的显示)
单片机:AT89S52
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DAT=P0^3;
sbit CLK=P0^2;
uchar temp,h;
void delay(uint); //延迟程序
void sendbyte(uchar); //数码管显示
void keyscan(); //按键扫描
uchar code tab[]={
0xed,0x09,0xbc,0x9d,0x59,0xd5,
0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,
0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全灭
void main (void)
{
sendbyte(16); //初始时数码管无显示
while(1)
{
keyscan(); //按键扫描
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void sendbyte(uchar byte)
{
uchar num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1; //右移位赋值
}
}
void keyscan()
{
/*第一行按键的扫描*/
P2=0xfe; //确定第一行的按键有效
temp=P2; //将其赋给一个变量(处理I/O口时,一般先赋值给一个变量,然后通过处理变量来处理I/O口)
temp=temp&0xf0; //用于检测第一行的哪个按键按下
while(temp!=0xf0) /*这个部分只要是用来消除按下抖动的*/
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0) //这个地方,已经消除了按下抖动,P2口的值已经确定
{
temp=P2; //将P2口得值赋给变量
switch(temp) //这个switch语句,用来确定哪一个按键按下时,数码管的显示值
{
case 0x7e:h=0;
break; //这个break很重要,表示如果有匹配的值,就跳出switch语句,防止程序跳不出来。
case 0xbe:h=1;
break;
case 0xde:h=2;
break;
case 0xee:h=3;
break;
default : h=16;
break;
}
while(temp!=0xf0) /*这个部分只要是用来消除释放抖动的*/
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h); //送给数码管显示
}
}
/*第二行按键的扫描*/
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7d:h=4;
break;
case 0xbd:h=5;
break;
case 0xdd:h=6;
break;
case 0xed:h=7;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第三行按键的扫描*/
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7b:h=8;
break;
case 0xbb:h=9;
break;
case 0xdb:h=10;
break;
case 0xeb:h=11;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第四行按键的扫描*/
P2=0xf7;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x77:h=12;
break;
case 0xb7:h=13;
break;
case 0xd7:h=14;
break;
case 0xe7:h=15;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}