找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17521|回复: 5
打印 上一主题 下一主题
收起左侧

新人,希望大神们相助。真心不会按下K1键,P1口的LED灯从D1到D8依次循环点亮。

[复制链接]
跳转到指定楼层
楼主
根据上图,编写程序实现以下功能:
按下K1键,P1口的LED灯从D1到D8依次循环点亮。
按下K2键,P1口的LED灯从D8到D1依次循环点亮。
K1键和K2键同时按下时,发光二极管全灭。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:67992 发表于 2014-12-11 20:32 | 只看该作者
共同学习,抛砖引玉,不要笑:
#include <reg51.H>
#include <intrins.H>
sbit k1=P3^6;
sbit k2=P3^7;
void delay(int z)
{
        int x,y;
        for(x=z;x>0;x--)
         for(y=110;y>0;y--);
}
void main()
{
  while(1)
  {
          if(k1==0&&k2==1)
          {          P1=0xfe;
                    delay(5);
                  if(k1==0&&k2==1)
                  {
                           while(k2)
                           {
                                        P1=_crol_(P1,1);
                                        delay(500);
                       }
          }          
          }
          if(k2==0&&k1==1)
          {          P1=0xfe;
                    delay(5);
                  if(k2==0&&k1==1)
                  {
                           while(k1)
                           {
                                        P1=_cror_(P1,1);
                                        delay(500);
                       }
                  }
          }
          if(k1||k2==0)
          P1=0xff;
  }
}

评分

参与人数 1黑币 +10 收起 理由
xiaoyao + 10 很给力!

查看全部评分

回复

使用道具 举报

板凳
ID:70004 发表于 2014-12-11 20:37 | 只看该作者
本帖最后由 jiashun 于 2014-12-11 20:45 编辑

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  
unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
Delay(50000);
if(P3.6=0)
{
   P1=0xfe;           //赋初始值
  while (1)          //主循环
  {
    for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
   {
      Delay(50000);
      P1<<=1;
      P1=P1|0x01;     //右移后,最右端自动赋值0,所以需要该语句赋值1
  }
  P1=0xfe;           //重新赋初始值
  //主循环中添加其他需要一直工作的程序
  }
  }
  else if( P3.7=0)
{
   P1=0x7f;           //赋初始值
  while (1)          //主循环
  {
    for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
   {
      Delay(50000);
      P1>>=1;
      P1=P1|0x80;  
   //右移后,最左端自动赋值0,所以需要该语句赋值1
  }
  P1=0x7f;           //重新赋初始值
  //主循环中添加其他需要一直工作的程序
  }
  }
  else  if (P3.6=0&&P3.7=0)
  {
  P1=0xff;

}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:67992 发表于 2014-12-16 21:46 | 只看该作者
新思路实现
#include <reg51.H>
#include <intrins.H>
sbit k1=P3^6;
sbit k2=P3^7;
void main()
{
   unsigned int i=0;
   unsigned char k;
   while(1)
   {
           if((k1==0)&&(k2==0))
           {
                   P1=0xff;
           }
           else
           {
          if(k1==0)
          {  P1=0x7f;      
            k=1;
          }
          if(k2==0)
          {  P1=0xfe;        
             k=2;   
          }
        }  
                switch(k)
                {
                          case 1:
                                          i++;
                                          if(i>13000)
                                          {
                                                  i=0;
                                          P1=_cror_(P1,1);
                                          }
                                           break;
                          case 2:
                                          i++;
                                          if(i>13000)
                                          {
                                                  i=0;
                                          P1=_crol_(P1,1);
                                          }
                                          break;
            }
   }
}
回复

使用道具 举报

5#
ID:70508 发表于 2014-12-17 15:45 | 只看该作者
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit fmq=P3^6;
sbit k1=P3^2;
void delayms(uint);
uchar a;
uint z;
void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
        for(j=1;j<100;j++);
}

void delay500us()
{

unsigned char j;

for(j=0;j<57;j++);
}

void beer()
{
        fmq=0;
        delay500us();
        fmq=1;
        delay500us();

}

void display()
{
unsigned int t;
  while(1){
  
        for(t=0;t<500;t++)
        {
        beer();
  }
}       
}

void main()
{z=0;
         EA=1;        
   EX0=1;        
   IT0=1;
         a=0xfe;
         
        P0=a;
        delayms(500);
        a=_crol_(a,1);
while(1);
}


void int0() interrupt 0
{
       
        while(1){
        if(k1==0)
        {
                z++;
                if(z%2==0)
                        {
display();
        }
}
}
}




sbit k1=P3^2;
void delayms(uint);
uchar a;
uint z;
void delayms(uint x)
{
        uint i,j;
        for(i=x;i>0;i--)
        for(j=1;j<100;j++);
}

void delay500us()
{

unsigned char j;

for(j=0;j<57;j++);
}

void beer()
{
        fmq=0;
        delay500us();
        fmq=1;
        delay500us();

}

void display()
{
unsigned int t;
  while(1){
  
        for(t=0;t<500;t++)
        {
        beer();
  }
}       
}

void main()
{z=0;
         EA=1;        
   EX0=1;        
   IT0=1;
         a=0xfe;
         
        P0=a;
        delayms(500);
        a=_crol_(a,1);
while(1);
}


void int0() interrupt 0
{
       
        while(1){
        if(k1==0)
        {
                z++;
                if(z%2==0)
                        {
display();
        }
}
}
}


这个实用中断控制的,比较简单,希望有所帮助,,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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