C51单片机键盘检测原理以及实现

发布者:敬亭山人最新更新时间:2015-07-21 来源: 51hei关键字:C51  单片机  键盘检测 手机看文章 扫描二维码
随时随地手机看文章
首先,在做软件之前确定硬件。明确键盘类型:

弹性按键:按下时闭合,松手后自动断开。如电脑键盘

自锁式按键:按下时闭合,且自动锁住。一边用于开关

在I/O口检测触电电压时应该考虑按键抖动问题,一般按键抖动为5~10ms左右,具体与其机械特性有关,所以要加检测抖动环节,可以用软件或者去抖动芯片硬件处理,当然通常用延时方法处理。
注意正确连接引脚。

下面是一个简单的4按键独立键盘程序,在51hei开发板的数码管上操作。
完整的源代码下载 http://www.51hei.com/f/jpdd.rar 
数值为0~59变化,开始显示00
按key1数值加1,按key2数值减1,按key3数值归0,按key4数值每秒加1。

#include
#define uchar unsigned char
#define unit unsigned int
sbit key1=P3^2;
sbit key1=P3^4;
sbit key1=P3^6;
sbit key1=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06.0x5b,0x4f,
0x66,0x6d,0x7d,0x07
0x7f,0x6f,0x77,0x7c
0x39,0x5e,0x79,0x71};
void delayms(unit);
uchar numt0,unm;
void display(uchar numdis)      //定义一个显示的函数,分个位十位,用来显示
{
uchar shi,ge;                 //然后用轮流显示发,利用人眼图像残留分别显示
shi=numdis/10;               //上面的numdis表示num这个显示的数
ge=numdis%10;              //numdis由下面主函数num赋值 
 
dula=1;
P0=table[shi];
dula=0;
 
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
 
dula=1;
P0=table[ge];
dula=0;
 
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
}
void delayms(unit xms)            //自定义延迟环节
{
unit i,j;
for(i=xms,i>0,i--);
for(j=110,j>0,j--);
}
void init()                       //初始化函数,保证程序正常运行
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-458720%256;
EA=1;
ET=0;
}
void keyscan()                 //键盘扫描函数,期间注意键盘抖动,由延迟方法处理
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
num++;
if(num==60)
num=0;
while(!key1);                //等待按键释放才执行,下同
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
num--;
if(num==0)
num=60;
while(!key2);
}
}
if(key3==0)
{
delayms(10);
if(key3==0)
{
uum=0;
while(!key3);
}
}
if(key4==0)
{
delayms(10);
if(key4==0)
{
while(!key4);
TR0=~TR0;                  //启动或者中断定时器
}
}
}
void main()
{
init();
while(1);
{
keyscan();
display(num);
}
}
void T0_time() interrupt 1                        //中断程序
{
TH0=(65536-45872)/256;                       //重装数值,数值需要根据晶振进行计算
TL0=(65536-45872)%256;
numt0++ ;
if(numt0==20)                        ///由于机器周期为50ms,那么1s需要20个周期
{
numt0=0;
num++;                       
if(num==60)
num=0;
}
}

关键字:C51  单片机  键盘检测 引用地址:C51单片机键盘检测原理以及实现

上一篇:基于51单片机的AD8080驱动程序
下一篇:自制51单片机超大数码管时钟

推荐阅读最新更新时间:2024-03-16 14:25

单片机在清除标志位时不要用位操作
这两天在调试一个项目的时候,一台主机与两台从机通信,但是有一台从机的报文收不到,仔细阅读代码,发现寄存器等配置都正常,自信阅读代码发现在清接收完成寄存器的时候用到了位域,猜想这就是问题所在,于是修改了程序,下载后一切正常。在单片机中一般的标志寄存器都是写1清0,好多中断标志等都是这样设计的,这时候就要注意在清除标志的时候不能用位域,因为好多单片机不不支持位操作的。 比如要清除IrqReg寄存器的BIT5,IrqReg.bit5 = 1;在没有位操作的单片机中会编译成 IrqReg |= BIT5;这条语句分三步执行,先读IrqReg寄存器,进行位或操作,最后把位或的结果写入该寄存器,这样问题就产生了,如果这句操作之前IrqRe
[单片机]
瑞萨新型32位元MCU内建USB 2.0 OTG功能
瑞萨电子(Renesas Electronics)的32位元微控制器(MCU) RX100 系列推出新款 RX111 产品,采用超低功耗零等待状态快闪记忆体制程,支援领先市场的 32位元耗电量/效能等级,并支援快速唤醒及各种标准周边装置与多种安全功能,并内建 USB 2.0 周边装置可支援主控、装置及On-The-Go (OTG)功能。 RX111将瑞萨8/16位元RL78 MCU系列的超低功耗带入32位元RX产品系列,提供更大范围的装置扩充性与功能。新款RX111的设计可支援多种低阶32位元嵌入式应用,包括行动医疗保健、智慧电表、感测器/侦测器,以及工业与大楼自动化。瑞萨真正的低功耗功能可在广大的温度与电压范围内,为设计工程师
[单片机]
串行口异步通信单片机程序设计实例
org 0000H AJMP START ORG 30H START: mov SP,#5fh ; mov TMOD,#20h ;T1: 工作模式2 mov PCON,#80h ;SMOD=1 mov TH1,#0FDH ;初始化波特率(参见表) mov SCON,#50h ;Standard UART settings MOV R0,#0AAH ;准备送出的数 SETB REN ;允许接收 SETB TR1 ;T1开始工作 WAIT: MOV A,R0 CPL A MOV R0,A MOV SBUF,A LCALL DELAY JBC TI,WAIT1 ;如果TI等于1,则清TI并转WAIT1
[单片机]
串行口异步通信<font color='red'>单片机</font>程序设计实例
C8051F与80C51系列单片机的不同初始化
C8051F系列单片机是Cygnal公司出品的高速单片机,它与80C51系列单片机指令集兼容,但比后者增加了许多资源,从而为嵌入式系统的开发提供了极大的方便。文中介绍了这两者在结构上的差异以及编程时应注意的问题,并给出了它们较完整的初始化程序。 1 引言   近30年来,世界各主要电子元器件生产厂商纷纷推出自己各具特色的单片机产品。而在百花齐放的单片机家族中,80C5l系列一直扮演着重要的角色。该单片机在教学、科研等领域已经成为入门单片机并成为单片机应用的首选,该产品以其易读性好、扩展能力强而著称,从而成为广大从事单片机开发者最熟悉、最具代表的机型。但人们往往在熟悉80C51单片机之后又选择别的系列单片机开发产品,这是因
[单片机]
C8051F与80C51系列<font color='red'>单片机</font>的不同初始化
单片机玩PID控制—从理想PID控制至先进PID控制_13
3.5复合模糊控制 复合模糊控制是指,在大偏差时用模糊控制,而在小偏差时用PID控制,从而可以克服模糊控制有偏差的缺点,其原理如图1所示。 3.5.1模糊控制 模糊控制工作原理如图2所示,模糊控制器的大致设计流程是:1确定输入语言变量,通常是偏差e和偏差变化率ec,确定输出语言变量,一般有两种情况:1)是控制输出,2)是PID参数,前者情况下就是模糊控制,后者的情况下就是模糊自适应PID控制,2确定每个语言变量的一个模糊子集,模糊子集中的元素被称为语言值,常见的语言值有:负大、负中、负小、零、正小、正中、正大等,3确定每个语言值的论域,论域可以是离散的,也可以是连续的,4确定每个语言值与论域之间的隶属度,在离散的情况下
[单片机]
用<font color='red'>单片机</font>玩PID控制—从理想PID控制至先进PID控制_13
单片机波形发生器 (正弦、三角、方波、锯齿波)
单片机源程序如下: #include reg52.h //包含头文件 #include intrins.h #define uchar unsigned char //宏定义 #define uint unsigned int sbit s1=P3^5; //定义按键的接口 sbit s2=P3^6; sbit s3=P3^7; sbit s4=P3^4; sbit led0=P3^0; //定义四个LED,分别表示不同的波形 sbit led1
[单片机]
<font color='red'>单片机</font>波形发生器 (正弦、三角、方波、锯齿波)
MCS—51单片机中断系统
图1 中断系统结构 由图1结构可知,51单片机有五个中断请求源,四个用于中断控制的寄存器IE、IP、TCON(用6位)和SCON(用2位) 用于控制中断的类型、中断的开/关和各种中断源的优先级别。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序的嵌套。 1、MCS-51中断源 1.定时器/计数器控制寄存器TCON(88H) TCON为定时器/计数器T0、T1的控制器,同时也锁存了T0、T1的溢出中断源和外部中断请求源,与中断有关的位如下: IE1:外部中断 (P3.3)请求标志位。 IT1:外部中断 请求类型(触发方式)控制位。 IT1=0:外部中断1程控
[单片机]
MCS—51<font color='red'>单片机</font>中断系统
Microchip推出40MHz PIC MCU
微芯科技最新推出的PIC微控制器(MCU)PIC18F45J10,电压为3V时频率可达40MHz。 这款8位MCU在单个28引脚封装中集成了模数转换器(ADC)、比较器、USART、SPI、I2C和PWM外设,以及32KB编程闪存。这些特性使PIC18F45J10系列器件特别适用于消费电子、家电、医疗和工业设备等各种成本价格敏感的应用领域。 从家电到消费电子等一系列成本敏感型设备的设计人员对其使用的8位MCU的性能和成本有更高的要求。PIC18F45J10、PIC18F44J10、PIC18F25J10和PIC18F24J10器件在降低了成本(降低了30%)和工作电压(3V)的同时维持了40MHz的工作性能,这是许多5
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved