1. 单片机实现小灯轮流点亮间隔闪亮
这个程序不难实现,很简单,在网上随便下载个教程都有流水灯的控制程序,自己改改就可以实现了!为什么要来问呢!给你个方向,自己去研究吧!那样东西才是你的,不然帮你就是害了你!!!
键控流水灯的程序
#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);
}
}
2. 单片机间隔点亮一led灯的C语言程序
以下是一个单片机间隔点亮一LED灯的C语言程序,以8051单片机为例:
c
Copy code
#include
//包含了AT89C51的寄存器定义
void delay(unsigned int xms) //延时函数,xms为要延时的毫秒数
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
P1=0x00; //将P1口全部置为0,防止其它引脚影响
while(1)
{
P1=0xff; //点亮P1口第0个引脚上的LED灯友念行,0xff为二进制的11111111
delay(1000); //延时1秒
P1=0x00; //将P1口全部置好哗为0,熄灭LED灯
delay(1000); //延时1秒
}
}
上述程序的作用是在单片机的P1口上间隔高迟点亮一盏LED灯,每隔1秒钟灯的状态会发生一次变化,即由点亮状态变为熄灭状态,再由熄灭状态变为点亮状态。
3. 怎么设这单片机彩灯一个一个亮
应该是单片机最简单的应用这一段指令就可以实现八个灯的控制,四个亮四个
4. 单片机让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++);
}
5. 单片机汇编程序:有八个小灯,要求从内到外隔一个依次点亮,
/* 实验目的:初步了解单片机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
6. 单片机间隔点亮一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 这就是你想要的效果,不妨试试哦!
7. 用8051单片机控制八个发光二极管,每隔一个灯亮的左循环程序
; P1口接8个LED.上拉电阻1K
ORG 0000H
AJMP STARTUP
ORG 0030H
STARTUP:
MOV SP,#60H
MOV A,#0AAH
LOOP: MOV P1,A
ACALL DELAY
RLC A
SJMP LOOP; 延兄搭察时枝宽的羡茄多少决定灯移动速度的快慢
DELAY:
MOV R7,#5
DL2:
MOV R6,#100
DL1:
MOV R5,#100
DJNZ R5,$
DJNZ R6,DL1
DJNZ R7,DL2
RET END
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; //指示灯反相,可以看到闪烁
}
9. 你好我有个单片机程序要求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个灯轮流循环。
10. 单片机8个小灯一个一个亮起来
51单片机只有P0 P1 P2 P3 这4个端口,每个端口有8条口线(引脚),分别叫P0.0~P0.7 P1.0~P1.7 P2.0~P2.7 P3.0~P3.7 ,P4~P7口不存在扰源,当缺哪然错了,如果你的led都接在P0口的话就把程缓扮态序中P0~P7换成P0就可以了。