① 用AT89C51單片機埠P1控制8個LED燈的變化(左移2次右移2次閃爍2次延時一秒)的工作原理
基本方式就是:
P1=0X01;//或者別的數,看你想亮幾個
DELAY_MS(500);//適當延時
P1=P1>>1;//左移或者右移
DELAY_MS(500);
P1=P1>>1;
DELAY_MS(500);
.....
代碼按順序執行就是了。P1口不同的輸出對應不同的亮燈狀態,不同的輸出中間加上延時即可實現不同的效果。
② 使用單片機I/O口控制8隻LED燈。 1)點亮8個中的的第任意個LED燈。 使任意一個或多個LED燈閃爍
舉個簡單的例子,8個LED燈的正級分別接在P1.0到P.7上面,負極分別接在P2.0到P2.7上面,
P1 = 0xff; (P1口全部高電平) P2 = 0x00; (P2口全部低電平),此時電流通過P1口經LED流向P2口,8個燈全部點亮,如果P1不變,P2 = 0XFF; 此時由於P1與P2的介面全部是高電平,沒有電壓差也就沒有電流,LED全部熄滅,如果想讓某一個燈點亮,可以根據8421法則,P2.7 P2.6 P2.5 P2.4是高8位,P2.4 P2.3 P2.2 P2.1 P2.0是低8位
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0
8 4 2 1 8 4 2 1
當p1 = 0xff; p2 = 0xfe的時候,就是P2.0那個小燈點亮,其他7個滅,p2 = 0xfe的這個F就是8+4+2+1 =15,對應16進制里的f, 同理E=8+4+2+0 =14,對應16進制里的e。
閃爍的話需要用到定時器,時間到了把當前P2對應的引腳取反一下就行了,比如當前P2.0 = 1; 定時器時間到了以後 ~P2.0 當然實際寫程序的時候不能直接這么寫,自己多復習下吧
③ 用51單片機P1口驅動8個LED做循環點亮控制,每個LED占空比50%,周期兩秒
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar Counter = 0;
uchar P1LEDBUF = 0x01;//P1口的燈如果亮了7個,就改成0xFE;
main()
{
P1=0x00; //如果燈全亮了,則全部改為0xFF
TMOD = 0x01; //T0工作在定時方式1
TH0 = 0x3C; //T0初值50ms
TL0 = 0xB0;
ET0 = 1; //開啟定時器0中斷
EA = 1; //開總中斷
TR0 = 1; //啟動定時器0
while(1);
}
/********************************************/
/* 定時器0中斷服務程序 */
/********************************************/
void T0_Serve() interrupt 1
{
TH0 = 0x3c; //每次定時50ms
TL0 = 0xb0;
Counter++;
if(Counter == 20) //中斷20次後進入函數,時間剛好1秒(誤差可以忽略)
{
Counter = 0; //計數清0
P1 = P1LEDBUF ;
P1LEDBUF =_crol_(P1LEDBUF,1); //位移P1口LED,准備下一輪
//如果燈亮和滅的剛好反了(熄了一個燈,亮了7個)就把初值改了
}
if(Counter == 40)
{
Counter = 0;//計數清0,周期2秒
P1 = 0x00 ;//如果燈全亮了,則改為P1=0xFF;
}
}
④ 單片機編程,用一個開關控制8個燈輪流亮,再用一個開關控制兩個燈一起亮一起滅
簡單的啊。思路:8個LED接在一個口,如P1口。再將另外兩個LED接在另外某個口(如P2)的兩個引腳。然後將兩個按鍵分別接在空閑的口的兩個引腳。
按下一個按鍵,使8個LED的輸出狀態變化,0xFE循環移位實現,LED低電平亮。另外的按鍵按下,兩個LED狀態翻轉。
⑤ 單片機程序:P1口接8盞LED燈,8盞LED燈循環點亮,間隔時間為50ms,用延時子程序實現
8盞LED燈循環點亮,間隔時間為50ms,你能分辨不?
還是給你改為間隔時間為1s,用定時器延時子程序實現
org 0000h
jmp start
org 0030h
start:
mov A,#0FEH;
mov R2,#8;
LOOP1: mov p1,A; 左邊4個LED每隔1S亮1個。從P1.0到P1.7。
call delay1s; 調用定時1s程序
RL A;
djnz R2,LOOP1
jmp start
delay1s:
mov r7,#20
lpr7: call delay50ms;
djnz r7,lpr7
ret
delay50ms:
mov TMOD,#01H
mov TH0,#(65536-50000)/256;
mov TL0,#(65536-50000) mod 256;
setb TR0;
jnb TF0,$
clr TF0;
ret
jmp $
end
⑥ 利用單片機控制8個發光二極體,實現8個燈同時閃爍的控製程序
以51位例,使用P1的八個IO口控制。
先定義:
sbit
LED0=P1^0;
sbit
LED1=P1^1;
........
以此類推,定義八個。
然後在主循環中:
LED0=0;
延時一段時間;
LED0=1;
就可以看到閃爍了。
⑦ 編程:使用單片機P1口控制8個LED。顯示方式:自上而下逐個點亮,再自下而上逐個點亮,如此循環
摘要 給你個簡單點的
⑧ AT89C51單片機的P1口控制8盞LED流水燈
# include "reg51.h" // 包含頭文件
#define uchar unsigned char
void delay02s(void) // 延時0.2s子程序
{
unsigned char i,j,k;
for ( i=2;i>0;i-- )
for (j=200;j>0;j-- )
for (k=250;k>0;k-- );
}
void main (void) // 主函數
{
uchar i,j;
while (1) // 死循環
{
j=0x01; // j初始化為0x01,左移初始值
for(i=0;i<8;i++) // for循環語句,完成8個循環
{
P1= ~ j; // 對變數j 中的值按位取反後,從P1口輸出
delay02s( ); // 延時0.2s
j= j<<1; // 左移1位
}
j=0x80; // 設置右移初始值j為0x80
for (i=0;i<8;i++)
{
P1= ~ j;
delay02s( );
j= j>>1; // 右移1位
}
}
}
這只是延時的方法實現的。
⑨ 利用89C51單片機的P1口控制8個發光二極體LED編程
這是只是百點亮P1口的程序
#include<reg51.h>
void
main()
{
while(1)
{
p1=0x00;
}
}
這是閃爍度P1口回程序
#include<reg51.h>
void
delay(unsigned
int
i)
//延時函數
{
unsigned
int
k;
for(k=0;k<i;k++);
}
void
main()
//主函數
{
while(1)
//循環函數
{
P1=0x00;
//點亮P1口
delay(2000);
//延時
P1=0xff;
//熄滅P1口
delay(200);
//延時
}
}
純手打,答對你有幫助的話請採納
謝謝
⑩ 使用51單片機的p1埠控制8個發光按照順序輪流點亮,並畫出51單片機與外接圖並
咨詢記錄 · 回答於2021-10-24