单片机,按键一次,4灯从左向右依次亮,按键两次,4灯从右向左亮,谢谢

作者&投稿:魏宰 (若有异议请与网页底部的电邮联系)
1.用单片机控制8个LED灯,8个LED灯从左到右依次点亮一次,再从右到左依次点亮一次,下面是后面的题,这样-~

分成小题,再来提问,你将能较顺当的得到答案。

4个单片机I/O口如何实现3个按键控制3个LED灯;按键跟灯一一对应,按键按下相应的LED亮,再按一次,LED灭。见下图:

您的问题我已经解决,外加一张电路图。实现的主要功能为:按一次按键开关,二极管实现左到右的点亮;再按一次按键开关,二极管实现右到左的点亮;再按一次按键开关,又实现二极管做到右的点亮.........即:若按奇数次开关时,二极管实现左到右点亮;若按偶数次开关时,二极管实现右到左点亮。

电路图:

程序如下:

#include <reg51.h>

#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



你要如何区分是单击还是双击呢,是通过对第一次击键后的延时等待判断第二次有无击键并做出响应吗.

级数不够 就没有图片了
接一个按键到P1口,并接到int0口(p3.2口),就可以了
灯接p0口,要上拉电阻(330欧)
新手,时间紧,写的不是很好

WELE EQU 0X20
CNT EQU 0X21
ORG 0
AJMP MAIN
ORG 0X03
AJMP KEYSCAN
MAIN:
MOV P0 ,#0
MOV IE ,#0X81
MOV TCON ,#0X01
AJMP MAIN
RET
BUTTON:
PUSH PSW
PUSH ACC
AJMP KEYSCAN
KEYEND:
POP ACC
POP PSW
RETI
KEYSCAN:
MOV A ,P1
CJNE A ,#0XFF ,KEYSCAN
MOV CNT ,#0X4A
CHECK_LOOP:
MOV A ,P1
CJNE A ,#0XFF ,D_P_OUT
ACALL DELAY
DJNZ CNT ,CHECK_LOOP
AJMP S_P_OUT
RET

S_P_OUT:
ACALL R_LIGHT
RET
D_P_OUT:
MOV A ,P1
CJNE A ,#0XFF ,D_P_OUT
MOV IE ,#0
ACALL L_LIGHT
RET

R_LIGHT:
MOV WELE ,#0X01
LOOP1:
MOV A ,WELE
CJNE A ,#0X1F ,LOOP2
AJMP KEYEND
LOOP2:
MOV P0 ,A
ACALL DELAY1
RL A
INC A
MOV WELE ,A
AJMP LOOP1
RET

L_LIGHT:
MOV WELE ,#0X08
LOOP3:
MOV A ,WELE
CJNE A ,#0X8F ,LOOP4
AJMP KEYEND
LOOP4:
MOV P0 ,WELE
ACALL DELAY1
RR A
ADD A ,#8
MOV WELE ,A
AJMP LOOP3
RET

DELAY:
MOV R0 ,#0X14
D2:
MOV R1 ,#0
DJNZ R1 ,$
DJNZ R0 ,D2
RET
DELAY1:
MOV R2 ,#2

D_LOOP0:
MOV R4 ,#0
D_LOOP1:
MOV R3 ,#0
DJNZ R3 ,$
DJNZ R4 ,D_LOOP1
DJNZ R2 ,D_LOOP0
RET

END


摄影机如何调快门方式
4、点击字母“S”,S是快门速度的意思。5、滑动数字到“1\/1000”的位置,这是最快快门速度。6、滑动数字到“32”的位置,只是最慢的快门速度。快门速度:快门是照相机用来控制感光片有效曝光时间的机构。是照相机的一个重要组成部分,它的结构、形式及功能是衡量照相机档次的一个重要因素。一般而言快门的时间范围越...

...缩小题目:有一台奇特的复印机它只有如下三个按键1:5 1:4 10_百度...
至少需要5次,两次10:1 两次1:5 一次1:4

雄博磨片机,磨镜片的时候,按键亮了,嗯的时候机器不启动,不工作是怎么...
雄博磨片机,魔镜片儿的时候。按键灯亮了机器不启动不工作,可以检查一下线路问题。

自动取款机存款一次可取出多少钱
3、若遇提款机“吞卡”情况,千万不要走开,首先判断是否为提款机“死机”造成的,这种情况往往会在片刻之后恢复;其次如果确实发生提款机“吞卡”,不要惊慌,拨打紧急求助电话或摁下紧急求助按键,并且呆在原地等待。4、谨记从提款机上取出钱绝对不是最后一步。很多朋友着急取钱或取到钱后自以为操作...

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

打价格标签的机器怎么用?
打开标签打印机上盖,取出纸卷轴心;2.将轴心从左到右穿过价格标签纸,调紧挡片位置,使其紧贴标签纸;3.将限位档向下装入纸仓,拉出首张标签,盖上上盖;4.长按开机键开机;5.波动退纸按键一次,露出的标签自动退回标签打印机;6.手机扫描机身背面的APP二维码,下载手机APP,安装成功后,打开手机蓝牙...

靠面包片机上的 雪花按键什么意思
从冰箱里拿出来的面包 比较凉 用这个按钮

单片机 输入 数字 问题?
1。直接用电脑串口送10个数,收到后比较显示就行了,2。键盘扫描输入,3。在程序中直接送入10个数调试显示

电子表单片机程序
片机电子表原理图和程序代码(PCB电路),电子发烧友网站提供各种电子电路,电路图,原理图,IC资料,技术文章,免费下载等资料,是广大电子工程师所喜爱电子资料网站。 www.elecfans.com\/soft\/33\/2009\/2009052528022.html - 网页快照Cute51单片机(AT89S52)实验板电子表仿真程序_老古论坛 ...

手机按键失灵怎么办
如果手机按键失灵,建议您:1.若是运行某程序时,无法使用返回键退回上一界面或退出,建议单击主屏幕键(HOME键)退回到待机界面,重新进入该程序尝试。2.将手机关机重启。3.若手机的返回键、菜单键或最近应用程序按键、HOME键均无法使用,建议将近期安装的软件卸载删除尝试。4.若无效,请您备份手机中...

武昌区18320183960: 单片机应用,一个键多次按下,能够依次控制红黄蓝绿四个灯控制第一次按下亮红灯然后绿灯依次四下 -
巢帜橘红: #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 ...

武昌区18320183960: 51单片机问题:有一排LED灯,先最左边的亮,然后依次向右移 到了左右后再向左移 如此重复4次 -
巢帜橘红: 你要程序?你用-crol--cror-来移动加for循环来控制次数就行啦

武昌区18320183960: 求个用c 语言写的单片机的流水灯程序,灯从左到右依次点亮,速度加快 -
巢帜橘红: #include"reg51.h"unsigned char a[10]={0xff,0xFE,0xFC,0xF8,0xF0,0xE0, 0xC0,0x80,0x00,0xff};unsigned char tick_flag;unsigned char delay_cnt;unsigned char num; void UserInital() {delay_cnt=0;num=0;TMOD |= 0x01; //T0模式选择:模...

武昌区18320183960: 求一51单片机程序跑马灯,P1口接按键,p0口输出跑马灯,按2键跑马灯从两边走,3键中间往两边走,4键左右 -
巢帜橘红: /***************** 晶振4MHZ,按键key1为P3.4,P3.5接口 功能:按 key1键三次,P1灯亮,再按一次灭 ,如此重复 ******************/ #includesbit key1 = P3^4; /****************** void delay40us(uint time) 输入参数:time 输出参数:无 函数功能:延时...

武昌区18320183960: 51单片机怎么用button开关控制8个led从左往右以及从右往左的转化,要c需要代码,谢谢! -
巢帜橘红: 设:button 开关接在P0.1口,LED灯接P2口,共阳极接法.程序如下: #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit button=P0^1 ; void delay1ms(uint x) 延时...ms { for(uint s=0;s<x;s++)for(uint m=0;m<113;...

武昌区18320183960: 要求:控制芯片只能用51单片机, 需要用4个按键完成不同的流水灯项目 -
巢帜橘红: 将按键连接在一个I/O口上比如P0上然后读取P0的状态执行相应的程序让灯走起来比如按键1控制P0.0读取的P0值为1在执行1所对应的程序

武昌区18320183960: 求汇编单片机程序 请问如何用四个键来控制流水灯的快慢和左右流向,例如: k0:流水灯向左闪 k1: -
巢帜橘红: TLOW EQU 0F0H THIGH EQU 0D8HFLAG_DIR BIT 20H.0;FANGXIANGCOUNT_INT DATA 30H COUNT_K DATA 31H LEDVALUE DATA 32H COUNT_KEY DATA 33H KEY0 EQU P2.0 KEY1 EQU P2.1 KEY2 EQU P2.2 KEY3 EQU P2.3 ;-------...

武昌区18320183960: 单片机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就能中断当前执行的流水函数又去执行第二个流水灯函数了.希望我的回答能帮助到你.

武昌区18320183960: 怎么用单片机按键控制循环跑马灯???? -
巢帜橘红: 我刚好写过一个这样的程序,参考一下吧,希望对你有帮助/*硬件电路连接:流水灯接在P0口, 阳极接高电平,阴极接P0口,4个按键分别接P3.4,P3.5, P3.6,P3.7 ,按下时是低电平 */#include <regx51.h>sbit key1=P3^4;sbit key2=P3^5;...

武昌区18320183960: 51单片机制作一个由一个按钮控制的8盏流水灯程序,要求按下按钮后流水灯先从左到右闪两次 -
巢帜橘红: #include<reg51.h> #define uchar unsigned char sbit key=P1^0; uchar led; void delay(uchar x) {uchar i,j;for(i=0;i<x;i++)for(j=0;j<125;j++); } void disled() {uchar i,j;led=0xfe;for(j=0;j<2;j++){for(i=0;i<8;i++){P0=led;delay(200);P0=0xff;delay(...

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