A. 單片機跑馬燈
看看我寫的,P0到P7接8個LED.
org ooooh
ajmp main
main:mov r7,#8
main:mov r0,#8 ;一個循環需要移動8位
mov p1,#01111111b ;初始為P0.7燈點亮
loop: clr p2.3
acall ds1ms ;延時,以便人眼可以觀察到
setb p2.3
acall ds1ms
mov a,p1 ;讀P0口當前顯示的數據送到A
rr a ;將A中的數據循環右移1位
mov p1,a ;再將A中右移過的數據送到P0
djnz r0,loop
djnz r7,main ;移動不夠8位,跳到LOOP處循環,
ljmp rel ;流動1遍跳轉到MAIN處循環流。
;---顯示延時----------
ds1ms: mov r1,#1
ds1lo: mov r2,#200
ds2lo: mov r3,#200
djnz r3,$
djnz r2,ds2lo
djnz r1,ds1lo
ret ;延時返回
rel:end
C語言的:
//8個發光二極體循環點亮
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit beep=P2^3;
uchar i,j,m,n,k;
void delay(uchar k)
{for(m=k;m>0;m--)
for(n=125;n>0;n--);
}
void main(void)
{i=0xfe;
while(1)
{//beep=0;
delay(100);
//beep=1;
delay(100);
j=_crol_(i,1);
i=j;
P1=j;
}
}
B. 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();
}
}
}
(2)單片機數組完成跑馬燈閃爍擴展閱讀:
Proteus 自從有了單片機也就有了開發系統,隨著單片機的發展開發系統也在不斷發展。 keil是一種先進的單片機集成開發系統。它代表著匯編語言單片機開發系統的最新發展,首創多項便利技術,將開發的編程/模擬/調試/寫入/加密等所有過程一氣呵成,中間不須任何編譯或匯編。
C. 單片機,跑馬燈,交替閃爍,C語言代碼
#include<reg51.h>
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned char i,led;
led=0xfe;
while(1)
{
P0=led;
delay(500);
P0=0xff;
delay(500);
led=(led<<1)|0x01;
if(led==0xff)led=0xfe;
}
}
D. 怎麼用單片機按鍵控制循環跑馬燈
我剛好寫過一個這樣的程序,參考一下吧,希望對你有幫助
/*硬體電路連接:流水燈接在P0口, 陽極接高電平,
陰極接P0口,4個按鍵分別接P3.4,P3.5, P3.6,P3.7 ,按下時是低電平 */
#include <regx51.h>
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
int a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//左流水燈數組
int b[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//右流水燈數組
int c[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; //逐盞點亮,逐盞滅掉數組
//************************************************************************************************************
void delay() //延時子程序
{int i;
for(i=0;i<30000;i++);
}
//**********************************************************************************************************
void aa() //實現要求(1)的子程序(key1按下時流水燈,彈開時全滅)
{ int i=0;
while(!key1) //判斷是否有鍵按下
{P0=a[i];delay();i++;if(i==8)i=0;}//流水燈
}
//*************************************************************************************************************
void bb() // 實現要求(2)的子程序(key2按下時實現計數功能,彈開時停止計數;)
{
while(!key2){P0--;delay();if(P0==0)P0=0xff;} //判斷是否有鍵按下,按下則計數器加1
}
//*************************************************************************************************************
void cc() // 實現要求(3)的子程序(key3按下時實現逐盞點亮,逐盞滅掉)
{ int i=0;
P0=0xff ;// 發光二極體全滅
while(!key3) //判斷是否有鍵按下
{P0=c[i];delay();i++;if(i==16)i=0;}//逐盞點亮,逐盞滅掉
}
//*************************************************************************************************************
void dd() // 實現要求(4)的子程序(key4按第一次按下,左流水,第二次按下,右流水,第三次按下,熄滅)
{ int i=0,j=0,k=0,h=0;
loop:P0=0xff;
if(key4==0) //第一次判斷是否有鍵按下
{for(i=0;i<30000;i++); //延時防抖動
if(key4==1) //判斷按鍵是否彈起
while(1){P0=a[j];delay();j++;if(j==8)j=0; //左流水燈
if(key4==0) //第二次判斷是否有鍵按下
{for(i=0;i<30000;i++); //延時防抖動
if(key4==1) //判斷按鍵是否彈起
while(1){P0=b[k];delay();k++;if(k==8)k=0; //右流水燈
if(key4==0) //第三次判斷是否有鍵按下
{for(i=0;i<30000;i++); //延時防抖動
if(key4==1) //判斷按鍵是否彈起
goto loop; //跳轉到LOOP處,即P3=0xff,此時燈全滅
}}}}}}
//****************************************************************************************************************
main()
{while(1){P0=0xff;
while(!key1)aa();
while(!key2)bb();
while(!key3)cc();
while(!key4)dd();
}}
E. 用單片機原理,編一個跑馬燈,要用到定時器,而且是0.5s閃一下,再3s閃一下,依次
定時器設置的延時時間是0.5s,然後用一個循環語句,就能實現3s的延時了。剩下的就簡單啦
F. 單片機編程,用數組方式控制跑馬燈。求助anyway。
從圖中看你使用的是 p0, 不是 p1, 電阻的連接也有點問題, 應該電阻和燈串聯, 圖中的連接可能會燒掉燈, 你的程式將 p1 換成 p0 其他是正確的.
G. 單片機的跑馬燈程序 求注釋 盡量每行都注釋 我幾乎看不懂啊! 謝謝= =!!明天就要答辯啦!!快的話加分加
哈哈 這不難啊!!!!…………單片機的跑馬燈程序主要用到了延時子程序,clr,lcall,ajmp 指令, 通過輪流點亮p1.0 …..P1.7 實現效果。你可以通過此程序的學習, 進一步掌握單片機的IO埠操作。
匯編語言參考程序:
org 0000h ;開始
ajmp loop
org 0080h ;到0030h處避開00-30的敏感地址
loop:
mov p1,#0ffh ;關閉所有燈
clr p1.0 ;點亮燈p1.0
lcall delay ;延時一段時間?
clr p1.1 ;點亮燈p1.1
lcall delay
clr p1.2 ;點亮燈p1.2
lcall delay
clr p1.3 ;點亮燈p1.3
lcall delay
clr p1.4 ;點亮燈p1.4
lcall delay
clr p1.5 ;點亮燈p1.5
lcall delay
clr p1.6 ;點亮燈p1.6
lcall delay
clr p1.7 ;點亮燈p1.7
lcall delay
AJMP LOOP ;到最開始loop處重新運行
delay: mov r5,#20 ;延時。
d1: mov r6,#40
d2: mov r7,#248
djnz r7,$
djnz r6,d2
djnz r5,d1
ret
end
c語言參考程序:
#include<reg51.h> //頭文件
#define uchar unsigned char //宏定義,為方便編程
#define uint unsigned int
#define LED P1 //宏定義,將P1口定義為LED
uchar led_value[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00}; //定義一數組,內存放跑馬燈數據
uchar *p=led_value; //定義指針,指向跑馬燈數組首地址
void delay() //延遲函數,與跑馬燈跳動頻率有關
{
uchar ii,jj;
for(ii=0;ii<200;ii++)
for(jj=0;jj<200;jj++);
}
void run_led() //跑馬燈運行函數
{
while(*p!=0x00)
{
LED=*p; //將數組中數據取出賦給P1口
p++; //預取下一數據
delay(); //延遲
}
p=led_value;
}
char code SST516[3] _at_ 0x003b; //模擬器保留
main() //主函數
{
while(1)
run_led(); //上電即運行跑馬燈程序
}
哈哈 !!!哈哈哈!!!!打字 打得手都是痛的 …………希望對你有所幫助……
H. 用51單片機(匯編語言寫)寫一個跑馬燈程序知道的幫個忙寫寫。
急用!請教!!!
用匯編語言程序,程序功能:實現方向可控的跑馬燈
編程要求:用八個LED發光二極體實現跑馬燈(即:8個燈依次輪流發光,每次只亮一個燈),系統啟動後,跑馬燈右向流轉,按下K1鍵,則反向流轉,再按則再反向……。接線方法:流水燈接P0口,按鍵K1可自選P1~P3任一引腳。
I. 單片機跑馬燈如何編程!
如果是一個位元組型的數據控制LED燈的話,且是1控制LED燈滅,0控制燈亮。
從滅到亮,先是0xFF,然後開始左移,最終移到0x00,就是全亮了。
從亮到滅,先是0x00,然後左移並且加1,重復此工作就是0xFF了
按照上面的思想,你自己應該可以搞定的。
J. 如何用一個STC單片機做一個跑馬燈,菜鳥一隻,最好用詳細的過程
# include <reg52.h>
# include <intrins.h> //循環左移右移函數
void delay1ms(unsigned int i)
{
unsigned char j;
while (i--)
{
for (j=0; j<115; ++j) //1ms基準延時程序
{
;
}
}
}
void main()
{
P0 = 0XFE; // P0燈
while (1)
{
P0 = _crol_(P0,1); // P0左移1位
delay1ms(100);
}
}
自己根據你的板子 改下參數