赞
踩
目录
右边接地,左边四个口分别连接到单片机的P3.0~P3.3;
要注意RXD与TXD的顺序与上面不一致。K1对应P3.1,K2对应P3.0,K3对应P3.2,K4对应P3.3
因为单片机上电时,I/O默认为高电平,所有按键没有按下时,则I/O口为高电平;按键按下时,I/O变为低电平。
- #include <REGX52.H>
-
- void main()
- {
- while(1)
- {
- if(P3_1==0) //如果K1按键按下,P3.1口为低电平
- {
- P2_0=0; //则P2.0口为低电平,LED灯D1亮
- }
- else
- {
- P2_0=1; //K1按键没有按下,P3.1口为高电平
- } //则P2.O为高电平,LED灯D1灭
- }
- }
独立按键控制LED灯亮灭
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
所以需要用软件延时消除按键抖动。
- #include <REGX52.H>
-
- void Delay(unsigned int xms) //@12.000MHz,延迟1ms,x为无符号整数参数
- {
- unsigned char i, j; //定义i、j为无符号字符
- while(xms) //将延迟1ms函数循环x次
- {
- i = 2;
- j = 239;
- do
- {
- while (--j);
- } while (--i); //将程序延迟1ms
- xms--; //每循环一次,x自动减1
- }
-
- }
-
- void main()
- {
- while(1)
- {
- if(P3_1==0) //如果独立按键K1被按下,则P3_1==0
- {
- Delay(20); //延时20ms,为了消除按键抖动
- while(P3_1==0); /*如果延时后,K1还是被按下,程序会一直执行空循环
- 循环体不执行程序,则等同while后加分号*/
- Delay(20); //程序跳出循环,说明K1按键被松手
- P2_0=~P2_0; //将D1灯取反
- }
- }
- }
独立按键控制LED状态
- #include <REGX52.H>
-
- void Delay(unsigned int xms)
- {
- unsigned char i, j;
- while(xms--) //--在后,则是操作完xms的循环体,自动减1
- {
- i = 2;
- j = 239;
- do
- {
- while (--j); //--在前,则是在操作j前,自动减1
- } while (--i);
- }
- }
-
- void main()
- {
- unsigned char LEDNum=0; //无符号字符型,正好是8位二进制
- while(1)
- {
- if(P3_1==0)
- {
- Delay(20);
- while(P3_1==0);
- Delay(20);
-
- LEDNum++; //每按键一次,LEDNum就自动加1
- P2=~LEDNum; //因为LED灯是0才亮,1为灭,所以需要取反才是刚好显示二进制
- }
-
- }
- }
独立按键控制LED显示二进制
- #include <REGX52.H>
- void Delay(unsigned int xms); //函数放后面,一定要再前面声明这个函数
-
- unsigned char LEDNum; //全局变量,所有函数都可用
- //没有给初始值,默认为0
- void main()
- {
- P2=~0x01;
- while(1)
- {
- if(P3_0==0)
- {
- Delay(20);
- while(P3_0==0);
- Delay(20);
-
- LEDNum++; //每按键一次,LEDNum自动加1
- if( LEDNum>=8)
- LEDNum=0; //如果中括号中只有一句程序,可以省略
- P2=~(0x01<<LEDNum); //每按键一次K2,就将0000 0001中的1向左移一位
- //每按键一次K2,就将D1灯向右移一位
- }
- if(P3_1==0)
- {
- Delay(20);
- while(P3_1==0);
- Delay(20);
-
-
- if(LEDNum==0)
- LEDNum=7;
- else
- LEDNum--; //每按键一次,LEDNum自动减1
- P2=~(0x01<<LEDNum); //每按键一次K1,就将0000 0001中的1向右移一位
- //每按键一次K1,就将D1灯向左移一位
- }
- }
-
-
-
- }
-
- void Delay(unsigned int xms) //@12.000MHz,延迟1ms,x为无符号整数参数
- {
- unsigned char i, j; //定义i、j为无符号字符
- while(xms--) //将延迟1ms函数循环x次
- { //--在后,则是操作完xms的循环体,自动减1
- i = 2;
- j = 239;
- do
- {
- while (--j); //--在前,则是在操作j前,自动减1
- } while (--i); //将程序延迟1ms
- }
- }
独立按键控制LED移位
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。