标题: 要求P1、P2同时启动,这个程序怎么写? [打印本页]

作者: tmxk0574    时间: 2016-10-19 15:31
标题: 要求P1、P2同时启动,这个程序怎么写?
单片机的P1口接8个LED灯,即LED1、LED2、.....LED8,亮、灭程序如下(为简化起见,只写了3个)。
如果P2口也接8个LED灯,即LED11、LED12、.....LED18,并且要求P1、P2同时启动,即LED1和LED11要同时亮。
这个程序怎么写?敬请行家帮助,谢谢!

*******************
#include <REG51.h>  
sbit LED1=P1^7;
sbit LED2=P1^6;   
sbit LED2=P1^5;   
void Delay(unsigned int a)  
{
     unsigned int i;
     while(--a !=0)
   {
       for(i=0;i<600;i++);//延时约1毫秒
   }
}

void main(void)
{
     while (1)
   {
       LED1=0;       //1个循环用时5秒
       Delay(1000);   
       LED1=1;
       Delay(500);
       LED2=0;
       Delay(500);
       LED2=1;
       Delay(500);
       LED3=0;
       Delay(2000);
       LED3=1;
       Delay(500);
   }
}
*****************


要求P2的LED灯亮、灭状态如下:
       LED11=0;          //1个循环用时5秒
       Delay(500);   
       LED11=1;
       Delay(1000);
       LED12=0;
       Delay(1000);
       LED12=1;
       Delay(500);
       LED13=0;
       Delay(1000);
       LED13=1;
       Delay(1000);


作者: sz15207554653    时间: 2016-10-19 16:19
你的是流水灯,而且很繁琐,下面是同时亮和灭
while(1)
{
      P1 = 0xff;
      P2 = 0xff;
      Delay(1000);
      
      P1 = 0x00;
      P2 =0x00;
      Delay(1000);
}
作者: 741852963123    时间: 2016-10-19 16:27
楼上是对的
作者: 刘海龙    时间: 2016-10-19 16:41
  1. /*********************************************************************************************
  2. 编写:刘海龙
  3. 程序名:测试
  4. 硬件支持:

  5. /*********************************************************************************************/
  6. #include <REG51.h>  
  7. sbit LED1=P1^7;
  8. sbit LED2=P1^6;   
  9. sbit LED3=P1^5;
  10. sbit LED11=P2^7;
  11. sbit LED12=P2^6;   
  12. sbit LED13=P2^5;  
  13. void Delay(unsigned int a)  
  14. {
  15.      unsigned int i;
  16.      while(--a !=0)
  17.    {
  18.        for(i=0;i<600;i++);//延时约1毫秒
  19.    }
  20. }

  21. void main(void)
  22. {
  23.      while (1)
  24.    {
  25.        LED1=0;LED11=0;       //1个循环用时5秒
  26.        Delay(500);   
  27.        LED11=1;
  28.        Delay(500);
  29.        LED1=1;
  30.        Delay(500);
  31.        LED2=0;LED12=0;
  32.        Delay(500);
  33.        LED2=1;
  34.        Delay(500);
  35.        LED3=0;LED12=1;
  36.        Delay(500);
  37.            LED13=0;
  38.            Delay(1000);
  39.            LED13=1;
  40.            Delay(500);
  41.            LED3=1;
  42.    }
  43. }

  44. /************************************END*********************************************************/
复制代码

作者: 刘海龙    时间: 2016-10-19 16:42
测试.rar (451 Bytes, 下载次数: 6)
作者: 刘海龙    时间: 2016-10-19 16:45
我的思路:以500ms为最小时间单位,在时间轴上每过500ms查看是否有指令,没有则延时500没事继续向下查看,程序见附件
作者: tmxk0574    时间: 2016-10-20 22:50
先在这里谢谢各位,我想对刘先生的程序验证一下,因为我是新手,看不出来对与错,验证后再来感谢!
作者: tmxk0574    时间: 2016-10-21 12:55
本帖最后由 tmxk0574 于 2016-10-21 13:03 编辑

试了一下,好象不对,灯的亮灭与我的要求完全不一样。下面是LED灯亮灭的时序图
   希望各位行家再帮我改一改,非常感谢!





作者: 刘海龙    时间: 2016-10-21 22:06
少了最后一条关500ms,重新改了见附件

测试2.rar

450 Bytes, 下载次数: 4


作者: tmxk0574    时间: 2017-2-27 17:11
衷心感谢帮助我的朋友们,使我弄懂了这个问题,也感谢《51黑电子论坛》,给我这个学习的平台。愿朋友们快乐健康,愿《51黑电子论坛》发展、兴旺!
作者: zl2168    时间: 2017-2-27 22:04
P1、P2同时启动点亮LED1和LED11,没意义。P1、P2同时启动是1us,LED亮灯差别给人的感觉至少是数十ms。
作者: xyxsuper    时间: 2017-2-28 08:53
不错000000
作者: fzcx1990    时间: 2017-2-28 11:02
同时点亮只需对P1、P2进行操作,如果有特别的需要,可进行位操作P1.x、P2.x
作者: WZUOZ    时间: 2017-3-11 18:26
菜鸟路过
作者: xymiss    时间: 2017-10-5 23:07
还是好人多呀。
作者: wulin    时间: 2017-10-6 07:57
P2=P1=0xfe;
Delay(500);
P2=P1=0xff;
Delay(1000);
P2=P1=0xfd;
Delay(500);
P2=P1=0xff;
Delay(1000);
P2=P1=0xfb;
Delay(500);
P2=P1=0xff;
Delay(1000);
..............
作者: 春风十里吹    时间: 2019-2-25 03:45

还是好人多呀!学的也多!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1