蹭分
跑马灯只要循环移位就好了,没啥难度吧,单片机里面最简单的是闪烁灯,第二简单就是跑马灯了。又叫流水灯,你可以找找,很多例子的。
[ 本帖最后由 pauljames 于 2012-10-26 21:06 编辑 ]
#include <reg52.h> void delay(unsigned int i); //声明延时函数 char LED; main() { unsigned char i; while (1) { LED = 0xfe; for (i = 0 ;i < 8 ; i++) { P2 = LED; delay(500); LED = LED << 1; // 左移 LED = LED | 0x01; // 移位后,后面的位为高电平 if (LED == 0x7f) break; //提前退出 FOR 循环 } for (i = 0 ;i < 8 ; i++) { P2 = LED; delay(500); LED = LED >> 1; // 右移 LED = LED | 0x80; // 移位后,后面的位为高电平 } } } /*******延时函数*************/ void delay(unsigned int i) { unsigned char j; for(i; i > 0; i--) for(j = 255; j > 0; j--); }
ORG 0000h AJMP start ORG 0030h start: MOV A,#0ffh CLR C MOV R2,#08h ;循环八次。 loop: RLC A ;带进位左移。 MOV P2,A ;输出到P1口。 CALL delay ;延时一段时间 DJNZ R2,loop ;反复循环 MOV R2,#07h ;再往回循环。 loop1: RRC a ;带进位右移 MOV P2,a ;输出到P1口。 CALL delay ;延时一段时间 DJNZ R2,loop1 ;反复循环 JMP start ;重新开始 delay: MOV R3,#20 ;延时子程序 d1: MOV R4,#20 d2: MOV R5,#248 DJNZ R5,$ DJNZ R4,d2 DJNZ R3,d1 RET END再来一个汇编版的