导航:首页 > 操作系统 > 单片机键盘流水

单片机键盘流水

发布时间:2023-02-10 07:15:04

‘壹’ C51单片机按键切换流水灯

#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
sbitkey=P1^0;
ucharled,time;
voidt0isr()interrupt1
{
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
switch(time)
{
case0:P0=led;led=_crol_(led,1);break;
case1:P0=led;led=_cror_(led,1);brea;
case2:P0=led;led=~led;break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
TR0=1;
ET0=1;
EA=1;
led=0xfe;
while(1)
{
if(key==0)
{
while(key==0);
time++;
time%=3;
if(time==0)led=0xfe;
elseif(time==1)led=0x7f;
elseled=0x55;
}
}
}

‘贰’ 51单片机按键控制流水灯和数码管(最好用外部中断)

51单片机按键控制流水灯和数码管,P1口接8个LED灯,P0口接一个共阳数码管,P3.2和P3.3各接一个按键,分别用外部中断0和中断1。早蜂鸣器接在P2.7上。仿真图如下。

‘叁’ 单片机 独立键盘流水灯

KEY EQU 30H
LED EQU 31H
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
CLR EA
MOV SP,#5FH
MOV KEY,#0
MOV LED,#0FEH
LOOP:
MOV R7,#50
LCALL DELAY
LCALL KEYDEAL
MOV A,KEY
JNZ LOOP1
MOV A,LED
RL A
MOV LED,A
MOV P0,A
SJMP LOOP
LOOP1:
DEC A
JNZ LOOP2
MOV A,LED
RR A
MOV LED,A
MOV P0,A
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3
MOV A,LED
RL A
MOV LED,A
CPL A
MOV P0,A
SJMP LOOP
LOOP3:
MOV A,LED
RR A
MOV LED,A
CPL A
MOV P0,A
LJMP LOOP
;----------------------------
DELAY:
MOV R2,#2
DLY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY1
DJNZ R7,DELAY
RET
;-----------------------------
KEYDEAL:
JB P2.0,KEYEND
MOV R7,#10
LCALL DELAY
JB P2.0,KEYEND
INC KEY
MOV A,KEY
ANL A,#03H
MOV KEY,A
KEYEND:
RET
;-----------------------------
END

‘肆’ 52单片机独立按键控制LED流水灯

怎么个控制法,按一下,流水灯停下,再按一下开始,

还是按一下对应亮一个或亮下一个

还是想知道怎么用按键

教你用按键的方法,功能你自己去实现。把io口拉高电平后,接按键,如果按键按下,会接地,读出的io口电平会变为低,这样就可以判断说法按下按键,但要一直重复读取io口数据,而且要防抖动。


unsignedinttemp,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)
{
case0xfe:k=0;break;
case0xfd:k=1;break;//不同情况做出不同处理,变为0的是按下的键
case0xfb:k=2;break;
case0xf7:k=3;break;
case0xef:k=4;break;
case0xdf:k=5;break;
case0xbf:k=6;break;
case0x7f:k=7;break;
}
}
}

‘伍’ 单片机矩阵键盘控制流水灯的问题

#include<reg52.h>
/*
void delay10ms()
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=110;j>0;j--);
} */
void main()
{
unsigned char a;
while(1)
{
P1=0xf7;
a=P1;
if(a!=0xf7)
{
// delay10ms();
a=P1;
a=a&0xf0;
if(a!=0xf7)
{
a=P1;
switch (a)
{
case 0xe7:P2=0xff;break;
case 0xd7:P2=0xfe;break;
case 0xb7:P2=0xfc;break;
case 0x77:P2=0xf8;break;
}
while(a!=0xf0)
{
a=P1;
a=a&0xf0;
}
}
}
P1=0xfb; //1111 1011
a=P1;
if(a!=0xfb)
{
// delay10ms();
a=P1;
a=a&0xf0;
if(a!=0xfb)
{
a=P1;
switch (a)
{
case 0xeb:P2=0xf0;break;
case 0xdb:P2=0xe0;break;
case 0xbb:P2=0xc0;break;
case 0x7b:P2=0x80;break;
}
while(a!=0xf0)
{
a=P1;
a=a&0xf0;
}
}
}
}
}

你这个程序只能在P1口的P1.3和P1.4之间闪烁,
a=P1;
a=a&0xf0;
if(a!=0xf7)
{
这里已经定死了 if 语句永远也进不去。还有你这个程序层次很乱,看来你是个新手

‘陆’ 单片机,利用键盘控制LED灯显示不同的流水形式(单灯流水、双灯流水、随机流水),这个程序该怎么做啊。

首先、你要的是3个功能
如果你要用3个按钮,那就每个实现1种
如果你用的是1个按钮,那就1个实现3种
-
单灯流水,P*口(灯的接口) 循环左移命令 _crol_
比方:led1=0xff; _crol_(led1,1);P1=0xff; 这样就OK
双灯:也是一样的道理,把_crol_(led1,2)改下2就可以了
注意左移命令,在头文件 intrins.h 里面
随机流水? 这点有点不明白意思,是随机亮灭,还是怎么样个随机流水呢
原理就是用RAND 产生随机数,然后付给LED灯IO口就可以了

‘柒’ 大神,单片机按键咋控制我设置流水灯,按第一个键往左流水,按第二个键往右流水

你这程序就是写在纸上就算是完成作业了吗?至少也得在电脑上打出来吧。你这真是正版的纸上谈兵。
如果只写程序就能交作业,那你可以交了,不必问了。反正也是随便写就行的。

‘捌’ 单片机按键控制流水灯状态切换

现在一般不用2051了,呵呵,不过仿真也没事。
这程序可以这样写:设一个变量作为按键的键值,按下为1,再次按下为0;首先写一个流水灯的子程序,然后再主函数里去识别之前设置的键值,=1--->去执行流水灯;=0--->直接把P1口赋值0(也就是全亮)。这样就可以实现了。

‘玖’ 单片机c52怎么用4个键控制四种方式的流水灯,还能暂停,求解决!!!

这个程序可以试一下
#include "reg52.h"
typedef unsigned int WORD;

sbit key = P3^4;

void Delay_ms(WORD n)//软件延时
{
WORD x;
while (n--)
{
x = 100;
while (x--);
}
}

void main()
{
bit Y=0;
P1=0X01;
P3=0XFF;
while(1)
{
if(key==0)
{
Delay_ms(10);
if(!key)
{
Y=~Y;
while(!key);
}
}

if(Y==1)
{
if(P1==0X00)P1=0X01;

Delay_ms(100);
P1=P1<<1;

}

}

}

‘拾’ C51单片机编程,按键控制流水灯

#include "reg51.h"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7}; //LED灯的花样数据
void delay(unsigned char time){ //延时函数
unsigned int j=15000;
for(;time>0;time--)
for(;j>0;j--);
}
void main(){
bit dir=0,run=0; //标志位定义及初始化
char i;
while(1){
switch (P0 & 0x0f){ //读取键值
case 0x0e:run=1;break; //K1动作,设run=1
case 0x0d:run=0,dir=0;break; // K2动作,设run=dir=0
case 0x0b:dir=1;break; //K3动作,设dir=1
case 0x07:dir=0;break; //K4动作,设dir=0
}
if (run) //若run=dir=1,自上而下流动
if(dir)
for(i=0;i<=3;i++){
P2=led[i];
delay(200);
}
else
for(i=3;i>=0;i--){ //run=1,dir=0,自下而上流动
P2=led[i];
delay(200);
}
else P2=0xff; //若run=0,全部灯灭
}
}

阅读全文

与单片机键盘流水相关的资料

热点内容
android公网ip 浏览:611
要塞1地图放哪个文件夹 浏览:848
凡科建站怎么弄服务器 浏览:939
苹果手机怎么设置app播放 浏览:202
下载网站源码用什么浏览器 浏览:241
六线谱pdf 浏览:156
linuxmysqlsock 浏览:239
人教版数学pdf下载 浏览:460
文档安全加密系统 浏览:491
数控铣床编程简单数字 浏览:788
编程电缆如何重启 浏览:121
myqq命令行发消息 浏览:365
日产逍客怎么使用app升窗 浏览:503
安卓系统怎么快速删除微信内容 浏览:653
csharppython 浏览:409
程序员脖子按摩仪 浏览:562
小米桌面文件夹乱码怎么回事 浏览:858
点歌台app怎么连接 浏览:318
大学电脑编程学什么好 浏览:348
上哪里取消应用加密 浏览:172