雙向流水燈也是常見的編程題目。 題目的基本要求并不難,很容易就可以編寫出來。 但是,如果要求代碼簡短、執行流暢、可維護性強,可就不那么容易了。而這些都是編寫大型程序的基礎。 在網上有兩個這樣的問題,一個要求使用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<reg51.h>
#include<intrins.h>
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
|