双向流水灯的最简单程序

2019-04-15 12:57发布

双向流水灯也是常见的编程题目。题目的基本要求并不难,很容易就可以编写出来。但是,如果要求代码简短、执行流畅、可维护性强,可就不那么容易了。而这些都是编写大型程序的基础。在网上有两个这样的问题,一个要求使用C,另一个要求使用汇编。编程的要求如下:
//-----------------------------------
51单片机,让8个led从头亮到尾再从尾亮到头,有没有更简单的方法呢。
要求用C语言编程。
题目网址:http://zhidao.baidu.com/question/370212478.html
//-----------------------------------
;------------------------------------
编程:使用单片机P1口控制8个LED。
显示方式:自上而下逐个点亮,再自下而上逐个点亮,如此循环。
要用单片机的汇编语言,不要各种C。
题目网址:http://zhidao.baidu.com/question/316144728.html
;------------------------------------做而论道回答了问题,虽然没有得到提问者的青睐,但是做而论道自己还觉得程序是不错的,就写在这里吧。;==========================================================
//51单片机,让8个led从头亮到尾再从尾亮到头,有没有更简单的方法呢。
//题目网址:http://zhidao.baidu.com/question/370212478.html//是不是下面这个最简单:
//------------------------------------
#include
#include
void main (void)
{
    unsigned  char  mask = 1, j = 0;
    unsigned  int  i;
    while (1) {
      if (j < 7)  mask = _crol_(mask, 1);
      else        mask = _cror_(mask, 1);
      P1 = ~mask;  for(i = 0; i < 30000; i++);
      P1 = 0xff;   //for(i = 0; i < 10000; i++);
      j++;
      j = j % 14;
    }
}
//------------------------------------完
;===========================================================
;用汇编语言编程如下:    ORG   0000H
    MOV   A, #7FH
    MOV   R2, #7
L:  JNB   F0, R
    RL    A
    JMP   O
R:  RR    A
O:  MOV   P1, A
    CALL  DL_500ms   ;延时500ms
    DJNZ  R2, L
    MOV   R2, #7
    CPL   F0
    JMP   L
;------------------------------------
DL_500ms:            ;延时500ms子程序
    MOV   R5,  #4
    MOV   R6,  #205
    MOV   R7,  #200
    DJNZ  R7,  $
    DJNZ  R6,  $ - 2
    DJNZ  R5,  $ - 4
    RET
;------------------------------------
END;题目网址:http://zhidao.baidu.com/question/316144728.html
;===========================================================有兴趣的网友可以打开题目网址,对比一下各位网友的程序。
双向流水灯的电路很简单,这里就不画了。