導航:首頁 > 操作系統 > 單片機滅燈

單片機滅燈

發布時間:2022-10-03 02:14:22

A. 求實現51單片機按下按鈕LED燈亮1秒後熄滅

外部中斷的優先順序是高於定時器中斷的。首先是觸發外部中斷嘛,在外部中斷程序裡面開定時器中斷,定時器設置為50ms,這個直接裝初值大概46000(晶振12m)的樣子,具體你自己算一下。然後在調用定時器中斷程序裡面肯定是要有個標志位的,這個標志位會累加n個定時器時間直到8s,然後在這個定時器中斷程序裡面不斷檢測3.2口電平就行了,如果變回高電平就把燈在點亮(比如在這句直接將flag賦到設定的技術最大值)就行了。最好用下降沿觸發,低電平觸發容易出問題總感覺,可能你程序邏輯是完全正確的,但是模擬或者實物的時候會出問題。

B. 要求用51單片機控制8個LED亮滅的原理圖+程序+解說

本來以為這個程序很簡單的,沒想到寫了快三個小時。哎學藝不精啊。貼出來給你研究吧。我不想做過多的解釋了,我是按我理解的你出的題目做的,可能和你的本意不是很一樣,
1、依次亮,依次滅:從一個燈亮到全亮,再到全滅,每次改變一個燈亮滅
2、奇偶號燈間隔亮滅:隔一個燈亮一個燈亮燈時間為1s,沒有燈全滅的時候
3、依次閃爍、切換時間為3秒,閃爍時間為2秒,我理解的是,沒三秒鍾有一個燈在閃爍,其中有一秒鍾是滅燈狀態
程序中使用了P1口與8個發光二極體相連,具體電路圖你網路一下吧,還有使用了一個按鍵,該按鍵與P3.7相連,低電平為按下狀態。
程序如下:
#include <reg52.h>
#include <intrins.h>

/*變數聲明:
i、j、k都是記錄計時器溢出次數的變數,
stat是記錄當前顯示狀態的變數,由按鍵key控制
temp是狀態2中保護P1口狀態的變數*/

unsigned char i=0,j=0,k=0,stat=0,temp;
bit flag=1; //狀態1處於滅燈還是亮燈狀態的變數,1為依次亮燈,0為依次亮燈
sbit key=P3^7; //按鍵控制
void init(); //初始化函數
void delay(unsigned int N); //延時函數
void keyscan(); //鍵盤掃描函數

void main()
{
init();

while (1)
{
switch (stat)
{
case 0: //0方案
if(i==20&&flag)
{
i=0;
P1=P1<<1; //依次亮燈
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20&&!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P1<<1; //依次滅燈
temp=P1;

P1=temp+1;
}

}
break;
case 1: //2方案
if(i==20)
{
i=0;
P1=~P1; //去反後亮燈狀態為滅燈,P1初值取0x55或0xaa,奇偶交替亮燈
}
break;
case 2: //3方案
if(j==60)
{
P1=temp;
P1=_crol_(P1,1);
temp=P1; //保護P1口亮燈狀態
k=0;
j=0;
}

//閃爍部分,應該可以優化
if(k<5)
{
P1=0xff;
}
else if(k>=5&&k<10)
{
P1=temp;
}
else if(k>=10&&k<15)
{
P1=0xff;
}
else if(k>=15&&k<20)
{
P1=temp;
}
else if(k>=20&&k<25)
{
P1=0xff;
}
else if(k>=30&&k<35)
{
P1=temp;
}
else if(k>=35&&k<40)
{
P1=0xff;
}
//-----------------------------------
break;
}
keyscan();
}
}

void init()
{
TH0=0x3c; //定時器賦初值定時時間50ms
TL0=0xB0;
TMOD=0x01; //設置定時器工作方式為方式1
EA=1; //開總中斷
ET0=1; //開中斷允許位
TR0=1; //定時器計數

P1=0xfe; //這里假設led燈與P1口相連並且
//低電平有效

}
void delay(unsigned int N)
{
int i,j;
for (i=0;i<N;i++);
for (j=0;j<110;j++);
}
void keyscan()
{
if(!key)
{
delay(10); //消抖
if(!key); //確認有鍵按下
stat++;
if(stat==3)
{
stat=0;
}

//右鍵按下復位
i=0;
j=0;
k=0;
TH0=0x3c;
TL0=0xB0;
switch (stat)
{
case 0:
P1=0xfe;
flag=1;
stat=0;
break;
case 1:
P1=0x55;
break;
case 2:
P1=0xfe;
temp=P1;
break;
}
//-----------------------------------
while(!key) //此循環中的函數和主函數中的顯示函數是同一個
//用於長按鍵的顯示,可以去掉,去掉長按鍵不會正常顯示,松開按鍵後正常
{
switch (stat)
{
case 0:
if(i==20&&flag)
{
i=0;
P1=P1<<1;
temp=P1;
if(temp==0)
{
flag=0;
}
}
if(i==20&&!flag)
{
i=0;
if(P1==0xff)
{
flag=1;
P1=0xfe;
}
if(!flag)
{
P1=P1<<1;
temp=P1;

P1=temp+1;
}

}
break;
case 1:
if(i==20)
{
i=0;
P1=~P1;
}
break;
case 2:
if(j==60)
{
P1=temp;
P1=_crol_(P1,1);
temp=P1;
k=0;
j=0;
}

if(k<5)
{
P1=0xff;
}
else if(k>=5&&k<10)
{
P1=temp;
}
else if(k>=10&&k<15)
{
P1=0xff;
}
else if(k>=15&&k<20)
{
P1=temp;
}
else if(k>=20&&k<25)
{
P1=0xff;
}
else if(k>=30&&k<35)
{
P1=temp;
}
else if(k>=35&&k<40)
{
P1=0xff;
}
break;
}
}
}
}

void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xB0; //溢出後重新賦初值
//定時器中斷時間為50ms
i++; //20次中斷時間為1s
j++; //40次中斷時間為2s
k++; //60次中斷時間為3s
}

有什麼不懂的可以網路Hi我

C. 單片機指示燈閃下就滅了是壞了

可能是程序導致的,硬體設計不夠合理時,剛加電的時候就有這個現象,比如設計一個IO口驅動LED,高點亮,但程序初始化時滅燈,那麼剛加電,單片機復位與程序初始化期間,燈就會閃一下。

D. 單片機紅綠燈問題 東西南北燈初始全處於亮燈狀態,設置一個按鍵,當按下按鍵時,東西南北所有信號燈全滅

好的,,我給你做。

E. 單片機原理流水燈實驗

單片機流水的實質是單片機各引腳在規定的時間逐個上電,使LED燈能逐個亮起來但過了該引腳通電的時間後便滅燈的過程,實驗中使用了單片機的P2埠, 對8個LED燈進行控制,要實現逐個亮燈即將P2的各埠逐一置零,中間使用時間間隔隔開各燈的亮滅。使用r1或rra實現位的轉換。

F. 如何用51單片機實現像非誠勿擾節目那樣滅燈與LED屏的同步

燈像一個按鍵,當燈滅時,用單片機檢測,如果為低電平,來讓led顯示相應的內容 ,如果為高電平,再讓led顯示相應的內容

G. 單片機編程,控制LED延時亮滅的程序,

#include<reg51.h>
#include<INTRINS.h>
#defineu16unsignedint
#defineu8unsignedchar

#definePin00x01
#definePin10x02
#definePin20x04
#definePin30x08
#definePin40x10
#definePin50x20
#definePin60x40
#definePin70x80

sbitled1=P1^1;
sbitled2=P1^2;
sbitled3=P1^3;
sbitled4=P1^4;
sbitled5=P1^5;

sbitkg1=P3^1;
sbitkey2=P3^2;
sbitkey3=P3^3;

/****************************************/
voidinit() //初始化函數
{TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;

}

/////////////////////////
u8s(){//掃描按鍵
staticu8ms;
u8t=0;
// if(key1==0)t|=Pin1;
if(key2==0)t|=Pin2;
if(key3==0)t|=Pin3;
if(t!=0x00){
if(ms<100)ms++;
if(ms==5){
returnt;
}
}elsems=0;
return0x00;
}

///////////////////////


typedefstruct{
u16time;//n毫秒後
u8l; //亮的燈
u8m; //滅的燈
}ledcmd;

#defineLED_CMD_SIZE10
codeledcmdlcmd[]={
{0,Pin2,0},//0s後led2亮
{500,Pin4,0,},//0.5s後led4亮
{1000,0,Pin4},//1s後led4滅
{300,Pin3,0,},
{300,Pin4,0,},
{1000,0,Pin4,},
{300,0,Pin2,},
{200,Pin5,0,},
{40,0,Pin5|Pin3},
{500,0,Pin1},
};

voidled_l(u8v){//亮燈程序
P1=P1&(~v);
}
voidled_m(u8v){//滅燈程序
P1=P1|(v);
}


u8ledzt=0xff;//led任務zt為0xff表示待機
u16ledjs;//倒計時
voidled_start(){//啟動程序
ledzt=0;
ledjs=lcmd[ledzt].time;
}
voidledcx(){//led流程程序
if(ledzt<LED_CMD_SIZE){
if((ledjs==0)&&(ledzt<LED_CMD_SIZE)){//計時到0
ledzt++;
if(ledzt!=LED_CMD_SIZE){
ledjs=lcmd[ledzt].time;
}
}
if(ledzt>1){//
led_l(lcmd[ledzt-1].l);
led_m(lcmd[ledzt-1].m);
}
}
}

/***********************************/
voidmain()//主函數
{
u8k;
init();//系統初始化
TR0=1;//定時器開始計時
while(1){
if(ledzt==0xff){led1=(kg1!=0);};//led不在運行狀態時根據開關改變led1
k=s();//讀取按鍵值
if((k&Pin2)!=0){//key2
if(led1==0&&ledzt==0xff){
led_start();
}
}
if((k&Pin3)!=0){//key3
ledzt=0xff;
led_m(Pin2|Pin4);
}
ledcx();
}

}


/****************************/
voidtimer0()interrupt1//1ms定時器
{
TH0=(65536-1000)/256;//重載初值
TL0=(65536-1000)%256;
if(ledjs>0)ledjs--;

}

H. 51單片機為什麼要先按獨立按鍵才能正常工作

51(開發板)中的數碼管一次只能顯示一位數,屬於硬體限制,不能同時顯示兩位。在數碼管上顯示多位數只能靠高頻率的刷新顯示,在視覺上顯示多位。所以可以定義一個變數i,按鍵i自加,然後用循環顯示,循環次數為i。

根據提供的函數,表明你的板子LED是共陽極連接的,即LED陽極接到一起,每個LED陰極接IO口,這樣當IO口為低電平時燈就點亮了。所以,程序一開始是亮燈而不是滅燈。sbit BY1=P3^4是一個位定義,意思是把單片機的P3.4口定義為BY1,以後對BY1進行操作就是對P3.4進行操作。

單片機

也被稱為單片微控器,屬於一種集成式電路晶元。在單片機中主要包含CPU、只讀存儲器ROM和隨機存儲器RAM等,多樣化數據採集與控制系統能夠讓單片機完成各項復雜的運算,無論是對運算符號進行控制,還是對系統下達運算指令都能通過單片機完成。 由此可見,單片機憑借著強大的數據處理技術和計算功能可以在智能電子設備中充分應用。

I. 51單片機控制燈的開關程序並且可以自己改開關設定時間,程序怎麼寫啊

表述的不清楚,是要改開和關的時長?還是時刻(涉及到時鍾)? 亮滅的時長大約幾秒?單片機晶振是12MHZ?
定義兩個寄存器,一個存放亮燈的時長,一個存放滅燈的時長。單片機的某三個I/O口接三個按鍵,其中一個負責切換亮燈、滅燈的設置選擇;另兩個按鍵按下時,單片機中斷,一個按鍵是+,一個按鍵是- ,按鍵時,寄存器內的值做相應的+和- 運算,再把這兩個值技術處理後,作為定時器的初始值,控制燈的亮與滅。

閱讀全文

與單片機滅燈相關的資料

熱點內容
倩女銷魂 紀倩倩 瀏覽:53
周星馳粵語電影 瀏覽:516
5個小時的愛情電影在線觀看 瀏覽:975
求飛機類游戲源碼 瀏覽:406
樂釣app怎麼寫出五星報告 瀏覽:626
類似團鬼六的電影有哪些 瀏覽:660
學校門口向右轉是電影院的英文 瀏覽:961
大樂透五行演算法 瀏覽:142
英語圖解pdf 瀏覽:612
智能租房系統源碼 瀏覽:346
c編程軟體哪個好 瀏覽:674
程序員寫什麼代碼最好 瀏覽:980
大尺度電影名字 瀏覽:897
重生民國收母 瀏覽:723
男主當鴨子的韓劇電影 瀏覽:488
人乳奶水電影 瀏覽:211
台灣鏡花風月系列 瀏覽:551
主角叫江辰的重生小說 瀏覽:608
李采潭演的都是真的嗎 瀏覽:512
日本女人切腹大尺度電影 瀏覽:637