『壹』 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();
}
}
}
(1)51單片機跑馬燈電路圖擴展閱讀:
Proteus 自從有了單片機也就有了開發系統,隨著單片機的發展開發系統也在不斷發展。 keil是一種先進的單片機集成開發系統。它代表著匯編語言單片機開發系統的最新發展,首創多項便利技術,將開發的編程/模擬/調試/寫入/加密等所有過程一氣呵成,中間不須任何編譯或匯編。
『貳』 單片機89C51用匯編製作跑馬燈P1控制8個LED(D1~D8)燈實現流水燈的效果,高手速度來
很酷的流水燈
#include <reg51.h>
typedef unsigned char uchar;
#define Ton 40
#define LED P0
sbit leds=P1^4;
sbit LED0 = P0^0;
sbit LED1 = P0^1;
sbit LED2 = P0^2;
sbit LED3 = P0^3;
sbit LED4 = P0^4;
sbit LED5 = P0^5;
sbit LED6 = P0^6;
sbit LED7 = P0^7;
unsigned char Maikuan=0;
static unsigned char ledon[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar Occupy_led; //占空比越大,燈越亮
bit light;
uchar m;
void Inittime()
{
TMOD = 0x02; //定時器0,工作方式2,自動重裝
TH0 = 256-Ton;
TL0 = 256-Ton;
ET0 = 1;
EA = 1;
TR0 = 1;
}
//定時器0中斷
void time0() interrupt 1 using 0
{
Maikuan++;
}
void main()
{
unsigned char i = 0,j = 0; //初始化i,j
leds=0;
Inittime();
while (1)
{
//第1,3,5,7個燈半亮,其餘的全亮。
for(i=254; i>0; i--)
{
while ( Maikuan!=20)
{
LED = 0x00;
}
while ( Maikuan!=200)
{
LED = 0x55;
}
Maikuan = 0;
}
//最難的:8個燈從第一個開始依次漸亮,直到最後一個。再從最後一個起漸暗,直到第一個。如此循環往復。
for(j = 0;j<=7;j++)
{
i = 0;
while(i!=255) // 由暗變亮
{
if( Maikuan == 0) // 點亮
{
LED = ledon[j];
}
if(Maikuan == i) // 熄滅
{
LED = 0xff;
}
if( Maikuan== 255)
{
i++;
}
}
}
for(j=7;j>=0;j--)
{
i = 0;
while(i!=255) // 由亮變暗
{
if(Maikuan == 0) // 熄滅
{
LED = 0xff;
}
if( Maikuan == i) // 點亮
{
LED = ledon[j];
}
if( Maikuan == 255)
{
i++;
}
}
}
//所有的燈逐漸從暗到全亮,再由全亮到暗。
for (m=254; m>0; m--)
{
while (Maikuan!=Occupy_led)
{
LED = 0x00;
}
while (Maikuan!=127)
{
LED = 0xff;
}
Maikuan = 0;
if (light)
{
Occupy_led++;
}
else
{
Occupy_led--;
}
if (Occupy_led==128)
{
Occupy_led = 127;
light = !light;
}
if (Occupy_led>128)
{
Occupy_led = 0;
light = !light;
}
}
}
}
『叄』 高手們!幫幫忙看看我的單片機跑馬燈程序哪出問題了!!!!
我們要用到2X5的獨立鍵盤控制的,可是我是新手不懂 能給我一個程序不??
呵呵,下面就是程序,你試試看就知道了。
;--------------------------
你的程序,有三種流水燈的模式,就是按鍵功能,檢測不出來。
電路圖,不清楚,看個大概。
現在是:K1、K2分別按下,各顯示一種模式,
兩個鍵盤都不按,顯示第三種模式。
你原來只是在起動的時候,按鍵才管用,要想更換模式,必須重新起動。
現在增加了三行:「LJMP START ;本行可刪除」,就可以在運行期間,更換模式。.
ORG 0000H
START:
MOV P1, #255
CLR P1.6
MOV P2, #0
SETB P2.1
SETB P2.3
JNB P1.0, LOOPB
JNB P1.1, LOOPC
MOV A,#01H
LOOPA:MOV R0,#7
LOOPAL:
MOV P0, A
RL A
LCALL DELAY
DJNZ R0, LOOPAL
MOV R0,#7
LOOPAR:
MOV P0, A
RR A
LCALL DELAY
DJNZ R0, LOOPAR
LJMP START ;本行可刪除.
LJMP LOOPA
LOOPB:MOV A,#03H
LOOPBL:
MOV P0,A
RL A
LCALL DELAY
JNB ACC.7, LOOPBL
LOOPBR:
MOV P0, A
RR A
LCALL DELAY
JNB ACC.0,LOOPBR
LJMP START ;本行可刪除.
LJMP LOOPB
LOOPC:MOV R0,#3
MOV A,#01H
LOOPCL:
MOV P0, A
RL A
RL A
LCALL DELAY
DJNZ R0,LOOPCL
MOV R0, #3
RL A
LOOPCR:
MOV P0, A
RR A
RR A
LCALL DELAY
DJNZ R0, LOOPCR
LJMP START ;本行可刪除.
LJMP LOOPC
DELAY:MOV R4,#2
L3:MOV R2,#250
L1:MOV R3,#250
L2:DJNZ R3,L2
DJNZ R2,L1
DJNZ R4,L3
RET
END
本程序在PROTEUS中模擬調試通過。
『肆』 51單片機匯編語言編寫一個跑馬燈的程序,初學者做實驗用,具體要求如下,好了可以加分
程序1:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
LOOP:
MOV A,P2
MOV B,A
MOV P0,A
MOV P1,#0FFH
LOOP1:
LCALL DELAY
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
MOV A,P2
CJNE A,B,LOOP
SJMP LOOP1
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
程序2:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
JNB P2.0,LOOP1 ;
JNB P2.1,LOOP2 ;
SJMP MAIN
LOOP1:
MOV P0,#0FEH
MOV P1,#0FFH
LOOP11:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.1,LOOP2
SJMP LOOP11
LOOP2:
MOV P0,#0FCH
MOV P1,#0FFH
LOOP21:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.0,LOOP1
SJMP LOOP21
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
『伍』 用51單片機最小系統做一8個燈的跑馬燈,要求從左到右兩個兩個亮,之後從右向左一個一個滅
unsignedchari;
P1=0x00;
delay();
P1=0x03;
delay();
P1=0x0f;
delay();
P1=0x3f;
delay();
P1=0xff;
delay();
for(i=0;i<8;i++)
{
P1=P1/2;
delay();
}
delay函數延時延個0.5s就行
『陸』 51單片機跑馬燈電路圖(左右來回循環),8個led燈分別接在P2口,c程序、模擬圖如下。電路並未出現預期效果
電路:
一般的單片機 和 TTL集成電路晶元,都是灌電流能力強,拉電流能力極弱。
為此,應該用輸出低電平,來帶動負載。
而你的電路,是用高電平帶動LED發光的,模擬,也許還行;實際的電路,LED是不會亮的。
『柒』 51單片機跑馬燈程序
不好意思,延時用了樓上的。keil下編譯OK。假設P1接燈。
ORG00H
SJMPSTART
ORG30H
START:
MOVA,#00
SETBC
MOVR0,#9
;從左到右
LOOP1:
RLCA
MOVP1,A
ACALLDELAY
DJNZR0,LOOP1
;從右到左
MOVR0,#9
LOOP2:
RRCA
MOVP1,A
ACALLDELAY
DJNZR0,LOOP2
SJMPSTART
DELAY:
MOVR6,#20
DELAY_0:MOVR5,#255
DJNZR5,$
DJNZR6,DELAY_0
RET
這個程序比較簡單了。再精簡,只能精簡一句,將MOVP1,A放在DELAY函數里。這樣減少一行。
簡單介紹一下:
首先就是你要輪流點亮,就是將1循環一圈,因為你要全滅一次,所以用到CY。
RG00H
SJMPSTART
ORG30H
START:
MOVA,#00;//清空A寄存器
SETBC;//將CY置1,然後帶進位左移就會進入將A的b0
MAINLOOP:;//大循環起始
MOVR0,#9;設置移位次數,要滅一次,所以設置為9
;從左到右
LOOP1:
RLCA;帶進位左移一次;第一次移位結果為01
MOVP1,A;將A中值放入P1點亮對應LED;該句可放在DELAY里,然後從右到左也去掉該句
ACALLDELAY;延時,保持燈亮一段時間,自己根據實際情況調整一下。
DJNZR0,LOOP1;循環,點亮下一個燈,最後一次,A為0,將全滅一次,CY為1
;從右到左
MOVR0,#9;設置循環次數
LOOP2:;循環起始表示
RRCA;帶進位右移,第一次結果為80H
MOVP1,A;更新P1點亮對應LED
ACALLDELAY;延時,保持燈亮一段時間
DJNZR0,LOOP2;循環,點亮下一個燈
SJMPMAINLOOP;循環,重新開始下一輪
如果你是管腳輸出低LED才亮,只需將MOVA,#00和SETBC改為MOVA,#0FFH和CLRC即可。
方案2:位定址區00做標志,為0從左到右,該標志為1從右到左
ORG00H
SJMPSTART
ORG30H
START:
MOVA,#00
SETBC
MOVR0,#9
CLR00H
LOOP1:
RLLED:
JB00H,RRLED
RLCA
AJMPDISP
RRLED:
RRCA
DISP:
MOVP1,A
ACALLDELAY
DJNZR0,LOOP1
CPL00H
AJMPSTART
DELAY:
MOVR6,#20
DELAY_0:MOVR5,#255
DJNZR5,$
DJNZR6,DELAY_0
RET
下面是方案1的流程圖,這種流程圖不知怎麼寫好,而且寫出來基本是對每行的代碼的解釋。
『捌』 用51單片機(匯編語言寫)寫一個跑馬燈程序知道的幫個忙寫寫。
急用!請教!!!
用匯編語言程序,程序功能:實現方向可控的跑馬燈
編程要求:用八個LED發光二極體實現跑馬燈(即:8個燈依次輪流發光,每次只亮一個燈),系統啟動後,跑馬燈右向流轉,按下K1鍵,則反向流轉,再按則再反向……。接線方法:流水燈接P0口,按鍵K1可自選P1~P3任一引腳。
『玖』 用51單片機設計一個16位的跑馬燈 要求通過一個開關控制3種不同的模式 用匯編語言寫,三種模式隨意
一個開關,比如導通了1秒一個模式,3秒一個模式,5秒一個模式。
要麼在一定時間內,檢測開關導通的次數
我覺得應該弄的直觀點,從51上接4個led做指示用,一個燈表示待運行,還有3個燈,亮一個表示模式1,亮兩個表示模式2,亮3個表示模式3
開機的時候,待運行燈亮,等待設定模式,這時候開始按按鍵設定模式,同時待運行燈滅。模式燈隨按鍵操作變化。
模式設定好了,停止按鍵操作,兩秒後待運行燈亮,表示模式設定完畢。這時候長按按鍵,開始跑馬燈。短按按鍵則返回模式設定。
當開始運行跑馬燈的時候,可以設定運行一遍返回,也可以中斷返回。
個人想法,不知行不行
『拾』 用51單片機設計8個燈的跑馬燈程序拜託各位大神
/**************************************************************** 程序名稱: 八位LED雙燈右移動流水燈顯示 說明:使用本程序你必須把 SE3設置為2-3短接 SE4設置為1-2短接 *****************************************************************/ /*頭文件*/ #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char /*埠定義*/ #define led_port P0 /*定義LED顯示的數據腳*/ /*1MS為單位的延時程序*/ void delay_1ms(uchar x) { uchar j; while(x--){ for(j=0;j<125;j++) {;} } } /*主程序*/ void main() { uchar led_sdata; /*顯示寄存器*/ uchar i; while(1){ led_sdata=0xfe; /*初始化顯示寄存器為1號燈亮*/ led_port = led_sdata; /*將顯示寄存器輸出到LED埠*/ delay_1ms(200); delay_1ms(200); /*延時*/ led_sdata=0xfc; /*顯示寄存器為1.2號燈亮*/ for(i=0;i<8;i++){ led_port = led_sdata; /*將顯示寄存器輸出到LED埠*/ led_sdata = (led_sdata<<1)+1; /*將顯示寄存器數據左移1位,並將第一位置高,即熄滅*/ delay_1ms(200); delay_1ms(200); /*延時*/ } led_sdata=0xff; /*燈全滅*/ led_port = led_sdata; /*將顯示寄存器輸出到LED埠*/ delay_1ms(200); delay_1ms(200); /*延時*/ } }