c51独立按键程序,按下k1按键后对应的灯亮,但松开k1按键后灯还亮,k2也是如此,求大侠!
LOOP:
JNB K1,CASE1
JNB K2,CASE2
JNB K3,CASE3
JNB K4,CASE4
AJMP LOOP
CASE1:
MOV LED,#01111111
AJMP LOOP
CASE2:
MOV LED,#00111111
AJMP LOOP
CASE3:
MOV LED,#00011111
AJMP LOOP
CASE4:
MOV LED,#00001111
AJMP LOOP
K1~K4对应按键输入口,LED对应LED输出,两者应为普通IO口
if(k1)
{
delay(10ms);
if(k1)
{
led1 = 亮; //不知道你是0为亮还是1为亮
delay(1S) //延时1s
led2 = 亮;
}
while(k1);
led1 = 灭;
led2 = 灭;
}
if(k2)
{
delay(10ms);
if(k2)
{
led1 = 亮; //不知道你是0为亮还是1为亮
delay(1S) //延时1s
led3 = 亮;
}
while(k1);
led1 = 灭;
led3 = 灭;
}
思路就是这个样子。
if(k1==0)
P2=0xee;
else
P2=0xff;
if(k2==0)
P2=0xfd;
else
P2=0xff;
这是按住就亮,松开就灭的程序。
如果想实现按一次亮,再按一次熄灭。程序如下:
bit a=0,b=0;//做按键点亮熄灭标志
while(1)
{
if(k1==0&&a==0)
{
P2=0xee;
a=1;
}
else if(k1==0&&a==1)
{
P2=0xff;
a=0;
}
if(k2==0&&b==0)
{
P2=0xfd;
b=1;
}
else if(k1==0&&b==1)
{
P2=0xff;
b=0;
}
}
不用这么复杂,这样写就好了。
#include <reg51.h>
sbit LED1 = P1 ^ 0;
sbit LED2 = P1 ^ 1;
sbit KEY1 = P3 ^ 0;
sbit KEY2 = P3 ^ 1;
void main( void )
{
LED1 = 1;
LED2 = 1;
while(1)
{
if( KEY1 == 0 )
{
LED1 = ~LED1;
while( !KEY1 );
}
if( KEY2 == 0 )
{
LED2 = ~LED2;
while( !KEY2 );
}
}
}
单片机 按键(采用独立式按键)按下一次,让液晶第一位显示的数码加1,显 ...
程序清单如下:include < reg51.h >\/\/ 51单片机头文件 define uchar unsigned char \/\/ 宏定义,用uchar替代无符号字符型 define uint unsigned int \/\/ 宏定义,用uint 替代无符号整数型 sbit Key = P2 ^ 7;uchar Count = 0;uchar code DataChar[10] = \/\/ 定义数码管的段码 '0'~'9'、...
51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示
1、首先,要把代码写好,点亮数码管。2、代码写完后,要确认原先写好的代码是不是正确的。3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。5、这里改成的是代表数字0的代码,如图所示。6、...
利用简单键盘模块中提供的8个独立按键实现当K1按下时显示1,K2按下时...
include<reg51.h>#define uchar unsigned charuchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};main(){uchar i,key;P2=0xff;while(1){i=0;P1=table[i];while(1){key=P3;if(key!=0)break;}switch(key){case 0x01:i=1;break;case 0x02:i=2;break;case 0x04...
按键点灯程序,按一下按键灯亮(一直亮),再按一下灭,51单片机。
12.0代表晶振是12M,然后跳到Output项在生成HEX文件上打勾,点击OK。7、然后点击三个编译按钮意思分别为:单个文件编译、编译已修改的文件、产生HEX文件,HEX文件用来下载到单片机上的,也可用来做仿真。8、我们打开ISIS 7 Professional 软件,将程序添加到该电路中,然后按下启动按钮。
为什么加按键松手检测?
如果你不检测松开,你按下去的时间他整个程序扫描几遍了,会运行很快的,相当于只要是按着的,他就会检测 ,但是这按下去的这段时间他检测几遍了,就像你按了几次,如果加了,他就会检测按下去的键松开了没有,没有就会一直等待。
单片机设置独立按键K1,要求:+1.按下K1,LED模块以两个为一组从左向右移 ...
估计你的LED有8个,并刚好占用了一个PIO端口(如P1端口);如果端口为低电平时LED才能被点亮,那么你要给P1口怎样的数据让其中的两个LED点亮呢;另外,按键K1有动作时,要怎样做才能让单片机知道,就是有响应呢;
51单片机控制数码管显示时钟,独立按键怎么弄
独立按键处理起来是非常简单的,一般都是IO口单独控制,所以只需要消抖和判断按键按下抬起状态就好。比如:sbit key=P1^0;if(key==0){ delay(10); if(key==0) { keyval=1; while(key==0); }}
用51单片机按键控制启动给按键控制LED亮熄 在按键控制停止给LED不工 ...
不晓得你的按键和LED是高有效还是低有效 键盘需要去抖动啊 每次检测有键按下后,要延时一小段时间,在检测。你试一下呢?聚集还是要不得,感觉你程序算法有问题 include<reg52.h> \/\/\/宏定义\/\/\/ define uint unsigned int define uchar unsigned char \/\/\/定义引脚\/\/\/ sbit K1 = P1^0;sbit K2...
51单片机怎么用一个按键控制P0,P2顺序输出高电平
下面这个程序里面有你要的东西,自己找找。include"reg51.h"void delay(int n);sbit K1=P3^3; \/\/LED左移按键 sbit K2=P3^5; \/\/LED右移按键 sbit K3=P3^6; \/\/开启手动按键 sbit K4=P3^7; \/\/开启自动按键 bit mark1=0;bit mark2=0;unsigned char a,b,c,d;int x;...
51单片机独立按键中,按一下和一直按的区别
按一下松开这个LED一直亮:if(key==0) { while(key==0); led=0; }按一下松开就亮一下:if(key==0) { led=0; while(key==0); led=1; }