|
| » 首页 » 电脑_数码 » 编程 » 8个LED指示灯循环闪烁的程序(单片机) |
8个LED指示灯循环闪烁的程序(单片机) |
|
|
![]() |
|
|
ORG 0000H
JMP MAIN ORG 0030H ;************************************************ MAIN: MOV A,#0FEH ;赋初始值 LOOP: MOV R0,#07H ;移动次数 LOOPL: MOV P0,A ;A中的值送P0口 MOV P2,A ;A中的值送P2口 RL A ;左移 CALL DELAY;调用延时 DJNZ R0,LOOPL MOV R0,#07H ;移动次数 LOOPR: MOV P0,A MOV P2,A RR A ;右移 CALL DELAY DJNZ R0,LOOPR JMP LOOP ;************************************************ DELAY: MOV R6,#0FFH DEL: MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DEL RET ;************************************************ END 该程序是P0 P2口的LED同时左移后再同时右移的流水灯程序。 我的博客上有,你可以去看看,有两个,延时的方法不一样. /************************************************************ * LedRun * Donald, DONG ELECT. LAB. * 2008.4.28 [complete] * -------------------------------------------------- * LED跑马灯程序,先全亮,然后移动 * * P0: 8个LED ***********************************************************/ #include <reg52.h> #ifndef _DG_TYPE_ #define _DG_TYPE_ typedef unsigned char uchar; typedef unsigned int uint; #endif #define LED P0 void DelayMs(uint unMs); void main() { char i; LED = 0x00; DelayMs(1000); while(1){ LED = ~0x01; for(i = 1; i <= 8; i++){ DelayMs(1000); LED = ~(0x01 << i); } } } /************************************************************ * Name: DelayMs * Func: * 延时unMs个毫秒 * Para: * uint unMs: 延时毫秒的个数 * Return: None ***********************************************************/ void DelayMs(uint unMs) { uint i, j; for(i = unMs; i > 0; i--){ for(j = 120; j > 0; j--); } } 参考资料:blog.ednchina.com/dong_elec_lab |
| 《8个LED指示灯循环闪烁的程序(单片机)》答案收集时间:2008-06-14 14:38:51 |