A. 用stm32單片機編寫一個程序,一個燈一直亮,另一個亮兩秒,滅兩秒
#include<reg52.h>
unsigned int num;
sbit led1=P3^1;
sbit led2=P3^2;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256
EA=1;
ET0=1;
TR0=1;
while(1)
{
led1=0;
while(1);
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==40)
{
num=0;
led2=~led2;
}
}
B. 單片機的點亮一盞燈程序
MAIN: MOV P1,#11111110B;點亮P1.0所接的燈
ACALL YS ;調用延時子程序,讓P1.0所接的燈亮一小段時間
MOV P1,#11111101B;點亮P1.1所接的燈
ACALL YS ;調用延時子程序,讓P1.1所接的燈亮一小段時間
MOV P1,#11111011B;點亮P1.2所接的燈
ACALL YS ;調用延時子程序,讓P1.2所接的燈亮一小段時間
MOV P1,#11110111B;點亮P1.3所接的燈
ACALL YS ;調用延時子程序,讓P1.3所接的燈亮一小段時間
MOV P1,#11101111B;點亮P1.4所接的燈
ACALL YS ;調用延時子程序,讓P1.4所接的燈亮一小段時間
MOV P1,#11011111B;點亮P1.5所接的燈
ACALL YS ;調用延時子程序,讓P1.5所接的燈亮一小段時間
MOV P1,#10111111B;點亮P1.6所接的燈
ACALL YS ;調用延時子程序,讓P1.6所接的燈亮一小段時間
MOV P1,#01111111B;點亮P1.7所接的燈 ACALL YS ;調用延時子程序,讓P1.7所接的燈亮一小段時間
LJMP MAIN ;循環.這回用長調用指令LJMP,當程序比較長的時候就用
LJMP YS: ;延時子程序YS,功能是能讓LED亮起來或者滅掉一小段時間
MOV R1,#200 ;讓燈亮滅時間的長短也就是延時的長短跟#號後面的數據有關
D: MOV R2,#200 ;延時長點#號後面的數據就大點,延時短點#號後面的數據
T: MOV R3,#200 ;就小點,但#號後面最大的數據是255
DJNZ R3,$
DJNZ R2,T
DJNZ R1,D
RET ;子程序返回指令,子程序的設計一般都是因為主程序要調用它, ;調用完是要返回到主程序繼續運行下一個語句的
END
C. 單片機間隔點亮一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秒鍾燈的狀態會發生一次變化,即由點亮狀態變為熄滅狀態,再由熄滅狀態變為點亮狀態。
D. 求教如何用單片機控制LED燈的亮度
控制ked亮度不難,你硬體直接連連接好led燈,串個限流電阻。如果引腳一直給電平那麼燈肯定最亮,那你如果改變給燈的時間燈就能調亮度了,如你用定時器或者延時多少個時間引腳電平取反一次。例如每間隔1毫秒電平取反一次就可以改變亮度。那你在用個變數值來給這個時間賦值。就能調亮度了啊,比如你接個電位器電位器值改變你程序你就讓定時器時間也相應跟著變動
程序名稱:一隻按鍵控制兩只LED燈十種亮度顯示
編程人:xx
備註:此程序簡單
#include<stc12c2052ad.h>
*** it d1=P1^7;、、 定義LED燈1
*** it d2=P1^6; 定義LED燈2
*** it key1=P3^0; 定義按鍵燈
void delay(unsigned int a){ 延時程序
unsigned int i;
while( a-- != 0){
for(i = 0; i < 100; i++);
}
}
void main(){
while(1){
unsigned int a,b,c,d;
if(key1==0)d++; 按鍵判斷
switch(d) 按鍵信息比較
{
case 1: b=9;;a=1;break;
case 2: b=8;;a=2;break;
case 3: b=7;;a=3;break;
case 4: b=6;;a=4;break;
case 5: b=5;;a=5;break;
case 6: b=4;;a=6;break;
case 7: b=3;;a=7;break;
case 8: b=2;;a=8;break;
case 9: b=1;;a=9;break;
}
while(key1==0); 判判斷按鍵是否松開
if(d==10)d=0; 按鍵9種亮度判斷,是否是第9種,如果是,則d=0
for(c=0;c<2;c++){ 亮度模式循環顯示
d1=0;
d2=1;
delay(a);
d1=1;
d2=0;
delay(b);
}
}
}
、2010.10.05 20;06修改
此程序是我寫的簡單程序,已做過實驗,並且通過!
用pic的脈寬調制功能就可以了,只需要給單片機不同的占空比的值,單片機就可以產生不同占空比的信號,將這個信號用三極體放大驅動LED就行了。還有什麼問題可以給我留言
第一,要理解中斷在這里的作用是固定的「一小段」時間進入一次。 第二,PWM_ON在程序中的作用很大,它會由0------>CYCLE------>0並且一直循環下去。可以把它看成一個有規律的變化的量。 第三,每進入中斷一次count++,滿足條件count==PWM_ON或coun..
接好單片機的硬體電路,然後編寫程序,再然後燒寫程序,然後就可以程序了,沒問題的話就可以按你的要求點亮了
# include<reg51.h>
void delay(unsigned int j)
{
unsigned int i;
for (;j>0;j--)
{
for(i=0;i<1000;i++)
;
}
}
void main()
{
while(1)
{
P1^0=0;
delay(100);
P1^0=1;
delay(100);具體數值根據你單片機晶振頻率而定
}
}
原理是PWM波占空比不同,其功率亦不同,只要PWM頻率很大,人眼分辨不出其閃爍,就可通過控制占空比(高電平時間和周期之比)的大小來控制其亮度。
才用PWM調制
LED燈不好控制亮度,在電流變化較大的范圍中,亮度變化不明顯
如果是電燈泡還可以的
控制LED燈的亮度 這個其實有難度的, 先練習聲音控制開關燈,成功後再考慮控制亮度
LED亮度是通過的電流決定的,控制亮度其實就是控制電流.這一點至今沒辦法做到便宜又簡單.
當然,也有種簡易的辦法是PWM控制亮關比,優點是容易,缺點是閃爍.
還有就是目前燈亮度有幾種控制方式,連續變化的貴,高中低分檔位的便宜些.
void main()
{
unsigned int temp,i;
temp=1;
while(1)
{
P1=temp&0x00ff; 取temp低8位
P2=(temp&0xff00)>>8; 取temp高8位
for(i=0;i<65535;i++)
{} 延時
if(temp!=0x8000)
temp<<=1; temp左移一位
else temp=1;
}
}
如果不需要控制轉速,一個三極體一個繼電器就可以控制馬達了。
E. 求89C51單片機32個LED循環亮的匯編程序
ORG0000H
AJMPMAIN
ORG0030H
MAIN:MOVR0,#8
MOVA,#0FEH
P_0:MOVP0,A
ACALLDLY200
RLA
DJNZR0,P_0
MOVP0,#0FFH
MOVR0,#8
MOVA,#0FEH
P_1:MOVP1,A
ACALLDLY200
RLA
DJNZR0,P_1
MOVP1,#0FFH
MOVR0,#8
MOVA,#0FEH
P_2:MOVP2,A
ACALLDLY200
RLA
DJNZR0,P_2
MOVP2,#0FFH
MOVR0,#8
MOVA,#0FEH
P_3:MOVP3,A
ACALLDLY200
RLA
DJNZR0,P_3
MOVP3,#0FFH
MOVR0,#8
AJMPMAIN
DLY200:;延時200us,誤差0us
MOVR7,#04H
DL1:
MOVR6,#74H
DL0:
MOVR5,#0D6H
DJNZR5,$
DJNZR6,DL0
DJNZR7,DL1
NOP
RET
F. 單片機點亮一盞led燈代碼
用MCS51單片機匯編語言編寫的點亮一隻LED燈源程序LED1.ASM,代碼如下:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:MOV A,#FEH
MOV P1,A
AJMP $
END