设为首页 收藏本站
开启辅助访问 切换到宽版

  找回密码
  立即注册

QQ登录

只需一步,快速开始

快捷导航
  • 论坛
  • 问答区
  • 单片机教程
  • 单片机DIY
  • 电子DIY
  • 帮助

热门: 51单片机 | 24小时必答区 | 单片机教程 | 单片机DIY制作 | STM32 | Cortex M3 | 模数电子 | 电子DIY制作 | 音响/功放 | 拆机乐园 | Arduino | 嵌入式OS | 程序设计

搜索
» 论坛 嵌入式/单片机论坛 24小时必答区 新人,希望大神们相助。真心不会按下K1键,P1口的LED灯 ...
返回列表 发新帖
查看: 17309|回复: 5
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:70290 发表于 2014-12-11 16:31 | 只看该作者 | 只看大图 回帖奖励 | 倒序浏览 | 阅读模式
根据上图,编写程序实现以下功能:
按下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();
        }
}
}
}


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

使用道具 举报

返回列表 发新帖
高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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

深圳SEO优化公司永湖网站推广方案多少钱包头关键词按天扣费报价丹竹头百度seo公司海西建网站哪家好绵阳百姓网标王哪家好新余seo报价迁安网站关键词优化公司海北百度网站优化排名池州网站优化按天收费公司芜湖网站排名优化信阳百度标王价格哈密高端网站设计报价广元高端网站设计公司大浪网站设计价格随州企业网站设计公司兴安盟seo网站优化哪家好天门SEO按效果付费多少钱松岗网站推广工具多少钱南充百度竞价包年推广公司黔西南设计网站海北百度关键词包年推广多少钱南京优化价格黄南关键词按天扣费多少钱周口设计网站推荐海东关键词按天扣费报价天门网站优化排名哪家好南充外贸网站建设公司连云港模板推广哪家好长沙关键词按天收费上海高端网站设计价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化