设计一个具有8个LED灯,要求从右向左依次点亮一秒后熄灭,循环往复的单片机程序。跪求

如题所述

#include"reg52.h"//此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;//对数据类型进行声明定义

typedef unsigned char u8;

//LED灯命名

sbit leda=P0;

sbit led1=P0^0;

sbit led2=P0^1;

sbit led3=P0^2;

sbit led4=P0^3;

sbit led5=P0^4;

sbit led6=P0^5;

sbit led7=P0^6;

sbit led8=P0^7;

void delay(u16 i)

{

while(i--);

}

void main()

{

while(1)

{

leda=1;//全部灯亮

//从左到右依次熄灭

led1=0;

delay(50000);//大约延时450ms

led2=0;

delay(50000);//大约延时450ms

led3=0;

delay(50000);//大约延时450ms

led4=0;

delay(50000);//大约延时450ms

led5=0;

delay(50000);//大约延时450ms

led6=0;

delay(50000);//大约延时450ms

led7=0;

delay(50000);//大约延时450ms

led8=0;

delay(100000);//大约延时900ms

//从右到左依次点亮

led8=1;

delay(50000);//大约延时450ms

led7=1;

delay(50000);//大约延时450ms

led6=1;

delay(50000);//大约延时450ms

led5=1;

delay(50000);//大约延时450ms

led4=1;

delay(50000);//大约延时450ms

led3=1;

delay(50000);//大约延时450ms

led2=1;

delay(50000);//大约延时450ms

led1=1;

delay(50000);//大约延时450ms

leda=1;//全部灯亮

}

}

扩展资料:

main()应用:

1、C++中的main函数

C++继承了C语言的大部分特性,因此保留了“程序总是从main函数开始执行,且总是默认从main函数的return语句或结尾处结束运行”这一传统,

但是要注意,C++中的main函数要想作为程序执行的出入口,必须写在全局(Global)范围,不能写成某个结构体或某个类的成员。

虽然main函数可以作为结构体或者类的成员函数,但相应地会失去作为程序出入口的功能。

C++中全局main函数的书写格式与C语言完全相同,功能也完全相同,且同一C++程序同样只能有一个全局main函数。

2、Java中的main函数

Java同样是以main函数作为程序执行出入口的,但Java作为“更纯洁”的面向对象语言,它的main函数与C/C++有很大的不同。

首先,返回值的概念淡化,在Java Application中main不允许返回值,因此int main是被禁止的,必须使用void main,int main仅限在JavaBean中使用。

其次,Java中所有的函数必须属于类,没有什么全局函数一说,因此main函数不能是全局成员,必须是某个类的成员。

第三,由于main函数变成了类的成员函数,因此要想直接被系统调用,还必须使用public static使其成为静态函数并具有公开权限。

第四,main函数的参数被简化,只需要提供字符串数组即可,不需要提供参数个数(这是由于Java的数组具有下标检查功能的原因)

Java Application中的main函数一般格式如下(类名可以自定义,但保存为Java源码时,主文件名必须与类名相同,否则可能无法运行)

public class MainDemo{

public static void main(String[]args){

//TODO:在此处写入主函数的内容

}

}

Java Applet的运行机制与Java Application完全不同,因此不需要main函数

3、C#中的main函数

C#中的main函数与Java大同小异,同样必须是类成员,同样使用字符串数组作唯一参数,同样是静态函数,同样的void main,

与之不同的是:main的首字母变成了大写,即"Main函数“,且是否限定为public级别已经无所谓了(默认没有public,但某些场合可能还是需要public)

另外,需要注意的是,C#中不再有”类名必须与主文件名同名“的限制,即使类名不和主文件名相同,程序照样可以运行。

C#应用程序中的main函数默认是这样的(注意main的首字母已是大写)

C#和C/C++、java不同的是C#不在拘泥于必须从main()函数开始执行,C#是属于事件触发。

class Program{

static void Main(string[]args){

//TODO:在此处写入主函数的内容

}

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2021-06-12

#include"reg52.h"//此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;//对数据类型进行声明定义

typedef unsigned char u8;

//LED灯命名

sbit leda=P0;

sbit led1=P0^0;

sbit led2=P0^1;

sbit led3=P0^2;

while(i--);

void main()

while(1)

leda=1;//全部灯亮

led8=1;

delay(50000);//大约延时450ms

led7=1;

delay(50000);//大约延时450ms

led6=1;

delay(50000);//大约延时450ms

led5=1;

delay(50000);//大约延时450ms


main()应用:

C++中的main函数

C++继承了C语言的大部分特性,因此保留了“程序总是从main函数开始执行,且总是默认从main函数的return语句或结尾处结束运行”这一传统,

但是要注意,C++中的main函数要想作为程序执行的出入口,必须写在全局(Global)范围,不能写成某个结构体或某个类的成员。

本回答被网友采纳
第2个回答  2017-07-24
#include<reg51.h>#include <intrins.h> void delayms(unsigned char ms) // 延时子程序{ unsigned char i; while(ms--) { for(i = 0; i < 120; i++); }} main(){ unsigned char LED; LED = 0xfe; P0 = LED; while(1) { delayms(250); LED = _crol_(LED,1); //循环右移1位,点亮下一个LED P0 = LED; }} REG51.H中定义的SFR:/* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99; /* BIT Register *//* PSW */sbit CY = 0xD7;sbit AC = 0xD6;sbit F0 = 0xD5;sbit RS1 = 0xD4;sbit RS0 = 0xD3;sbit OV = 0xD2;sbit P = 0xD0; /* TCON */sbit TF1 = 0x8F;sbit TR1 = 0x8E;sbit TF0 = 0x8D;sbit TR0 = 0x8C;sbit IE1 = 0x8B;sbit IT1 = 0x8A;sbit IE0 = 0x89;sbit IT0 = 0x88; /* IE */sbit EA = 0xAF;sbit ES = 0xAC;sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8; /* IP */ sbit PS = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8; /* P3 */sbit RD = 0xB7;sbit WR = 0xB6;sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0; /* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;instric.h中定义的内函数有:extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long, unsigned char);extern unsigned char _chkfloat_(float);extern void _push_ (unsigned char _sfr);extern void _pop_ (unsigned char _sfr);此程序使用了内函数实现,也可以自己用移位操作实现。#include<reg51.h>Void delay(unsigned char ms){ unsigned int i; While(ms--) {for(i=0;i<120;i++);}}Main(){unsigned char Led,mid1,mid2; Led=0xfe; P0=Led; While(1){mid1=Led>>7; mid2=Led<<1; Led=mid1|mid2; delay(250); P0=Led;}
第3个回答  2017-11-03
LED移动流水灯其实很简单,设置亮灭时间,设置亮灭的顺序,循环执行就可以了具体如下简单三部曲,用定时器去实现具体如下。
1.配置单片机定时器1s执行一次任务。
2.写个右移动子函数。
3.在定时器循环执行
参考代码如下:
#include "reg52.h"
unsigned char code Table[]= {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE};
unsigned char Timer;
unsigned char Moves;
int main(void)
{
TMOD = 0x01;
TH0 =(65536 - 50000) / 256;
TL0 =(65536 - 50000) / 256;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
}
}
void Timer0_IRQ() interrupt 1
{
TH0 =(65536 - 50000) / 256;
TL0 =(65536 - 50000) / 256;
// 1秒 //
if(++Timer >= 20)
{
Timer = 0;
// 右移 //
P1 = Table[Moves];
if(++Moves >= 8)
Moves = 0;
}
}
第4个回答  2013-07-01
#include<reg51.h>#include <intrins.h> void delayms(unsigned char ms) // 延时子程序{ unsigned char i; while(ms--) { for(i = 0; i < 120; i++); }} main(){ unsigned char LED; LED = 0xfe; P0 = LED; while(1) { delayms(250); LED = _crol_(LED,1); //循环右移1位,点亮下一个LED P0 = LED; }} REG51.H中定义的SFR:/* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99; /* BIT Register *//* PSW */sbit CY = 0xD7;sbit AC = 0xD6;sbit F0 = 0xD5;sbit RS1 = 0xD4;sbit RS0 = 0xD3;sbit OV = 0xD2;sbit P = 0xD0; /* TCON */sbit TF1 = 0x8F;sbit TR1 = 0x8E;sbit TF0 = 0x8D;sbit TR0 = 0x8C;sbit IE1 = 0x8B;sbit IT1 = 0x8A;sbit IE0 = 0x89;sbit IT0 = 0x88; /* IE */sbit EA = 0xAF;sbit ES = 0xAC;sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8; /* IP */ sbit PS = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8; /* P3 */sbit RD = 0xB7;sbit WR = 0xB6;sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0; /* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;instric.h中定义的内函数有:extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long, unsigned char);extern unsigned char _chkfloat_(float);extern void _push_ (unsigned char _sfr);extern void _pop_ (unsigned char _sfr);此程序使用了内函数实现,也可以自己用移位操作实现。#include<reg51.h>Void delay(unsigned char ms){ unsigned int i; While(ms--) {for(i=0;i<120;i++);}}Main(){unsigned char Led,mid1,mid2; Led=0xfe; P0=Led; While(1){mid1=Led>>7; mid2=Led<<1; Led=mid1|mid2; delay(250); P0=Led;}本回答被网友采纳

单片机用汇编做一个控制8个LED灯泡从左到右依次点亮,最后全部亮,再全部...
while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); \/\/P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);p0=0xff;DelayMS(150);

用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)
while(1){ P3=0xfe;\/\/第一个灯亮 delay();\/\/延时 P3=0xfd;\/\/第二个灯亮 delay();P3=0xfb;\/\/第三个灯亮 delay();P3=0xf7;\/\/第四个灯亮 delay();P3=0xef;\/\/第五个灯亮 delay();P3=0xdf;\/\/第六个灯亮 delay();P3=0xbf;\/\/第七个灯亮 delay();P3=0x7f;\/\/第八个灯亮...

...八盏发光二极管从左向右依次逐个点亮后再丛右向左逐个灭灯(延时1s...
START:MOV A,#0FFH CLR C MOV R1,#8 这里是二极管个数 MOV P1,#00H 用p1口输出给二极管 MOV P2,A 中断用的p2口,所以这里先给各位置一 WAIT_A:JB P2.0,WAIT_B 这是等待p2.0,看开关按钮有没有送入低电平 JMP LEFT 如果按下按钮开关,送入低电平,就跳到LEFT让二极...

C语言控制单片机,控制八个流水灯从左到右依次亮,最后又从右到左依次亮...
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<<i;delay_ms(500);} for(i=0;i<7;i++){ P1=0x80>>i;delay_ms(500);} } }

51单片机开发板八个led灯依次点亮(就是流水灯)然后再全部
600);D7=0;delay(600);} } 延时函数delay的实现如下:void delay(uint z){ uint x,y;for(x=100;x>0;x--){ for(y=z;y>0;y--){ } } 这段代码实现了8个LED灯的流水点亮效果,先点亮第一个LED,等待600毫秒后,再点亮第二个LED,依此类推,直到所有LED都点亮,然后循环重复。

...1.用单片机控制8个LED灯,8个LED灯从左到右依次点亮一
while(1){recy=0xfe;for(k=1;k<=8;k++){ P1=recy;Delay(50000);recy=recy<<1;} }

单片机C语言编程:让8个LED流水灯以0.2s时间间隔从左到右依次点亮然后重...
include<intrins.h> void delay(unsigned int z );void main(){ unsigned int a;unsigned char b=0xfe;for(a=0;a<8;a++){ P1=b;\/\/P1口接8个LED灯 delay(200);b=_crol_ (b,1);} } void delay(unsigned int z){ unsigned int i;for(;z>0;z--) \/\/延迟时间自己算吧 for(...

求解,用一个开关控制八个LED灯间隔一秒依次点亮,点亮后不熄灭,用汇
KEY EQU P1.0 ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV TMOD,#01H MOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000)SETB ET0 SETB EA MOV A,#FEH MOV P0,A MOV R2,#20 JB KEY,JNB KEY,SETB TR0 SJMP T0ISR:CLR TR0 MOV TH0,#HIGH(65536-50000)...

怎么让八个流水灯从左到右逐个点亮至全亮又从右到左逐个逐个熄灭来回循 ...
Y0-Y7是分别控制1-8号指示灯 程序如图

单片机的跑马灯C程序如何编写八个LED灯依次点亮而且速度渐变的代码
while(1) { for(j = 0; j < 8; j++) { P1 = 255; \/\/全灭, P1外接LED, 是低电平发光.delay_ms(500); \/\/稍等片刻.for(i = 0; i < 8; i++) { P1 <<= 1;delay_ms(900 - 100 * j); \/\/延时渐短 } } } } \/\/--- ...

相似回答