
流水灯汇编程序
/*******flowing water light*********/
//晶振:12M ,P0口接8个led进行流水灯显示,74HC573驱动,8位led共阴接法
ORG 0000H
LJMP MAIN
ORG 0030H //主程序从程序存储器0030H单元开始存放
MAIN: MOV P0,#0FFH //P0口初始化
MOV A,#01H //共阴接法,点亮最低位LED
LOOP: MOV P0,A
LCALL DELAY_1S //延时1s
RL A //循环左移一次,点亮下一位
SJMP LOOP //跳转到LOOP处执行,死循环
// 3层嵌套软件延时子程序,延时1s
DELAY_1S: MOV R1,#10 //最外层循环体执行10次
DELAY0: MOV R2,#200 //中间层循环体执行200次
DELAY1: MOV R3,#248 //最内层循环体执行248次
DJNZ R3,$ //循环子程序最内层,执行时间248*2=496us
NOP //空操作,为了凑到准确的500us执行时间
DJNZ R2,DELAY1 //中间层循环体(1+496+1+2)*200=100000us=100ms
DJNZ R1,DELAY0 //最外层循环体(100ms+2us)*10=1000.02ms
RET
END
流水灯C语言程序
/*******flowing water light*********/
#include #include #define uchar unsigned char #define uint unsigned int //延时函数 void Delay_ms(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主函数 void main() { P0=0xff; //P0口初始化 P0=0x01; //共阴接法,点亮最低位LED while(1) { Delay_ms(1000); //延时约1s P0=_crol_(P0,1); //P0 的值向左循环移动,_crol_()函数在头文件intrins.h中 } }
