⑴ 51单片机 8盏花样流水灯
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV R1,#7 ;
MOV A,#0FCH
LOOP1: MOV P1,A
RL A
CALL DELAY
DJNZ R1,LOOP1
MOV P1,00H
CALL DELAY
CALL DELAY
MOV R1,#7 ;
MOV A,#3FH
LOOP2: MOV P1,A
CALL DELAY
RR A
DJNZ R1,LOOP2
MOV P1,#00H
CALL DELAY
SJMP MAIN
DELAY: MOV R4,#4
MOV R5,#200
MOV R6,#248
DJNZ R6,$
DJNZ R5,$-2
DJNZ R4,$-4
RET
END
注:LED共阳接法
⑵ 单片机流水灯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)单片机8个流水灯实验报告扩展阅读
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单片机汇编控制8个流水灯
思路:
循环控制常亮状态的值,将其从最高位循环到最低位。这个用于最后状态的常亮
在常亮循环中,控制不是常亮的其它所有位进行再次循环,逐渐从最低位亮灭循环到最高位
代码如下:
#include<reg51.h>
unsignedcharPData;//整体结果
unsignedcharCurrData;//变化的最高位
//延时,本函数是非精确延时,若需要精确延迟则需要根据本函数的汇编语句进行精确计算后调整循环体次数
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全灭状态
for(i=8;i>0;i--){//控制常亮的位置,先从最高位开始,依次循环到最低位
for(j=0;j<i-1;j++){//从最低位循环到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位灭
delay(500);
}
PData=PData+(1<<(i-1));//置最高位为常亮状态
P1=~PData;
delay(500);
}
//停机
while(1){
;
}
}
⑷ 单片机led左右灯实验:要求: 八个LED灯依次向左再向右,循环点亮,间隔闪烁
你现在的程序就有问题啊。我给你改改吧。一会儿给你发程序附件。你要的就是流水灯程序呗,就是先从左向右依次点亮led灯然后在从右向左依次点亮对吧。
程序已经给你传到附件里面了,用电脑下载吧,传的c程序你可以直接用。有什么不懂的再问我吧。(你的编程风格很有问题啊,程序写的一坨,层次不清晰没有标注,我初学的时候也犯了这样的错误,将来你写大篇幅的程序的时候会出现一堆问题的,清晰地编程风格非常重要,仅仅是建议。)
⑸ 单片机原理流水灯实验报告
单片机原理流水灯实验报告:
本实验的目的是通过使用单片机,来实现流水灯的功能。实验中,使用了AT89C51单片机,通过设置定时器,实现了不同的流水灯灯序,并使用外部中断按键,来控制流水灯的开关。实验的结果表明,单片机通过定时器和外部中断按键,可以实现流水灯的功能。
拓展:本实验的
拓展可以包括,使用其他单片机,如STC89C52、STM8S103等,来实现流水灯的功能;另外,可以在实验中增加按键,实现不同的灯序变化;可以添加LCD显示屏,显示当前灯序;还可以通过设置定时器,实现时间控制,实现定时开启和关闭流水灯。
⑹ 用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
⑺ 单片机8个流水灯的作业 帮忙看看
voidmain(void)
{
charj,k;
P0=0x00;
while(1)
{
for(j=0;j<8;j++)
{
P0=P0+pow(2,j);//0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff
delay();
}
for(k=7;k>=0;k--)
{
P0=P0-pow(2,k);//0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00
delay();
}
}
}
如果你是亮1个,2个,3个。。。8个,7个,6个。。。1个,0个,1个。。。就是这样
如果你是每次都亮一个,只是每次亮的都不同,就应该按下面来写
voidmain(void)
{
charj,k;
while(1)
{
P0=0x00;
for(j=0;j<8;j++)
{
P0=pow(2,j);//0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
delay();
}
for(k=6;k>=0;k--)
{
P0=pow(2,k);//0x40,0x20,0x10,0x08,0x04,0x02,0x01
delay();
}
}
}
⑻ 单片机实验点亮流水灯程序从第三个灯开始循环点亮 一个共有8个灯哦
led是哪个口控制的?假设是p1吧,那P1的初值就是11011111(0xdf),这表示刚开始是第三个灯亮。
之后就用左移或者右移的函数就行了,挺简单的
⑼ 单片机8个流水灯程序 要求:间隔0.5秒流水灯一次(01234567) 两盏流水一次(01,23,45,67) 闪亮一次(8盏灯亮灭
#include<reg51>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar t)
{
uchar x;
for(x=0;x<t;x++)
{
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(!TF0);
TF0=0;
}
}
uchar code display[]={0x03,0x06,0x60};
uchar k,m;
void main()
{
while(1)
{
TMOD=0x01;
for(m=0;m<3;m++)
{ P1= display[k];
delay(10);
}
}
顺手写的觉得好就采纳吧