按键模块
干扰信号,从而除去抖动影响。
4.5.3 快进按键
程序: if(p11==0) { delay1ms(10); if(p11==0) dpjs=dpjs+2; dpjs++; yj=sound[dpjs];
dpjs++; jp=sound[dpjs]; }
如果P11为低电平时,程序在经过10ms去抖动之后,节拍快进两步,蜂鸣器开始从 当前音节唱起.
/*逐个点亮*/
for(i=0;i<8;i++){ Led_port = (Led_port>>1)+0x80; delay1ms(200); /*延时*/ delay1ms(200); } Led_port =0x0f; delay1ms(200); Led_port =0xf0;
/*逐个熄灭*/
效。节拍倒退到指定的地方,然后音乐开始顺序执行。
4.5.5 暂停/跑马灯按键
程序:
Байду номын сангаас
if(p13==0) { delay1ms(10);
if(p13==0) { uchar i; for(i=0;i<8;i++){
Led_port = Led_port>>1; delay1ms(200); /*延时*/ delay1ms(200); } Led_port =0xf0; delay1ms(200); Led_port =0x0f;
4.5 按键控制模块
4.5.1 按键简介
1、按 键输入原理 键盘中每一个按键都是一个常开的开关电路,当所设置的功能键或数字键按下
时,则处于闭合状态,对于一组键或一个键盘,需要通过接口电路与单片机相连, 以便把键的开关状态通知单片机。单片机可以采用查询或中断方式了解有无键输入 并检查哪一个键被按下,并通过转移指令转入执行该键的功能程序,执行完又返回 到原始状态。 2、独立式按键
图1 键闭合及断开时的电压波动
2.假设p1.0为延时按键,则下面为延时的程序:
if(p10==0){
delay1ms(10); /*去抖动*/
if(p10==0)
{delay1ms(8000);/*延时*/
}
}
当按键P1.0按下时,执行一个10ms左右的延时程序后,再确认该键电平是否仍保持闭
合状态电平,若仍保持为闭合状态电平,则可以确认该键处于闭合状态,否则认为是
} 当P13输出零电平时,程序开始执行暂停指令,8个LED灯开始逐个点亮,每两个灯
之间有200ms的时间间隔,当8个灯全部点亮之后,跑马灯开始以200ms的间隔逐个熄
灭.直到全部熄灭为止.按键程序执行结束.
4.5.4 快退按键
程序:
if(p12==0)
{ delay1ms(10);
if(p12==0)
dpjs=dpjs-2; dpjs++; yj=sound[dpjs]; dpjs++; jp=sound[dpjs]; }
当"快退"按键按下时,P12输出零电平,经过10ms的抖动之后,快退按键开始生
独立式按键是指直接用I/O口线构成的单个按键电路。每个独立式按键单独占有 一根I/O口线,每根I/O口线的工作状态不会影响其他I/O口线的工作状态,这是一个 最简单易懂的按键结构。
4.5.2 延时按键
1. 目前,无论是按键或是键盘大部分都是利用机械触点的合或断作用。机械触点在 闭合及断开瞬间由于弹性作用的影响,均有抖动过程,从而使电压信号也出现抖动, 如图1所示.抖动时间长短与开关的机械特性有关,一般为5-10ms。