导航:首页 > 操作系统 > 51单片机流水灯课程设计

51单片机流水灯课程设计

发布时间:2022-05-07 06:55:25

Ⅰ c51单片机中如何用汇编语言编写流水灯

51单片机用汇编语言编写流水灯程序,就是控制多个LED
,使其在特定时间间隔内,只有一个LED
发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:
;假设晶振12MHZ,P1控制8个LED低电平亮
;启动入口========================
ORG
0000H
;复位启动
AJMP
START
;
ORG
001BH
;T1中断
AJMP
T1INT
;
;定义变量========================
YSJS
EQU
30H;延时计数器
LED
EQU
31H;LED控制缓冲器
;主程序==========================
START:
MOV
LED,#0FEH
;初始化数据
MOV
YSJS,#0
;
;
MOV
TMOD,#10H
;定时器1工作于方式1,16位定时器
MOV
TL1,#0B0H
;设置定时初值
MOV
TH1,#3CH
;定时时间=50mS
SETB
ET1
;使能定时器1中断
SETB
TR1
;启动定时器1
SETB
EA
;开总中断
MOV
P1,LED
;初始化流水灯
;
LOOP:
JMP
LOOP
;循环等待中断
;
;
T1INT:
PUSH
PSW
;定时器1中断程序
PUSH
ACC
;保护现场
;
MOV
TH1,#3CH
;定时时间=50mS
MOV
TL1,#0B0H
;
INC
YSJS
;
PUSH
ACC
;保护ACC
MOV
A,YSJI
;
CJNE
A,#2,QT1
;50mS*2=100mS
MOV
P1,LED
;
MOV
A,LED
;
RL
A
;累加器A的值循环左移1位
MOV
LED,A
;
MOV
YSJS,#0
;
;
QT1:
POP
ACC
;恢复现场
POP
PSW
;
RETI
;返回主程序
END
;汇编程序结束

Ⅱ 51单片机设计流水灯

;电路图在附件内,经仿真通过,不知能不能达到你的要求。
;想要您的分真难啊
;呵呵!
org 0000h
ajmp start
org 0030h
start:
mov a,#0ffh ;
clr c ;
mov r2,#08h ;循环八次。
loop: rlc a ;带进位左移。
mov p1,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop ;反复循环
mov r2,#07h ;再往回循环。
loop1: rrc a ;带进位右移
mov p1,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

Ⅲ 用51单片机编写8盏流水灯程序,

ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVA,#0FEH
MOVR2,#8
LOOP:
MOVP0,A
LCALLDELAY
RLA
DJNZR2,LOOP
CPLA
LCALLDELAY
CPLA
LCALLDELAY
RLA
LCALLDELAY
CPLA
LCALLDELAY
MOVR2,#7
SJMPMAIN
END

Ⅳ 求基于51单片机的流水灯的设计

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit keya=P2^1;//这里看你把按键设置在哪个引脚上,这个是实现功能2
sbit keyb=P2^2;//这个是实现功能2
sbit keyc=P2^7;//实现功能3
void delay(uint z)
unit x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void key1()
{
if(keya==0)
{ uint x;
while(keyb)
{
P1=0xfe; //前一个灯亮
delay(1000);//1HZ
P1=P1<<1;//这里移动一位,也就是第二个灯亮,实现四种效果之一,一个一个灯轮流亮
}
if(keyb==0)
{ uint y;
P1=0xf0//前四个灯亮;
delay(1000);
P1=P1<<;//这里移动四位,即是前四个亮完后四个亮,如此循环,是第二种效果
}
}
void key2()
{
if(keyc==0)
{
P1=0xff;//使得灯全亮;
while(!keyc);//放开按键keyc后,此时keyc为1,程序不往下执行,所以只有再按下按键才能运行下面的程序
P1=0x00;//灯全灭
while(keya||keyb);//这里不能使用keyc了,如果使用keyc则在灭了之后又得按这个按键才能使全灭,这样循环下去功能1就无法实现了
}
void main()
{
while(1)
{
key1();
key2();
}
}
你试一下吧,太晚了,没时间帮你画仿真和试程序

Ⅳ 单片机流水灯课程设计

ORG 0000H //存储器起始地址
AJMP START //直接跳转执行程序
ORG 0030H //用户程序起始地址

START: MOV P0,#0FFH //熄灭所有LED灯
MOV A,#0FEH //传递数值设置P0.0亮
AAA: MOV P0,A //P0.0点亮
LCALL DELAY //跳转到DELAY延时子程序
JNB P1.3,BBB //判断P1.3是否为0,如果为0则跳转到BBB标签实现逆向跑马灯
RL A //A寄存器的数值循环左移一位,即FE左移1位后是FD
AJMP AAA //直接跳转到AAA标签,即实现LED灯从P0.0向P0.7正向跑马灯
BBB: MOV A,#7FH //传递数值设置P0.7亮
CCC: MOV P0,A //P0.7点亮
LCALL DELAY //跳转到DELAY延时子程序
JNB P1.0,START //判断P1.0是否为0,如果为0则跳转到START标签实现正向跑马灯
RR A //A寄存器的数值循环右移一位,即7F右移1位后是BF
AJMP CCC //直接跳转到CCC标签,即实现LED灯从P0.7向P0.0逆向跑马灯

DELAY: MOV R7,#250 //延时子程序第三层250*100*10次循环
DL1: MOV R6,#100 //延时子程序第二层100*10次循环
DL2: MOV R5,#10 //延时子程序第一10次循环
DJNZ R5,$ //R5减1,不为0则继续减
DJNZ R6,DL2 //R6减1,不为0则转到DL2标签
DJNZ R7,DL1 //R7减1,不为0则转到DL1标签
RET //子程序返回(至于延时多长时间得看硬件决定)
//12Mhz C51的话,延时500毫秒多一点点[(250*100*10+2+2)*2微秒]
//DJNZ MOV RET都是双周期指令
END //汇编结束标识

JNB P1.3,BBB //JNB就是判断位,判断P1.3位是否为0,如果为0则跳转到后面BBB标签对应的地址,否则执行下面一行指令。

JNB P1.0,START //判断P1.0位是否为0,如果为0则跳转到后面START标签对应的地址,否则执行下面一行指令。

P1.3外接一个按钮,按钮按一下时执行逆向跑马灯,P1.0同样外接一个按钮,按钮按一下时执行正向跑马灯。如果两个按钮都按下时就打架P0.0和P0.7轮流亮。

RL A //这个RL是循环左移位操作,就是把A寄存器里面的数值二进制位左移一位再保存到A寄存器里面。比如A=11111110B(0xFE)时,左移一位后A=11111101B(0xFD),再左移一位后变成A=11111011B(0xFB)。

Ⅵ 51单片机流水灯程序

程序如下:

#include <reg52.h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit led7 = P2^6;

sbit led8 = P2^7;


void main()

{

int i,j;

//点亮第一个灯

led1 = 1;

led2 = 0;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//延时1秒

for(i = 0;i < 110; ++i)

{

for(j = 0; j < 1000; ++j)

{

;//什么也不做

}

}

//点亮第二个灯

led1 = 0;

led2 = 1;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//点亮剩余的灯

//省略……

while(1);

}

(6)51单片机流水灯课程设计扩展阅读:

流水灯几点说明:

void:因为该延时函数不需要返回值,所以写为void

delay1s:该函数的函数名,命名需要符合C语言的标识符命名规则。

(): 不需要传入参数,所以括号中为空

至此我们可以把流水灯程序写为以下形式:

Ⅶ 如何用单片机简单制作一个流水灯

  1. 工具:STC系列51单片机、串口转换器(USB转TTL 或232转TTL)

  2. 材料:实验板一块(可以买现成的,也可以买面包板自己搭建),电阻、LED灯 若干,5V电源等。

  3. 以下程序可以直接用Keil C 直接编译执行。

//可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。


//具体实现方法可以参考如下程序:


#include<reg51.h>

#include<intrins.h>

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(uinta);

voidmain()

{

P1=0xfe;

while(1)

{

//向左循环点亮LED

for(i=0;i<7;i++)

{

P1=_crol_(P1,1);//左移一位,点亮下一位LED

delay(55);

}

//向右循环点亮LED

for(i=0;i<7;i++)

{

P1=_cror_(P1,1);//右移一位,,点亮上一位LED

delay(55);

}

}

}

//延时函数,延时a毫秒

voiddelay(uinta)

{

uintx,y;

for(x=a;x>0;x--)

for(y=110;y>0;y--);

}

Ⅷ 很简的51单片机C语言流水灯程序

1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:
#include<reg51.h> //51单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit beep=P2^3;
void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函数
{
uchar a,i,j;
while(1) //大循环
{
a=0xfe; //赋初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //点亮小灯
beep=0; //开启蜂鸣器
delay(50); //延时50毫秒
beep=1; //关闭蜂鸣器
delay(50); //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
2、51单片机是对所有兼容Intel
8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash
rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

Ⅸ 51单片机流水灯5v怎么画

1、首先要设计电路图,利用proteus软件进行电路图的设计。所需元器件:AT89C51单片机1个。LED-RED8个。电源VCC1个。
2、使用keil4软件进行流水灯程序的编辑。
3、方法一编写程序采用的是左移函数(_crol_(a,b))和右移函数(_cror_(a,b))的方法,需在前加上头文件#include。方法二是一个比较笨的方法,需要计算出每个灯亮的位编码。
4、总结:单片机流水灯的设计分为两个步骤,第一步是原理图的绘制;第二步是keil4流水灯控制程序的编写。在写程序的时候最好使用第一种方法,采用位移函数来进行流水灯的设计。

阅读全文

与51单片机流水灯课程设计相关的资料

热点内容
单片机的原理概述 浏览:506
火控pdf 浏览:267
如何复制云服务器centos环境 浏览:984
债权pdf 浏览:299
红色番字的app怎么下载 浏览:876
云服务器流程教课 浏览:702
中国农业银行app怎么没有网 浏览:997
几率表算法 浏览:902
程序员理工科 浏览:708
企业邮箱登录收件服务器地址 浏览:558
计算机思维与算法设计的重要性 浏览:664
linux刷新磁盘命令 浏览:76
我的世界如何查看服务器种子pc 浏览:284
linuxlamp编译安装 浏览:609
枚举算法ppt 浏览:184
cmd查看进程命令 浏览:956
手机内怎么删除APP 浏览:834
鱼群和鸟群算法区别 浏览:93
pdf尺寸设置 浏览:211
android访问本地服务器 浏览:512