03 51单片机之独立按键控制LED状态
文章目录
- 1、独立按键
- 2、键盘的类型
- 3、原理图示意
- 4、新建工程
- 5、工程编码
- 6、C51数据运算
- 7、按键抖动
- 8、工程编码(防抖操作)
- 9、独立按键控制LED并显示二进制
- 9、独立按键控制LED移位
1、独立按键
键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令、输入信息的必须设备。键盘在单片机应用系统中是使用最广泛的一种数据输入设备。键盘是由多个按键组成的。按键的工作原理:按键通常是一种常开型开关,常态下按键的两个触点处于断开状态,按下按键时它们才闭合。
2、键盘的类型
通常键盘有编码键盘和非编码键盘两种。编码键盘通过硬件电路产生被按按键的键值码,这种键盘使用方便,所需程序简单,但硬件电路复杂,如计算机的键盘,单片机则通常不采用编码键盘。而软件编程来识别的称为非编码键盘,非编码键盘硬件电路简单。在单片机组成的各种系统中,最常用的是非编码键盘。
3、原理图示意
注意:按键一端与IO口连接,另外一端接地。通过控制IO口输出高电平即可检测按键是否按下,当按下时IO口会被拉低,松开后IO口回到高电平。
4、新建工程
5、工程编码
#include <REGX52.H>void main()
{while(1){/* Press on the Button. */if(0 == P3_1){/* Light up LED. */P2_0 = 0;}else{/* Light off LED. */P2_0 = 1;}}
}
6、C51数据运算
#include <REGX52.H>void main()
{while(1){/* Press on the Button. */if((0 == P3_1)&&(0 == P3_0)){/* Light up LED. */P2_0 = 0;}else{/* Light off LED. */P2_0 = 1;}}
}
7、按键抖动
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
8、工程编码(防抖操作)
#include <REGX52.H>void DelayMs(unsigned int xms) //@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{while(1){/* Press on the Button. */if(0 == P3_1){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_1);/* Delay time is 20ms. */DelayMs(20);P2_0 = ~P2_0;}}
}
9、独立按键控制LED并显示二进制
#include <REGX52.H>void DelayMs(unsigned int xms) //@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{unsigned char LedNum = 0; // 8 bitwhile(1){/* Press on the Button. */if(0 == P3_1){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_1);/* Delay time is 20ms. */DelayMs(20);/* After Power on. P2 pin is high level status. P2 = 1111 1111 */LedNum++;P2 = ~LedNum;}}
}
9、独立按键控制LED移位
#include <REGX52.H>void DelayMs(unsigned int xms) //@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{unsigned char LEDNum = 0; // 8 bitP2 = ~0x01; // init Led status after power on.while(1){/* Press on the Button. */if(0 == P3_1){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_1);/* Delay time is 20ms. */DelayMs(20);/* After Power on. P2 pin is high level status. P2 = 1111 1111 */LEDNum++;if(LEDNum >= 8)LEDNum = 0;P2 = ~(0x1 << LEDNum);}if(0 == P3_0){/* Delay time is 20ms. */DelayMs(20);while(0 == P3_0);/* Delay time is 20ms. */DelayMs(20);/* After Power on. P2 pin is high level status. P2 = 1111 1111 */if(LEDNum <= 0)LEDNum = 8;elseLEDNum--;P2 = ~(0x1 << LEDNum);}}
}