#include<reg51h>
#include<intrinsh>
#define uchar unsigned char
sbit key=P3^2;
uchar keyval;
void delay(uchar ms)
{
uchar i;
while(ms--)for(i=0;i<120;i++);
}
void ext0() interrupt 0
{
keyval++;
keyval%=2;
}
main()
{
EX0=1;
IT0=1;
EA=1;
P1=0xfe;
while(1)
{
switch(keyval)
{
case 0:
P1=_crol_(P1,1);
delay(200);
break;
case 1:
P1=_cror_(P1,1)
delay(200);
break;
}
}
}
while(1)//把while放到你的主函数里
{
if(key==0) //定义到自己的按键
{
run++; //全局变量
if(run==4)
{
run=1;
}
}
P0=0xff; //这个程序控制的是P0口
switch(run)
{
case 1:
P0=0xfe;
P0=0xfd;
P0=0xfb;
P0=0xf7;
P0=0xef;
P0=0xdf;
P0=0xbf;
P0=0x7f;
break;
case 2:
P0=0x7f;
P0=0xbf;
P0=0xdf;
P0=0xef;
P0=0xf7;
P0=0xfb;
P0=0xfd;
P0=0xfe;
P0=0xff;
break;
case 3:
P0=0xff;
break;
}
}
怎么个控制法,按一下,流水灯停下,再按一下开始,
还是按一下对应亮一个或亮下一个
还是想知道怎么用按键
教你用按键的方法,功能你自己去实现。把io口拉高电平后,接按键,如果按键按下,会接地,读出的io口电平会变为低,这样就可以判断说法按下按键,但要一直重复读取io口数据,而且要防抖动。
{unsigned int temp,k=9;
P2=0xff;//用P2检测键盘
temp=P2;
temp=temp&0xff;
if (temp!=0xff)//接地了,有按下
{
delayxms(10);//等键盘稳定,以确认不是误按、抖动
temp=P2;//再次检测
temp=temp&0xff; //防抖 ,确认是按下
if (temp!=0xff)//确认不是误按、抖动
{
switch (temp)
{
case 0xfe:k=0;break;
case 0xfd:k=1;break;//不同情况做出不同处理,变为0的是按下的键
case 0xfb:k=2;break;
case 0xf7:k=3;break;
case 0xef:k=4;break;
case 0xdf:k=5;break;
case 0xbf:k=6;break;
case 0x7f:k=7;break;
}
}
}
}
用的什么单片机
给你个问号STM8S单片机参考
PB端口接LED灯,高电平点亮
PA口接按键,按下去出现低电平,key1 接PA3,key2接PA4
#include“stm8s105c6h”
void delay_1ms(unsogned int a)
{
int b;
while(a--)
{
b=150;
while(b--);
}
}
void main()
{
char model=2;//声明此变量,记录灯工作模式
char i,x,y;//i记录流水次数
PB_DDR=0XFF;//PB端口设置为输出模式
PB_CR1=0XFF;//PB端口设置为推挽输出
PA_DDR=0X00;//PA设置端口设置为输入模式
PA_CR1=0XFF;//PA端口设置为上拉输入
while(1)
{
if(PA_IDR&0B00001000==0)//key1被按下
{
model=0;
}
if(PA_IDR&0B00010000==0)//key2被按下
{
model=1;
}
if(model==0)//下面写流水灯代码
{
x=1;
for(i=0;i<8;i++)
{
PB_ODR=x;
delay_1ms(200);
x<<=1;
}
}
if(model==1)//下面写交替闪烁代码
{
PB_ODR=0B10101;//点亮1,3,5
delay_1ms(200);
PB_ODR=0B101010;//点亮2,4,6
delay_1ms(200);
}
}
}
现在一般不用2051了,呵呵,不过仿真也没事。
这程序可以这样写:设一个变量作为按键的键值,按下为1,再次按下为0;首先写一个流水灯的子程序,然后再主函数里去识别之前设置的键值,=1--->去执行流水灯;=0--->直接把P1口赋值0(也就是全亮)。这样就可以实现了。
51汇编程序如下:
KEY EQU P32
LED EQU P1
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
CLR 00H
MOV A,#0FEH
LOOP:
JB P32,LOOP1
JNB P32,$
CPL 00H
LOOP1:
JB 00H,LOOP2
MOV LED,#0FFH
SJMP LOOP
LOOP2:
MOV P1,A
RL A
LCALL DELAY
SJMP LOOP
DELAY:
MOV R2,#200
DLY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY1
RET
END
以上就是关于求一个单个按键控制两种模式的流水灯程序,#include<reg51.h>开头的全部的内容,包括:求一个单个按键控制两种模式的流水灯程序,#include<reg51.h>开头的、一个独立按键控制八只流水灯、52单片机独立按键控制LED流水灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)