一、51单片机流水灯C语言源程序
文件说明:流水灯C程序
程序说明:MCU采用AT89S51,外接11.0592M晶振,P2口输出
#include//51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P2=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P2=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P2=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P2=temp;
delay(100); //调用延时函数
temp>>=1;
}
}
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
二、汇编程序:(同样P2为输出端口)
u 左移依次循环:
ORG 0000H
SJMP MAIN
ORG 0030H 主程序开始的地址
MAIN: MOV R2,#08H 设置循环次数
MOV A,#0FEH 赋初值
NEXT: MOV P2,A 把初值送到P2口
LCALL DELAY 延时
RL A 左移一位
DJNZ R2,NEXT 判断循环次数是否到,没有跳转到NEXT继续执行
SJMP MAIN 重复循环
DELAY: MOV R3,#0FFH 延时程序
DEL2: MOV R4,#0FFH
DEL1: NOP
DJNZ R4,DEL1
DJNZ R3,DEL2
RET
END 结束
u 二边散开后缩进(查表指令)
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#TAB 把表首地址送到DPTR
MOV R2,#06 设置循环次数
LOOP: CLR A 清零A
MOVC A,@A+DPTR 查表指令
MOV P1,A 把A中的值送到P1口
LCALL DELAY 延时
INC DPTR 改变数据指针
DJNZ R2,LOOP 判断循环是否到,没有跳转LOOP
SJMP MAIN 重复循环
DELAY: MOV R0.#10 延时
DEL2: MOV R1,#200
DEL1: MOV R3,#255
DJNZ R3,$
DJNZ R1,DEL1
DJNZ R0,DEL2
RET
TAB: DB 0E7H,0DBH,0BDH,7EH,0BDH,0DBH 查表
END