找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9190|回复: 6
收起左侧

本人刚学单片机 问个小问题 下面的程序实现实现两个按键控制LED流水灯,按下P3.0,8个LED循环左移,按下P3.1,8个LED循环右移 小灯低电平亮

[复制链接]
ID:48645 发表于 2013-4-23 14:07 | 显示全部楼层 |阅读模式
ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV P1,#00H MOV P3,#0FFH LOOP: MOV P1,#00H JNB P3.0,KEY1 JNB P3.1,KEY2 LJMP LOOP KEY1: ACALL DELAY10 JNB P3.0,ZUOYI RET KEY2: ACALL DELAY10 JNB P3.1,YOUYI RET ZUOYI: MOV P1,#7FH MOV A,P1 LOOP1: RR A MOV P1,A ACALL DELAY500 CJNE A,#0FEH,LOOP1 RET YOUYI: MOV P1,#0FEH MOV A,P1 LOOP2: RL A MOV P1,A ACALL DELAY500 CJNE A,#7FH,LOOP2 RET DELAY500: MOV R7,#0CDH DL1: MOV R6,#74H DL0: MOV R5,#09H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET DELAY10: MOV R4,#05H DL3: MOV R3,#04H DL2: MOV R2,#0F8H DJNZ R2,$ DJNZ R3,DL2 DJNZ R4,DL3 RET END
回复

使用道具 举报

ID:59655 发表于 2014-3-22 17:17 | 显示全部楼层
看不懂,写得不规范
回复

使用道具 举报

ID:59827 发表于 2014-4-18 10:23 来自手机 | 显示全部楼层
你这代码没有任何规范可言
回复

使用道具 举报

ID:60462 发表于 2014-4-18 11:14 | 显示全部楼层
学51C语言简单吧!!!!
回复

使用道具 举报

ID:153199 发表于 2016-12-24 14:28 | 显示全部楼层
include<reg51.h>
#include<intrins.h>       //包含循环左、右移位函数的头文件
#define led P1
sbit key1=P3^2;
sbit key2=P3^3;
unsigned char a,b;

void delay(unsigned char m)
{
      unsigned i,j;
       for(i=0;i<=m;i++)
         for(j=0;j<=120;j++);   //这条语句大概延时1ms
}

void key1ch()
{
  
  while(key2)    //如果键2没有按下,循环执行这段程序
  {
   for(a=0;a<8;a++)
    {   
         delay(500);
         led=_crol_(led,1);//左移一位
         while(!key2) return;//如果键2按下,退出
      }
   }
}
void key2ch()   
  {
    while(key1)      //如果键1没有按下,循环执行这段程序
    {for(b=0;b<8;b++)
      {  
          delay(500);
          led=_cror_(led,1);//右移一位
           while(!key1) return;//如果键1按下,退出
      }
    }
}
回复

使用道具 举报

ID:153199 发表于 2016-12-24 14:29 | 显示全部楼层
include<reg51.h>
#include<intrins.h>       //包含循环左、右移位函数的头文件
#define led P1
sbit key1=P3^0;
sbit key2=P3^1;
unsigned char a,b;

void delay(unsigned char m)
{
      unsigned i,j;
       for(i=0;i<=m;i++)
         for(j=0;j<=120;j++);   //这条语句大概延时1ms
}

void key1ch()
{
  
  while(key2)    //如果键2没有按下,循环执行这段程序
  {
   for(a=0;a<8;a++)
    {   
         delay(500);
         led=_crol_(led,1);//左移一位
         while(!key2) return;//如果键2按下,退出
      }
   }
}
void key2ch()   
  {
    while(key1)      //如果键1没有按下,循环执行这段程序
    {for(b=0;b<8;b++)
      {  
          delay(500);
          led=_cror_(led,1);//右移一位
           while(!key1) return;//如果键1按下,退出
      }
    }
}

void main()
{
  led=0xfe;
  while(1)
  {if(!key1)
   {
    delay(10);
     while(key1);
      key1ch();
    }
   else
    if(!key2)
    {
      delay(10);
       while(key2);
        key2ch();
     }
   }
}
回复

使用道具 举报

ID:170597 发表于 2017-3-14 13:38 | 显示全部楼层
沙发~~~!沙发~~~!沙发~~~!沙发~~~!沙发~~~!沙发~~~!沙发~~~!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表