導航:首頁 > 操作系統 > 單片機燈隔一個亮

單片機燈隔一個亮

發布時間: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 這就是你想要的效果,不妨試試哦!

閱讀全文

與單片機燈隔一個亮相關的資料

熱點內容
義隆單片機視頻教程 瀏覽:383
cad安裝卡在解壓 瀏覽:615
編程精靈g540 瀏覽:256
手機文檔解壓之後解壓包去哪兒了 瀏覽:923
java中網路編程重要嗎 瀏覽:683
如何登錄別人的伺服器 瀏覽:626
調度系統軟體python 瀏覽:205
微信大轉盤抽獎源碼 瀏覽:497
壓縮機損壞的表現 瀏覽:862
同步數據伺服器怎麼用 瀏覽:634
163郵箱伺服器的ip地址 瀏覽:50
伺服器跟域是什麼 瀏覽:128
rails啟動命令 瀏覽:465
logistic命令怎麼用 瀏覽:738
c語言點滴pdf 瀏覽:747
linuxrtc編程 瀏覽:258
linux打包並壓縮命令 瀏覽:644
aes加密的證書格式 瀏覽:99
oracledbcalinux 瀏覽:844
酬勤任務app怎麼被特邀 瀏覽:199