A. 單片機編程實現2個發光二極體交替閃爍,時間間隔為0.5秒
#include<reg52.h>
#define FOSC 11520000 // 晶振11.0592
//
unsigned int SysTick;
/*
*
*/
int main(void)
{
//
TMOD = 0x01;
TL0 = (65536 - (FOSC / 12 / 1000));
TH0 = (65536 - (FOSC / 12 / 1000)) >> 8;
ET0 = 1;
TR0 = 1;
EA = 1;
while(1)
{
//
if((SysTick % 1000) < 500)
P1 = 0xAA;
else
P1 = 0x55;
//
}
//
}
/*
*
*/
void Timer0_IRQ() interrupt 1
{
//
TL0 = (65536 - (FOSC / 12 / 1000));
TH0 = (65536 - (FOSC / 12 / 1000)) >> 8;
//
SysTick++;
//
}
可以參考一下我給的代碼
B. 單片機程序,想在p1.1處連一個發光二極體,有電壓時二極體亮,代碼對嗎#include<reg51
你好!
這個和你電路的接法有關系,因為51單片機初始化後,埠默認是高電平;
這樣你的二極體的負極接地,二極體的正極接P1.1;
最後,程序要加一個死循環,不然,單片機會一直重新啟動;
include<reg51.h>
sbitinput=P1^1;
voidmain()
{
input=1;
while(1);//加上死循環,讓程序繼續執行
}
C. 請編寫c51單片機控制一個發光二極體閃爍的程序,埠p1∧0接發光二極體
程序:
ORG0
CPLP1.0
DJNZR7,$
DJNZR6,$-2
DJNZR5,$-4
SJMP0
END
這些,已經足夠了。
別忘了採納。
D. 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();
}
}
E. 單片機 發光二極體循環點亮的程序
程序:
ORG
0000H
LJMP
MAIN
ORG
4000H
MAIN:MOV
R5,#04H
LOOP:MOV
R1,#00H
MOV
A,#0FEH
L1:MOV
P1,A
LCALL
DELAY
RL
A
INC
R1
CJNE
R1,07H,L1
MOV
R2,#00H
MOV
A,#01H
L2:MOV
P1,A
LCALL
DELAY
RR
A
INC
R2
CJNE
R2,07H,L2
DJNE
R5,LOOP
DELAY:MOV
R6,#02H
D1:MOV
R7,#0FFH
D2:DJNZ
R7,D2
DJNE
R6,D1
RET
END
電路:
連接燈的陰極至P1口上即可,復位和震盪電路不需要我說了吧
說明一下,延時時間不準確,不過基本接近1ms的
t=(256*2+1)*2+1+2=1028
如果想做到精確延時的話建議在DELAY中使用NOP指令調理,自己試一下吧
最好是用Keil模擬一下確定延時時間。
很久沒有匯編了,仔細檢查一下,估計有Bug也不一定。
F. 用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;}
}
}
G. 用五一單片機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;}
}
}
(7)單片機里發光二極體代碼擴展閱讀:
例如: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。
H. 51單片機點亮發光二極體的c語言程序
#include
<reg51.h>
//此文件中定義了51的一些特殊功能寄存器void
delay(unsigned
int
i);
//聲明延時函數main()
{
P2
=
0x00;
//置P0口為低電平
點亮P2口8個LED燈
delay(600);
//
調用延時程序
等待一段時間後熄滅
P2
=
0xff;
//置P0口為高電平
熄滅P2口8個LED燈
delay(600);
//
調用延時程序
}/*******延時函數*************/
void
delay(unsigned
int
i)
{
unsigned
char
j;
for(i;
i
>
0;
i--)
//循環600*255次
機器在這里執行需要一段時間
也就達到了延時效果
for(j
=
255;
j
>
0;
j--);
}希望對你有幫助,如有問題,加微信xunuo_xx,留言
I. 用c語言編寫單片機流水燈程序,(8個發光二極體從左至右循環點亮)
#include<reg51.h>
voiddelay(void)
{
unsignedinti,j;
for(i=0;i<200;i++)
for(j=0;j<1000;j++)
;
}
voidmain(void)
{
while(1)
{
P3=0xfe;//第一個燈亮
delay();//延時
P3=0xfd;//第二個燈亮
delay();
P3=0xfb;//第三個燈亮
delay();
P3=0xf7;//第四個燈亮
delay();
P3=0xef;//第五個燈亮
delay();
P3=0xdf;//第六個燈亮
delay();
P3=0xbf;//第七個燈亮
delay();
P3=0x7f;//第八個燈亮
delay();
}
}
(9)單片機里發光二極體代碼擴展閱讀
單片機C語言16種方式流水燈
voidmain()
{
while(1)
{
P1=0xfe;//點亮第一個發光管
Delay(5000);
P1=0xfd;//點亮第二個發光管
Delay(5000);
P1=0xfb;
Delay(5000);
P1=0xf7;
Delay(5000);
P1=0xef;
Delay(5000);
P1=0xdf;
Delay(5000);
P1=0xbf;
Delay(5000);
P1=0x7f;//點亮第八個發光管
}
}
J. 用51單片機點亮一個發光二極體的程序。 並對程序解釋一下。
若單片機與發光二極體如下圖所示,只要用命令給單片機的管腳送一低電平就可點亮此二極體
假設管腳為P1.0,具體可用 MOV P1,#0FEH