導航:首頁 > 操作系統 > 單片機led燈位移

單片機led燈位移

發布時間:2023-09-05 07:33:42

A. 單片機編程8個led燈,讓最低燈亮,循環左移s

思路:

控制8個LED燈,使用上拉方式控制,引腳高電平燈滅,引腳低電平燈亮。

這8個LED使用同一P口上的所有引腳,假設為P1口中的P1.0-P1.7共8個腳。

軟體中,只需要將這些燈使用一個for循環即可。

代碼

#include<reg51.h>

unsignedcharPData;//記錄當前是哪個狀態,值為1表示亮,輸出到P口時取反

//延時,本函數是非精確延時,若需要精確延遲則需要根據本函數的匯編語句進行精確計算後調整循環體次數
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}

voidmain(){
unsignedchari=0;
PData=0x00;//全滅狀態
while(1){//無限循環亮滅狀態
for(i=0;i<8;i++){//從最低位循環到不是常亮的最高位
P1=~(PData+(1<<i));//第i位亮
delay(500);
P1=~PData;//第i位滅
delay(500);
}
}
}

B. 請運用位移法利用單片機的P2口實現的8個LED流水燈功能。要求:1.流水的順序是從左到右 2.每次只亮一盞燈

用紅色的替換對應語句,即可得反方向了,去試試吧;

C. 關於單片機流水燈左移右移的問題

51單片機
的左移右移,首先在開始要調用"intrins.h"的文件包,這個文件包含_cror_(右移),_crol_(左移);然後通過for語句來控制;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(k=250;k>0;k--);
理解這三句,第一句是指:m=20;m>0然後m--是真就執行:
for(n=20;n>0;n--)
for(k=250;k>0;k--);
這兩句,m--一直減,減一次,裡面就執行一次,這里是20次。
流水燈的左右移,第一用"intrins.h"的文件包,第二要要會定義賦值變數,第三延時,這是關鍵。

D. 單片機流水燈設計,使八個led燈右移

#include <AT89X52.h> //調用51單片機的頭文件


void main(void) //主函數,單片機開機後就是從這個函數開始運行

{


unsigned int a; //定義一個int型變數,做延時用

P0=0;

while(1) //死循環,單片機初始化後,將一直運行這個死循環

{

for(a=0;a<20000;a++); //延時若干時間,具體時長暫不理會

if(P0==0)

P0=0x01;

else

P0=P0<<1; //將PO左移

}

}

E. 單片機點亮一個燈泡時,為什麼要進行左移一個單位呢,這里有點不懂還望大神解答

這個是為了讓時間長一點,單片機運行速度還是比較快的。你看只有led8_one的最高位是1,才點亮燈。其他的時間是關閉燈的。每次移位就是為了讓led8_one的那個1向最高位動一次。

F. 求用C語言編程實現51單片機的LED燈移動

#include<reg51.h>
#define uchar unsigned char
sbit c10=P1^0;
sbit c11=P1^1;
sbit c12=P1^2;
sbit c13=P1^3;
uchar led1,led3;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar keyval=0xff;
led1=0xfe;
led3=0xf8;
while(1)
{
if(c10==0)
{
delay(10);
if(c10==0)
{
while(c10==0);
keyval=0;
}
}
if(c11==0)
{
delay(10);
if(c11==0)
{
while(c11==0);
keyval=1;
}
}
if(c12==0)
{
delay(10);
if(c12==0)
{
while(c12==0);
keyval=2;
}
}
if(c13==0)
{
delay(10);
if(c13==0)
{
while(c13==0);
keyval=3;
}
}
switch(keyval)
{
case 0:
P0=led1;
led1=(led1<<1)|0x01;
if(led1==0xff)led1=0xfe;
delay(100);
case 1:
P0=led1;
led1=(led1>>1)|0x80;
if(led1==0xff)led1=0x7f;
delay(100);
case 2:
P0=led3;
led3=(led3<<1)|0x01;
if((led3&0xf0)==0x30)led3=0x3e;
if((led3&0xf0)==0x70)led3=0x7c;
if((led3&0xf0)==0xf0)led3=0xf8;
break;
case 3:
P0=led3;
led3=(led3>>1)|0x80;
if((led3&0x0f)==0x0c)led3=0x7c;
if((led3&0x0f)==0x0e)led3=0x3e;
if((led3&0x0f)==0x0f)led3=0x1f;
break;
default:break;
}
}
}

閱讀全文

與單片機led燈位移相關的資料

熱點內容
php支付項目經驗 瀏覽:929
中國人民銀行在哪裡下載app 瀏覽:560
松餅pdf 瀏覽:667
萌新如何獲得命令 瀏覽:138
java設計模式及代碼 瀏覽:7
命令恢復資料庫 瀏覽:192
linuxoracle11gr2 瀏覽:972
攜程APP簽到在哪裡 瀏覽:389
dwg解壓方法 瀏覽:422
雲伺服器數據溝通 瀏覽:849
android地圖定位源碼 瀏覽:632
鴻蒙系統如何解除app安裝限制 瀏覽:497
阿里雲伺服器應用鏡像選哪個 瀏覽:343
win7策略更新命令 瀏覽:299
android源碼分析之設計模式 瀏覽:294
qq郵箱上的文件怎麼解壓在電腦上 瀏覽:504
業余學python是如何掙錢的 瀏覽:416
方舟伺服器連接超時顯示什麼 瀏覽:226
php繪制emoji 瀏覽:35
安卓桌面工具怎麼刪除 瀏覽:54