导航:首页 > 操作系统 > 单片机灯隔一个亮

单片机灯隔一个亮

发布时间:2023-01-26 07:24:38

单片机编程序:有八个小灯,要求从内到外隔一个依次点亮,

/* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。
* 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。
*/
/* 程序详细功能介绍:
*做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,
*输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。
*/
ORG 0000H
LJMP START
ORG 0030H
START:
MOV R2,#8 ;左移次数
MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮
SETB C
LOOP: MOV P0,A
LCALL DELAY
RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动
DJNZ R2,LOOP

MOV R2,#8 ;右移次数
LOOP1: RRC A ;右移流水灯
MOV P0,A
LCALL DELAY
DJNZ R2,LOOP1
LJMP START

DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END

Ⅱ 你好我有个单片机程序要求8个灯轮流亮,相隔1分钟亮一个,就是亮一个灭掉等1分钟亮第二个,

#include "reg51.h"
void delayls()
{
unsigned char i;
for(i = 0; i < 20; i++) { //延时1秒
TH1 = 0x3c;
TH1 = 0xb0;
TR1 = 1;
while(!TF1);
TF1 = 0;
}
}
void main()
{
unsigned char i, j, w;
TMOD = 0x10;
while(1){
w = 0x01;
for(i = 0; i < 8; i++) {
P1 = ~w; delayls(); //亮1秒
P1 = 255; //灭
for(j = 0; j < 60; j++) delayls() //60秒
w <<= 1;
}
}
}

试试这个程序,可以实现:

亮一秒、灭一分钟、8个灯轮流循环。

Ⅲ 单片机编程:8个流水灯每隔一秒亮一个,用中断的方式。求完整编程啊!!!!!(低电平亮的,而且只能有

#include<reg52.h> //包含特殊功能寄存器的定义
#define LED P1 //宏定义LED代表P1

/* 函数申明 -----------------------------------------------*/
void Init_Timer0(void);
/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
main()
{
Init_Timer0(); // 定时器初始化
while(1); // 循环,等待
}

/*
********************************************************************************
** 函数名称 : Init_Timer0(void)
** 函数功能 : 定时器初始化子程序
********************************************************************************
*/
void Init_Timer0(void) //定时器初始化子程序
{
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
TL0=0x00;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}

/*
********************************************************************************
** 函数名称 : Timer0_isr(void) interrupt 1 using 1
** 函数功能 : 定时器中断程序
********************************************************************************
*/
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x00; //重新赋值,方式1是16位计数器,不能硬件重装初始值
TL0=0x00;

LED=~LED; //指示灯反相,可以看到闪烁

}

Ⅳ 8051单片机用汇编程序让八个LED灯每隔一秒亮一个,轮流亮(加说明啊,谢谢了)

设个定时器。
然后一个端口,赋值1(高电平亮),如果低电平就 赋值 11111110 b
然后每隔一秒给它做个移位。
不就完了。

Ⅳ 怎么设这单片机彩灯一个一个亮

应该是单片机最简单的应用这一段指令就可以实现八个灯的控制,四个亮四个

Ⅵ 单片机让C语言PO.0~P0.7每隔1S亮一个,这样循环3次后P1口LED灯全亮 拜托了

#include <reg51.H>
//假设P2口顺序接LED,并且高电平点亮;
typedef unsigned char uchar;
typedef unsigned int uint;
void delay1ms(uint);

main()
{

while(1)
{
static uchar order=1;
uchar n;
P2=0x00; //每种方式的开始,灯光全灭
if(order==1) //方式一:全灯逐个点亮,然后逐个灭掉
{
for(n=0;n<8;n++)
{
P2|=0x01<<n; //逐个点亮,直至全亮
delay1ms(500); //半秒间隔
}
for(n=0;n<8;n++)
{
P2<<=1; //逐个灭,直至全灭
delay1ms(500);
}
}
else if(order==2) //方式二:全灯两两先亮后灭;
{
for(n=0;n<8;n+=2)
{
P2=0x03<<n;
delay1ms(500);
P2=0x00;
delay1ms(500);
}
}
else //方式三:全灯逐个先亮后灭;
{
for(n=0;n<8;n++)
{
P2=0x01<<n;
delay1ms(500);
P2=0x00;
delay1ms(500);
}
}
if(++order>3)order=1; //order控制闪烁方式循环
}
}

void delay1ms(uint t)
{
uint i;
uchar j;
for(i=0;i<t;i++)
for(j=0;j<121;j++);
}

Ⅶ 单片机实现小灯轮流点亮间隔闪亮

这个程序不难实现,很简单,在网上随便下载个教程都有流水灯的控制程序,自己改改就可以实现了!为什么要来问呢!给你个方向,自己去研究吧!那样东西才是你的,不然帮你就是害了你!!!

键控流水灯的程序
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
void mDelay(unsigned int DelayTime)
{ unsigned int j=0;
for(;DelayTime>0;DelayTime--)
{ for(j=0;j<125;j++)
{;} }}
uchar Key()
{ uchar KeyV;
uchar tmp;
P3=P3|0x3c; //四个按键所接位置
KeyV=P3;
if((KeyV|0xc3)==0xff) //无键按下
return(0);
mDelay(10); //延时,去键抖
KeyV=P3;
if((KeyV|0xc3)==0xff)
return(0);
else
{ for(;;){ tmp=P3;
if((tmp|0xc3)==0xff)
break;}
return(KeyV);}}
void main()
{ unsigned char OutData=0xfe;
bit UpDown=0;
bit Start=0;
uchar KValue;
for(;;)
{ KValue=Key();
switch (KValue)
{ case 0xfb : //P3.2=0,Start
{ Start=1;
break; }
case 0xf7: //P3.3=0,Stop
{ Start=0;
break; }
case 0xef: //P3.4=0 Up
{ UpDown=1;
break; }
case 0xdf: //P3.5=0 Down
{ UpDown=0;
break; }
}
if(Start)
{ if(UpDown)
OutData=_crol_(OutData,1);
else
OutData=_cror_(OutData,1);
P1=OutData;
}
else
P1=0xff; //否则灯全灭
mDelay(1000);
}
}

Ⅷ 单片机怎么写才能让led灯每隔5秒亮下一个并且数码管一直从5到0显示倒计时

设为共阳极七段数码管;

char segCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} //共阳极七段码

char bitCode[]={0x01,0x02,0x04,0x08,0x10,0x20} //共阳极6位位码,高电平有效

/***在指定位显示数据***/

// m为待显示的七段码数据

// k为指定的位显示数据

void show(char m,char k)

{ char dat;

dat = segCode[m]; // m=0,1,2,3,4,5,6,7,8,9

HC573(dat,1); //输出段码

dat = bitCode[k]; // k=0,1,2,3,4,5

HC573(dat,2); //输出位码

}

sbit segm = P2^6; //段锁存

sbit bitc = P2^7; //位锁存

/*** HC573 接收锁存数据***/

void HC573(char dat,char nub)

{

P0=dat;

if(nub==1)

{ segm=1;segm=0;} //输出段锁存信号

if(nub==2)

{ bitc = 1;bitc = 0;} //输出位锁存信号

}

bit intflag;

void main()

{ char times;
intflag=0; times=5;

P1=0xff;

initime0() ; //初始化定时器0

while(1)

{ if(intflag)

{ intflag=0 ;

show(times,0) ; // 因为仅有一位显示,不考虑位扫描问题

times--;

if(times==0) { times=5; P1=~P1; }

}

}

}

Ⅸ 单片机间隔点亮一led灯的汇编语言程序

main:
mov P1,#0aah
acall delay
mov P1,#55H
acall delay
sjmp main
delay:mov r7,#0ffh
de:mov r6,#0ffh
djnz r6,$
djnz r7,de
ret
end 这就是你想要的效果,不妨试试哦!

阅读全文

与单片机灯隔一个亮相关的资料

热点内容
怎么买卖副图源码 浏览:660
广东农信app怎么更改预留手机号码 浏览:775
嵌套页面php 浏览:566
安卓手机怎么调到微信聊天模式 浏览:857
java博客开源系统 浏览:719
男人之间的加密对话日语 浏览:359
怎么连远程连接服务器 浏览:11
安卓二手手机该如何检测 浏览:213
微信可以共享图片文件夹吗 浏览:80
联通wifi加密码 浏览:643
录屏文件夹小米 浏览:548
车上的app怎么重设 浏览:24
指定文件夹属性 浏览:131
linuxphp编程 浏览:337
以下不正确的是云服务器 浏览:909
琉璃神社压缩密码 浏览:715
大一学生解压视频 浏览:376
单位电脑e盘加密输入正确密码 浏览:873
phpfileupload 浏览:634
刑拘程序员 浏览:617