⑴ 用51單片機控制8個發光二極體從左往右循環流水發光,用匯編語言編程,管腳接p0.0―p0.7。
org 0000h
ajmp start
org 0200h
start:mov r0,#8
mov a,#feh
loop:mov p1,a
acall delay
rl a
djnz r0,loop
ajmp start
delay:
mov r1,#100
l1:mov r2,#100
l2:mov r3,#248
l3:djna r3,l3
djnz r2,l2
djnz r1,l1
ret
end
⑵ 51單片機控制兩個發光二極體的電路圖 和程序
你好!很高興能為你回答!如有疑問可以聯系!如圖所示:在P1.0、P1.1埠上各接一個發光二極體L1、L2,使L1、L2在不停地一亮一滅,一亮一滅的時間間隔為0.2秒。
如圖所示的石英晶體為12MHz,因此,1個機器周期為1微秒
機器周期
微秒
MOV
R6,#20
2個機器周期
2
D1:
MOV
R7,#248
2個機器周期
22+2×248=49820×
DJNZ
R7,$
2個機器周期
2×248
498
DJNZ
R6,D1
2個機器周期2×20=4010002
因此,上面的延時程序時間為10.002ms。
由以上可知,當R6=10、R7=248時,延時5ms,R6=20、R7=248時,延時10ms,以此為基本的計時單位。如本實驗要求0.2秒=200ms,10ms×R5=200ms,則R5=20,延時子程序如下:
DELAY:
MOV
R5,#20
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
(2).
輸出控制
如圖所示,當P1.0埠輸出高電平,即P1.0=1時,根據發光二極體的單向導電性可知,這時發光二極體L1熄滅;當P1.0埠輸出低電平,即P1.0=0時,發光二極體L1亮;我們可以使用SETBP1.0指令使P1.0埠輸出高電平,使用CLRP1.0指令使P1.0埠輸出低電平。P1.1同理;
5.
程序框圖
如圖4.1.2所示
圖4.1.2
6.
匯編源程序
ORG
0
START:
CLR
P1.0SETB
P1.1
LCALL
DELAY
SETB
P1.0CLR
P1.1
LCALL
DELAY
LJMP
START
DELAY:
MOV
R5,#20
;延時子程序,延時0.2秒
D1:
MOV
R6,#20
D2:
MOV
R7,#248
DJNZ
R7,$
DJNZ
R6,D2
DJNZ
R5,D1
RET
END
7.
C語言源程序
#include
<AT89X51.H>
sbit
L1=P1^0;sbit
L2=p1^1;
void
delay02s(void)
//延時0.2秒子程序
{
unsigned
char
i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void
main(void)
{
while(1)
{
L1=0;L2=1;
delay02s();
L1=1;L2=0;
delay02s();
}
}
⑶ 用五一單片機c語言編程,p1口控制八個發光二極體,實現每隔一秒,兩兩點亮,並循環。
一、#include<reg51.h>
void delay(unsigned char Xms)//延時Xms
{
int i,j;
for(X = i; X>0; X--)
for(j=110;j>0;j--);
}
void main()
{
P0 = 0x00; //P0.0~P0.7分別接八個發光二極體,剛開始全滅
while(1)
{
delay(1000);
P0 = 0xc0;//點亮前兩個發光二極體P0.0和P0.1;
delay(1000);//延時1秒
P0 = 0x30;//點亮第三個和第四個LED
delay(1000);
P0 = 0x0c;
delay(1000);
P0 = 0x03;
}
}
二、
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp, t0, t1;
bit t2;
sbit P10 = P1^0;
void main()
{
P10 = 1;
temp = 0xfe;
P0 = temp;
P2 = 0xff;
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1;
EA = 1;
TR0 = 1;
while(1);
}
void timer0() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
t0++;
if(t0 == 10) {
t0 = 0;
t1++;
if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;}
temp = _crol_(temp, 1);
if(t2) {P0 = temp; P2 = 255;}
else {P2 = temp; P0 = 255;}
}
}
(3)51單片機匯編控制二極體擴展閱讀:
例如:a = 3,b = 5,現交換a,b的值,這個問題就好像交換兩個杯子裡面的水,這當然要用到第三個杯子,假如第三個杯子是c,那麼正確的程序為:c = a; a = b; b = c;執行結果是a = 5,b = c = 3如果改變其順序,寫成:a = b; c = a; b =c;則執行結果就變成a = b = c = 5,不能達到預期的目的,初學者最容易犯這種錯誤。
順序結構可以獨立使用構成一個簡單的完整程序,常見的輸入、計算、輸出三步曲的程序就是順序結構,例如計算圓的面積,其程序的語句順序就是輸入圓的半徑r,計算s = 3.14159*r*r,輸出圓的面積s。
⑷ 如何用51單片機依次點亮24個二極體
51單片機共4個埠,每個埠8位,一共32位,如果沒有別的要求,佔用3個埠剛剛好接24個led,程序如下:
#include<reg51.h>
#include<intrins.h>
sbit led1 P0^0
sbit led2 P0^1
sbit led3 P0^2
sbit led4 P0^3
sbit led5 P0^4
sbit led6 P0^5
sbit led7 P0^6
sbit led8 P0^7
void main()
while(1)
{
led1=0;
_nop_();
led2=0;
_nop_();
led3=0;
_nop_();
led4=0;
_nop_();
led5=0;
_nop_();
led6=0;
_nop_();
led7=0;
_nop_();
led8=0;
_nop_();
P0=1
}
只寫了其中一個埠,其餘埠一樣的,一直續下去就可以了。
⑸ c51單片機按鍵控制二極體亮滅
做按鍵用的腳通過一個常開按鈕開關接地,按下開關就使這個腳接地,即電壓為0,在程序中要先將此腳寫1再判斷此腳是否為0,為0時說明已經按下了此開關,再用程序延時10-20mS消抖,再判一次,如果還是0說明不是干擾,就執行控制二極體的程序,點亮二極體的腳最好用低電平驅動,就是不亮時寫1,需要亮時寫0,原理是這樣,用C還是用匯編都一樣,很簡單
⑹ 怎樣用51單片機控制很多的發光二極體,例如54個
控制很多的發光二極體,那就用鎖存器嗎,一片可以鎖存控制8個二極體,再多也可以的。
鎖存器有很多的,如74HC273,74HC373,74HC374,74HC377,74HC573,等等。
或都用74HC595,多片串聯,就是單片機3個腳就夠了。
⑺ 用51單片機控制八個發光二極體
// 51單片機控制八個發光二極體 左右循環。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; // 改變這里 LED 各種花樣
uchar t,i;
void main()
{
TMOD=0x10;
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
EA=1;
ET1=1;//開定時器1中斷
TR1=1;//啟動定時器1
t=0;
i=0;
while(1)
{
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
t++;
if(t==20)
{
t=0;
P2=TAB[i];
i++;
if(i==18) { i=0;}
}
}
⑻ 用51單片機匯編語言控制8個發光二極體
KEY1 BIT P3.2
KEY2 BIT P3.3
ORG 00H
MOV P3,#255
MOV A,#254
MOV P1,A
continue:
JNB KEY1,right
JNB KEY2,left
JMP continue
right:
RR A
MOV P1,A
ACALL DELAY
JMP continue
left:
RL A
MOV P1,A
ACALL DELAY
JMP continue
DELAY:
MOV R7,#250
LP2:MOV R6,#200
LP1:NOP
DJNZ R6,LP1
DJNZ R7,LP2
RET
END
⑼ 跪求單片機c51用匯編語言寫的程序,功能為:8隻發光二極體依次點亮,從左向右移動,時間間隔0.5秒。
MAIN:
MOV
P1,
#11111110B
;
P1
口
點亮一個發光二極體
ACALL
DELAY
;
調用延時子程序
MOV
P1,
#11111101B
;
從左向右移動
一位
ACALL
DELAY
MOV
P1,
#11111011B
ACALL
DELAY
MOV
P1,
#11110111B
ACALL
DELAY
MOV
P1,
#11101111B
ACALL
DELAY
MOV
P1,
#11011111B
ACALL
DELAY
MOV
P1,
#10111111B
ACALL
DELAY
MOV
P1,
#01111111B
ACALL
DELAY
JMP
MAIN
;
轉移
至
MAIN
循環
DELAY:
MOV
R5,#250
;
延時子程序
6.000
M
晶振
約
0.5
秒
D1:
MOV
R6,#250
D2:
DJNZ
R6,$
DJNZ
R5,D1
RET
⑽ 51單片機匯編語言程序,一個按鍵控制兩個發光二極體的同時閃爍,交替閃爍,
;P1.0 P1.1接2LED,P2.0接一按鍵。上電2LED不亮,按第1 次鍵2LED同時以1S周期閃爍,按第2 次 2LED輪流1S閃爍...同此循環。
;11 04 17
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
MOV TMOD,#01H ;
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA
SETB ET0
MOV R0,#10
KEY:
ACALL DISP
JB P2.0,$-2
ACALL DISP
JNB P2.0,$-2
SETB TR0
INC R1 ;R1為按鍵按下次數
CJNE R1,#2,KEY0
AJMP KEY
KEY0:
MOV R1,#1
AJMP KEY
DISP:
CJNE R1,#1,DISP0
AJMP DISP1
DISP0:
CJNE R1,#2,RT
AJMP DISP2
DISP1: ;一起閃
JNB F0,DISP11 ;F0為0.5S到標志,每0.5S求反一次
SETB P1.0
SETB P1.1
RET
DISP11:
CLR P1.0
CLR P1.1
RT:
RET
DISP2: ;交替閃
JNB F0,DISP21 ;F0為0.5S到標志,每0.5S求反一次
SETB P1.0
CLR P1.1
RET
DISP21:
CLR P1.0
SETB P1.1
RET
T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#10
CPL F0
RTI:
RETI
END