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就可以了。