导航:首页 > 操作系统 > 51单片机流水灯编写

51单片机流水灯编写

发布时间:2024-10-03 22:15:24

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

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:

ORG 0000H;复位启动
AJMP START;
ORG 001BH;T1中断
AJMP T1INT;

;定义变量========================
YSJSEQU 30H;延时计数器
LEDEQU 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;汇编程序结束

(1)51单片机流水灯编写扩展阅读:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左移函数进行。

Ⅱ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)

单片机流水灯C语言程序的源代码如下:

#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个流水灯逐个闪动

{

P1=~temp;

delay(100); //调用延时函数

temp<<=1;

}

temp=0x80;

for(i=0;i<8;i++) //8个流水灯反向逐个闪动

{

P1=~temp;

delay(100); //调用延时函数

temp>>=1;

}

temp=0xFE;

for(i=0;i<8;i++) //8个流水灯依次全部点亮

{

P1=temp;

delay(100); //调用延时函数

temp<<=1;

}

temp=0x7F;

for(i=0;i<8;i++) //8个流水灯依次反向全部点亮

{

P1=temp;

delay(100); //调用延时函数

temp>>=1;

}

void delay(uint t) //定义延时函数

{

register uint bt;

for(;t;t--)

for(bt=0;bt<255;bt++);

}

(2)51单片机流水灯编写扩展阅读

51单片机流水灯的源代码如下

#include<reg51.h>

#include<intrins.h>

voiddelay(inta)

{

inti;

while(a--)for(i=0;i<110;i++);

}

main()

{

inti;

while(1)

{

P0=0xfe;

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

{

P0=_crol_(P0,1);

delay(500);

}

}

}

Ⅲ 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);

}

(3)51单片机流水灯编写扩展阅读:

流水灯几点说明:

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

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

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

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

Ⅳ 如何用单片机实现流水灯,从一依次亮到八,再从八依次亮

片机流水灯C语言程序的源代码如下:

#include //51系列单片机定义文件。

#define uchar unsigned char //定义无符号字符。

#define uint unsigned int //定义无符号整数。

void delay(uint); //声明延时函数。


硬件特征

1、单片机的体积比较小, 内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分方便,可以模块化应用。

2、单片机有着较高的集成度,可靠性比较强,即使单片机处于长时间的工作也不会存在故障问题。

3、单片机在应用时低电压、低能耗,是人们在日常生活中的首要选择, 为生产与研发提供便利。

Ⅳ 51单片机,要求是让流水灯正常运行,要求是数码管显示学号流水灯运行,然后打开开关数码管开始计数

#include "AT89X52.h"
#include "intrins.h"


#define LEG_LINE P2
#define LEG_DUAN P0

sbit Button = P3^7;


unsigned long dispalyCount;
unsigned int mCount;

unsigned char table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void display(unsigned long displaydata)
{
LEG_LINE = 0x01;
LEG_DUAN = table[displaydata / 10000000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

LEG_LINE = 0x02;
LEG_DUAN = table[displaydata % 10000000 / 1000000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

LEG_LINE = 0x04;
LEG_DUAN = table[displaydata % 10000000 % 1000000 / 100000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

LEG_LINE = 0x08;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 / 10000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

LEG_LINE = 0x10;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 % 10000 / 1000];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

LEG_LINE = 0x20;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 % 10000 % 1000 / 100];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

LEG_LINE = 0x40;
LEG_DUAN = table[displaydata % 10000000 % 1000000 % 100000 % 10000 % 1000 % 100 / 10 ];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

LEG_LINE = 0x80;
LEG_DUAN = table[displaydata %10 ];
mCount = 100;
while(mCount--);
LEG_DUAN = 0xff;
LEG_LINE = 0x00;

}

unsigned long displaydata = 11;

void Timer1init(void)
{
TMOD = 0X20;
TL1 = 0x00;//??????
TH1 = 0x4C;//??????
ET1 = 1;
TR1 = 1;//???1????
EA = 1;

}

unsigned char KeyStatus;

void main(void)
{
Timer1init();
while(1)
{
if (Button == 0)
{
mCount = 100;
while(mCount--);
if (Button == 0)
{
KeyStatus = ~KeyStatus;
while(!Button);
}
}
if (!KeyStatus)
{
display(displaydata);
dispalyCount = 0;
}
else
{
display(dispalyCount);
}
}
}

unsigned int count1,count2;
unsigned char Temp = 0xfe;


void Time1() interrupt 3
{
TL1 = 0x00;//??????
TH1 = 0x4C;//??????
if (count1++ == 1000)
{
count1 = 0;
Temp = _cror_(Temp,1);
P1 = Temp;
}
if (count2++ == 10)
{
count2 = 0;
if(dispalyCount++ >= 88888888)
{
dispalyCount = 0;
}
}
}


Ⅵ 51单片机流水灯用C语言编写的设计程序

其实很简单
就是用_cror_()函数或者 _crol_()函数,第一个是右移第二个是左移

阅读全文

与51单片机流水灯编写相关的资料

热点内容
android系统运行动态编译的程序 浏览:417
计算编程中常用的if语句是 浏览:734
linux文件夹权限乱了 浏览:909
程序员职业病预防保健操 浏览:678
c程序修改后需不需要重新编译 浏览:723
怎样把图片分别放置在文件夹中 浏览:871
推流服务器地址是什么 浏览:630
java允许多重继承 浏览:511
解压小玩具好玩又可爱 浏览:408
腾讯云大带宽服务器 浏览:821
加密锁的售后 浏览:268
linux登不上去 浏览:729
联想服务器休眠后如何唤醒 浏览:111
四川话女孩学习编程 浏览:322
编译原理文法区分 浏览:1001
教师可以做程序员嘛 浏览:637
终结战场安卓国际服怎么下载 浏览:155
现在的高端服务器属于什么 浏览:810
企业银行解压流程 浏览:447
用app压缩文件 浏览:227