① c語言 跑馬燈 左移 程序設計 左移位運算不完整 請高手 補充下 謝謝
你的燈接在哪個I/O口 這里我就當你接在P1口給你補充一下吧 I/O你根據自己的修改
首先你要把這個頭文件加進去 #include "intrins.h"
for(i=1;i<=8;i++)
{
P1 = temp; //這里根據你實際的I/o口位置修改
temp = _crol_(temp,1); //循環左移這個數據就行了
delay();
}
② C語言移位問題,跑馬燈效果
a=010101110,b=010101110;
int i=0;//a變數恢復時需要的循環次數變數
while(1)
{
if(a!=000000000)
{
a=a<<1; //一個移位清零的過程;
}
else //一個還原的過程;
{
i=8;
while(a!=b)//這是一個逐步恢復的過程,一位一位出。從b的高位開始,當跳出循環時,a被恢復。
{
a=((b>>i)||a);
i--;
}
}//當被恢復時,有判斷a!=000000000;所以又開始移位清零。這樣構成死循環
}
樓主,這就是基本完整的答案,由於不知道你是在什麼平台下做的,所以a,b的數據類型不確定。不過可以採用位操作來定義。如果是做題,這答案肯定夠用了。
中間最關鍵的一步:恢復((b>>i)||a) 就是先將b右移你的數據(寬度-1)bit,咱們這里是9-1;然後和a做或運算的到高一位的值,這樣下去依次得到a的高9位值,而這時a就和b相等了,跳出循環,進行下一次a!=000000000所依賴的循環清零。
寫的挺多了 ,樓主給分吧!!!
③ 單片機C語言編程跑馬燈問題
這大概是你用到了LED>>1這樣的右移指令,這條指令有點缺陷,最高位是填0的,所以達不到循環右移的效果,LED=LED | 0x80 就是為了實現循環右移的目的而增加的一條指令。右移一位後將最高位置1.
④ 求高手解 有8個燈的led跑馬燈 要控制燈同時從中間向兩邊跑的代碼
跑馬燈說白了就是讓燈按照一定順序亮起來,你可以採用最笨的方法,從中間往兩邊跑,假設0代表低點平,1代表高電平,那麼就得出以下幾個狀態,
0b11111111
0b11100111
0b11011011
0b10111101
0b01111110
看0是不是從中間往兩邊跑
當然你也可以用演算法實現,你可以將這個八位的數據看做兩個4位的,然後將高四位左移,低四位右移
寫個大概程序為:
unsigned char a ,b,c,,i;
for(i=0;i<5;i++)//總共移動5次
{
a=(~(1<<i))&0x0f;//將1左移i位後取反與a相與,得出結果為高四位
b=(~(0x80>>i))&0x0f;//將1右移i位後取反與a相與,得出結果為低四位
c=a<<4+b;// 復原8位值
}
我沒有具體編譯執行你可以編譯執行驗證下演算法。
希望能幫到你
⑤ 單片機跑馬燈C語言程序,只要實現跑馬燈功能,要簡單點
#include<stdio.h>
#include<reg51.h>
void main()
{
int a;
unsigned char tmp=0;
while(1)
{
if(tmp==0) tmp=0x80;
else tmp = (tmp>>1);
P1 = tmp; //P1.0到P1.7控制8個燈
for(a=50000;a;a--); //延時一下
}
}
//只是示例,湊和一下
⑥ 51單片機設計跑馬燈的程序用(c語言)編寫
|P1口接8個發光二極體共陽
#include <AT89X51.H>
unsigned char i;
unsigned char temp;
unsigned char a,b;
void delay(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
void main(void)
{
while(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}
(6)跑馬燈從兩邊移動到中間c語言擴展閱讀:
Proteus 自從有了單片機也就有了開發系統,隨著單片機的發展開發系統也在不斷發展。 keil是一種先進的單片機集成開發系統。它代表著匯編語言單片機開發系統的最新發展,首創多項便利技術,將開發的編程/模擬/調試/寫入/加密等所有過程一氣呵成,中間不須任何編譯或匯編。
⑦ 8個跑馬燈從中間向兩邊跑的C程序,庫函數的形式!要C語言,不要匯編語言!
這樣的程序太簡單了
你只需要把值一個一個給IO口,沒給一次延時一段時間,就可以看到效果!
你可以把這個程序寫成一個子函數
然後把程序名放到XXX.H文件中就可以了
以後你要調用這個程序就先 #include 「XXX.H」
在調用函數就OK了
⑧ C語言設計跑馬燈程序
#include<reg51.h> //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
}
void delay(uint t) //定義延時函數
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
跑馬燈程序最基本的,c語言還未入門啊!!!
⑨ 兩邊往中間的跑馬燈匯編語言程序
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV DPTR,#TAB
MOV R2,#4
LOOP:
CLR A
MOV A,@A+DPTR
MOV P0,A
INC DPTR
LCALL DELAY
DJNZ R2,LOOP
SJMP MAIN
DELAY:
MOV R3,#200
DELAY1:
MOV R4,#250
DJNZ R4,$
DJNZ R3,DELAY1
RET
TAB:
DB 7EH,0BDH,0DBH,0E7H
END
⑩ 環形跑馬燈的編程,用C語言實現
#include <MSP430G2553.h>
#include <intrinsics.h>
#define myMCLK 8000000
#define uint unsigned int
#define uchar unsigned char
unsigned long led_left =0;
unsigned long led_right =0;
unsigned long led;
unsigned char Ok();
void Dis_Led();
void Init_clk()
{
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
}
void main(void)
{
uchar i;
WDTCTL = WDTPW + WDTHOLD; //關閉看門狗
Init_clk();
while(1)
{
led_left = 0x80000000; //點亮第一個燈
led_right = 0x00000004; //點亮最後一個燈
Dis_Led();
__delay_cycles(4000000);//500MS延時
if( Ok() )
{
for(i=0;i<30;i++)
{
led_left <<=1;
Dis_Led();
__delay_cycles(4000000);//500MS延時
if( led_left==0 && led_right==0)
;
led_right >>=1;
Dis_Led();
__delay_cycles(4000000);//500MS延時
if( led_left==0 && led_right==0)
;
}
}
}
}
unsigned char Ok()
{
uchar i;
for(i=0;i<30;i++)
{
led_left &=~0x00000003;// 總是把最後兩位置0
led_right &=~0x00000003;// 總是把最後兩位置0
led_left >>=1;
led_left = led_left | 0x80000000;
Dis_Led();
__delay_cycles(4000000);//500MS延時
if(led_left & led_right)
return 1;
led_right <<=1;
led_right = led_right | 0x00000004;
Dis_Led();
__delay_cycles(4000000);//500MS延時
if(led_left & led_right)
return 1;
}
return 0;
}
void Dis_Led()
{
led = led_left | led_right;
;// 把led中的相應位送給 IO 口,顯示
}
可以參考一下啊