单片机按键控制4个LED,第一次按从左到右亮,第二次按从右到左亮。跪求程序!!我是stc89c52的。急!!

作者&投稿:束盛 (若有异议请与网页底部的电邮联系)
单片机,按键一次,4灯从左向右依次亮,按键两次,4灯从右向左亮,谢谢~

您的问题我已经解决,外加一张电路图。实现的主要功能为:按一次按键开关,二极管实现左到右的点亮;再按一次按键开关,二极管实现右到左的点亮;再按一次按键开关,又实现二极管做到右的点亮.........即:若按奇数次开关时,二极管实现左到右点亮;若按偶数次开关时,二极管实现右到左点亮。
电路图:
程序如下:
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table_1[]={
0xf7,0xfb,0xfd,0xfe};
uchar code table_2[]={
0xfe,0xfd,0xfb,0xf7};
sbit key=P2^0;
uint num;
//延时子程序
void relay(uint xm)
{
uint i,j;
for(i=xm;i>0;i--)
for(j=110;j>0;j--);
}
//实现左移
void left_shift()
{
uint i;
while(1)
{
for(i=0;i<4;i++)
{
P1=table_1[i];
relay(500);
}
}
}
//实现右移
void right_shift()
{
uint i;
for(i=0;i<4;i++)
{
P1=table_2[i];
relay(500);
}

}
void main()
{
while(1)
{
if(key==0)
{
relay(5); //防抖延时
if(key==0)
{
while(key) //按键是否起来
{
num++;
switch(num%2)
{
case 1:left_shift();break;
case 0:right_shift();break;
}
}
}
}
}
}
芯芯之火2011/6/13

#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar i,a,b=0,c=0,num;

void Delay(uint x)//延时函数
{
uchar s;
while(x--)
{
for(s=125;s>0;s--);
}
}

void main()
{
a=0x01;
P2=a;
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=1;//跳变沿触发
for(i=7;i>0;i--)//上电后灯先从左向右亮
{
Delay(100);
a=_crol_(a,1);
P2=a;
}
while(1);
}

void Init0() interrupt 0
{
b++;
c++;
if(b==0)//检测是否按键
return;
b=0;//按键后置0
if(c&0x01)//如果是奇数次按键,给num赋值为0
num=0;
else//如果是偶数次按键,给num赋值为1
num=1;
switch(num)
{
case 0:
for(i=7;i>0;i--)//灯从右向左亮
{
a=_cror_(a,1);
P2=a;
Delay(100);
}break;
case 1:
for(i=7;i>0;i--)//灯从左向右亮
{
a=_crol_(a,1);
P2=a;
Delay(100);
}break;
}
}

刚写完 仿真也OK 不知道能否帮助到你

我这个是8 个流水灯的,汇编的。除了你要的2 种花样外,还有另2 种花样。你可以参考

;4花样流水灯 2010.05.11

 AN EQU P3.0

 ORG 0000H

 AJMP MAIN

 ORG 0003H

 AJMP EX0INT

 ORG 0030H

MAIN: SETB EA

 SETB EX0

 SETB IT0

  ACALL DISP

 AJMP MAIN

 

EX0INT: INC R0  

 CJNE R0,#5,RTI

 MOV R0,#1

RTI: RETI 

DISP: MOV R1,#8

LED1:   CJNE R0,#1,LED2

        AJMP LED10

LED2: CJNE R0,#2,LED3

 AJMP LED20

LED3: CJNE R0,#3,LED4

 AJMP LED30

LED4: CJNE R0,#4,LEDRT

  AJMP LED40

LEDRT: RET

LED10: MOV A,#0FFH

 MOV P1,A

 ACALL DLY200

 MOV A,#0FEH

LED101: MOV P1,A

 ACALL DLY200

 RL A

 DJNZ R1,LED101

 AJMP DISP

LED20: ;MOV R1,#8

 MOV A,#0FFH

 MOV P1,A

 ACALL DLY200

 MOV A,#7FH

LED201: MOV P1,A

 ACALL DLY200

 RR A

 DJNZ R1,LED201

 AJMP DISP

LED30: MOV DPTR,#TAB

 MOV A,R1

 DEC A

LED301: MOVC A,@A+DPTR

 MOV P1,A

 LCALL DLY200

 MOV A,R1

 DJNZ R1,LED301

 AJMP DISP

LED40:  MOV DPTR,#TAB

 MOV A,R1

 DEC A

LED401: MOVC A,@A+DPTR

 CPL A

 MOV P1,A

 LCALL DLY200

 MOV A,R1

 DJNZ R1,LED401

 AJMP DISP

DLY200:      ;延时200ms

       MOV R4,#04H

DL01:

     MOV R3,#74H

DL00:

     MOV R2,#0D6H

     DJNZ R2,$

     DJNZ R3,DL00

     DJNZ R4,DL01

     NOP

     RET

TAB: DB 00000000B

 DB 00011000B

 DB 00111100B

 DB 01111110B

 DB 11111111B

 DB 01111110B

 DB 00111100B

 DB 00011000B

 

         END



太简单了,从网上一搜一大把
以下程序是经过验证的放心使用
#include <reg52.h>
#define uint unsigned int
sbit s1=P2^0;
int m;
void delay(uint z);
void main()
{
m=0;
while(1)
{
if(s1==0)
{
delay(5);
if(s1==0)
{
m++;
if(m==3)
m=1;
if(m==1)
{
P0=0xfe;
delay(500);
P0=0xfd;
delay(500);
P0=0xfb;
delay(500);
P0=0xf7;
delay(500);
}
if(m==2)
{
P0=0xf7;
delay(500);
P0=0xfb;
delay(500);
P0=0xfd;
delay(500);
P0=0xfe;
delay(500);
}
}
}
}
}
void delay(uint z)
{
int x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}


尼康d7200单反相机按键简介图解
单反相机正面按键介绍首先我们来看单反相机正面的按键,尼康D700作为专业单反,在按键功能上要比入门单反丰富很多,比如景深预览键就在入门机型中是没有的,可见主要还是针对专业用户的操作使用。 在镜头卡口左边上下分别有2个按键,它们别分为:景深预览按键、Fn自定义功能按键。景深预览:按动此键,镜头光圈会收缩到你设定的光...

笔记本电脑锁定快捷键_锁定笔记本键盘快捷键
常用的WORD文档快捷键: 1、Ctrl+C 复制; 2、Ctrl+X 剪切; 3、Ctrl+V 粘贴; 4、Ctrl+N 新建; 5、Ctrl+O 打开; 6、Ctrl+S 保存; 7、Ctrl+F 查找; 8、Ctrl+G 定位; 9、Ctrl+H 替换; 10、Ctrl+A 全选。锁定笔记本键盘快捷键是什么 锁定windows的快捷键为win+l即按住win键,再按L键...

壁挂炉四个按键使用说明,壁挂炉温度怎么调试?
2、生活用水冬季温度建议设置42℃,洗浴较为舒适,夏季温度建议调至38-40℃之间,调节温度方法很简单,在壁挂炉夏季模式按下△和_键就可以进行调节。壁挂炉使用注意事项壁挂炉主要有四个按键:分别为开关机、冬夏模式、上升、下降。设置键主要用于调整时间。复位按键主要用于操作错误以及程序混乱等,按下...

摄影机怎么调节光圈
摄像机镜头光圈的调节有三种方法是什么摄像机镜头光圈的调节方法有两种,即自动调节和手动调节,可以根据拍摄对象的不同合理的调节方法来获得最佳效果。让照片更加的明亮:光圈也可以控制相机的进光量,越大的光圈可以让照片更加的明亮,所以如果拍照片的时候感觉光线不足就开大光圈(每个镜头都有一个最大光圈值)。让照片...

摄影档位
作为一位合格的摄影师,需要熟练的掌握和运用相机上的功能,不需要被相机上复杂的按键给劝退,我们先熟悉相机上的各种档位。不论是单反相机还是微单相机,都包含了P、A、S、M和AUTO(自动模式)五个模式。 AUTO(自动模式) AUTO自动档位是我们口头常说的“傻瓜”档,使用起来简单方便,只需要选好场景,构图完成后只需要...

对相机的初步认识
4.照相机的构成:机身+镜头 机身:当我们拿起一架照相机,首先看到一个不透光的暗箱,我们称它为机身。机身是连接照相机光学、机械、电子三大部分的总载体。它的前端安装照相机镜头。数码相机机身里装有图像感应器、数字影像处理器和图像存储器等电子元件。传统胶片照相机的机身暗箱里面装有胶卷,胶卷中...

PSP3000的按键功能介绍
PSP按键操作说明:方向键,方向键下面的滑动摇杆,△、○、X、□键,L、R键就不用多介绍了吧?在PSP的XMB操作系统中,方向键是移动光标,△键是呼出菜单,○键是确定,X键是取消。PSP左侧有两个指示灯和一个开关 上面的指示灯是 “记忆棒指示灯”,只要PSP对记忆棒进行读写操作时就会闪烁;下面的...

电脑键盘上每个键的作用有哪些
详情请查看视频回答

索尼摄像机 "auto" 按钮是什么意思?
\\x0d\\x0aW.L(无线)选择无线话筒的信号 \\x0d\\x0aREAR(后部):选择机身后部CH1\/CH2音频输入...有AUTO(自动)和MAN(手动)两个选择AUDIO LEVEL CH1\/CH2(音量)控制旋钮:用于控制音频输入电平。当AUDIO...\\x0d\\x0a 通常摄像机有四档滤光(色)片:3200K、5600K、5600K+1\/4ND、5600K+1\/16ND 。

试驾新晋网红长城炮:颠覆皮卡形象,乐趣超出想象
长城炮的低速四驱扭矩放大倍数为2.48倍,也就是可以提供上千牛米的扭矩输出,爬坡时如果说不开4L模式就必须深踩保持油门,那么打开4L后则只需要轻点油门,爬坡就如履平地了。有了这一套硬件,驾驶长城炮在泥巴地里面可以玩得不亦乐乎,如果是选择顶配版本还有后桥电控差速锁,带来的越野能力还要再上一个台阶,更不用说...

尤溪县18037076606: 单片机应用,一个键多次按下,能够依次控制红黄蓝绿四个灯控制第一次按下亮红灯然后绿灯依次四下 -
芝宽葡萄: #include typedef unsigned char uint8_t; //定义数据类型 sbit key0 = P3^2;//按键对应的引脚,根据实际情况修改.sbit led0 = P1^0;//LED 对应的引脚,根据实际情况修改.sbit led1 = P1^1; sbit led2 = P1^2; sbit led3 = P1^3;#define LED_ON 0 ...

尤溪县18037076606: 单片机控制如何控制LED分别亮灭一次,两次,三次 -
芝宽葡萄: #include<reg51.h> sbit led=P1^1; sbit key=P3^3; bit flag; unsigned char cnt; void ext0() interrupt 2 { while(key==0); cnt++; if(cnt==4)cnt=1; flag=1; } main() { EX1=1; EA=1; IT1=1; flag=0; while(1) { if(flag) { for(i=0;i<cnt;i++) { led=0; delay(10000); led=1; delay(10000); } flag=0; } } }

尤溪县18037076606: 哪位高手帮帮忙帮我编个程序,用8051单片机控制4位LED共阳数码管.. -
芝宽葡萄: #include<reg52.h> sbit KEY=P3^3; //定义按键输入端口 sbit LED=P1^2; //定义led输出端口,一个四个都是一样的定义方法 void main (void) {KEY=1; //按键输入端口电平置高 while (1) //主循环{ if(!KEY) //如果检测到低电平,说明按键按下LED=0;elseLED=1; //这里使用if判断,如果按键按下led点亮,否则熄灭//如果需要四个亮就写LED1=1;LED2=1,LED3=1;LED4=1;不过上面得先定义好这四个led的引脚 } }希望对你有帮助

尤溪县18037076606: 求解读51单片机用四个按键独立控制四个led的c程序 -
芝宽葡萄: #include<reg51.h> //k2~k4 分别控制le1~le4 void delay(unsigned int x) //延时函数 {while(x--); //延时数减一 }void key_event (unsigned char d) //根据扫描到的键值,亮相应的LED{switch(d){case 14: P1^=(1<<0); break; //k1 键按下了case 13:...

尤溪县18037076606: 单片机C语言按键控制LED灯 -
芝宽葡萄: 其实是一样的,也没什么哪个规范这一说,这个看个人习惯了首先if(SW13==0)是判断此引脚是否为0 (按键按下)然后一个delay用于按键防抖动 没被注释的那部分是靠if在次判断是否为0按下按下后执行LED_ON函数使LED亮然后通过while...

尤溪县18037076606: 单片机c52怎么用4个键控制四种方式的流水灯,还能暂停,求解决!!! -
芝宽葡萄: 不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式.你使用的键盘函数直接调用流水灯函数就可以.比如使用独立键盘,if(P1.1==0) light_water(); 然后:void light_water() { num=1; for(a=0;a{ P1.1=numdelay(1000); //延时;keyboard();//执行时又不停扫描键盘函数;} } 这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第二个流水函数light_water1就能中断当前执行的流水函数又去执行第二个流水灯函数了.希望我的回答能帮助到你.

尤溪县18037076606: 单片机一个按键控制3个led灯,多种状态 -
芝宽葡萄: #include <reg51.h>sbit key =P1^1; sbit led1=P1^2; sbit led2=P1^3; sbit led3=P1^4; bit key_flag; bit flag_500ms;void InitTimer0(void) {TMOD |= 0x01;TH0 = 0x3C;TL0 = 0x0B0;EA = 1;ET0 = 1;TR0 = 1; } unsigned char stat; void main(void) ...

尤溪县18037076606: 一个开关控制四个LED的汇编程序,按一下第一个亮,按第二下第一个灭第二个亮,以此类推. -
芝宽葡萄: K1 BIT P0.7 LED1 BIT P1.0 LED2 BIT P1.1 LED3 BIT P1.2 LED4 BIT P1.3ORG 0000HLJMP MAINORG 0100H MAIN: SETB K1 LL1: JB K1,LL1CLR LED1 LL2: SETB K1JB K1,LL2SETB LED1CLR LED2 LL3: SETB K1JB K1,LL3...

尤溪县18037076606: 单片机中如何用一个按键控制八个灯的状态? -
芝宽葡萄: #include #define uint unsigned int #define uchar unsigned char void delay(uint z); void main() {uchar a;a=0x00;P0=0x00;//P0输出; led共阴接法 P1输入按键另一端接地 P0加上拉电阻P1=0xff;while(1){P0=0x00;if(P1!=0xff){a=...

尤溪县18037076606: 如何用C51单片机实现P0口接两个按键,P1口接8个LED灯.key1按下左移动1位点亮LED key2按下右移动1位点LED -
芝宽葡萄: 给个四路: 定意一个变量; if(按键1按下)变量为1; if(按键2按下)变量为2;if(变量==1) {左移控制; } else if(变量==2) {右移控制; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网