双向流水灯也是常见的编程题目。题目的基本要求并不难,很容易就可以编写出来。但是,如果要求代码简短、执行流畅、可维护性强,可就不那么容易了。而这些都是编写大型程序的基础。在网上有两个这样的问题,一个要求使用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
;===========================================================有兴趣的网友可以打开题目网址,对比一下各位网友的程序。
双向流水灯的电路很简单,这里就不画了。