流水灯c语言及汇编程序,流水灯C语言及汇编程序.doc

一、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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值