Ⅰ 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);
}
流水灯几点说明:
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 P0sbit 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_()函数,第一个是右移第二个是左移