關於51微控制器的跑馬燈設定問題,關於51微控制器跑馬燈程式碼的修改。。。

時間 2021-11-04 16:41:26

1樓:蘇羽奇偶

自己看程式修改一下:

#include

#include

* 延時子程式 *

* *

void delayms(unsigned char ms)

* 主程式 *

* *

main()}

2樓:穿假鞋打街球

中斷程式void int0(void) interrupt0 void int1(void)interrupt2

延時程式void delay*ms(int i)

void main()

關於51微控制器跑馬燈**的修改。。。

3樓:狄思鬆

迴圈語句 是不能用了~~

但可以修改, 方法兩種。

一是 通過 陣列 而是邏輯判斷

陣列方式就是 開一個8個元素的陣列 內容是 0000001.。。。1000000 其中 第一個為 0100000 第二個為 1000000 這樣一次向埠寫 陣列中的內容就行了。

第二個就是 利用 for 迴圈,當 迴圈值= 7 的時候 就讓 1 輸出 =8的時候讓 0 輸出。

關於51微控制器跑馬燈的**,為什麼我這樣寫所有led是一直亮著的

4樓:

去掉while(1);這個語句後面的分號。

51微控制器設計跑馬燈的程式用(c語言)編寫

5樓:墨汁諾

|p1口接8個發光二極體共陽

#include

unsigned char i;

unsigned char temp;

unsigned char a,b;

void delay(void)

void main(void)

for(i=1;i<8;i++)}}

6樓:

這個簡單,不要提問啊。你讓一個p0=0x01;然後再移的思路去想就能實現。不要什麼都要問啊。

7樓:匿名使用者

p1口接8個發光二極體共陽,燒入下面程式

#include

unsigned char i;

unsigned char temp;

unsigned char a,b;

void delay(void)

void main(void)

for(i=1;i<8;i++)}}

8樓:匿名使用者

用中斷多美。。

另外樓上那個include要自己調一下

51微控制器跑馬燈程式

9樓:

不好意思,延時用了樓上的。keil下編譯ok。假設p1接燈。

org 00h

sjmp start

org 30h

start:

mov a ,#00

setb c

mov r0,#9

;從左到右

loop1:

rlc a

mov p1, a

acall delay

djnz r0, loop1

;從右到左

mov r0,#9

loop2:

rrc a

mov p1, a

acall delay

djnz r0, loop2

sjmp start

delay:

mov r6,#20

delay_0:mov r5,#255

djnz r5,$

djnz r6,delay_0

retend

這個程式比較簡單了。再精簡,只能精簡一句,將mov p1,a 放在delay函式裡。這樣減少一行。

簡單介紹一下:

首先就是你要輪流點亮,就是將1迴圈一圈,因為你要全滅一次,所以用到cy。

rg 00h

sjmp start

org 30h

start:

mov a ,#00 ;//清空a暫存器

setb c     ;//將cy置1,然後帶進位左移就會進入將a的b0

mainloop: ;//大迴圈起始

mov r0,#9 ;設定移位次數,要滅一次,所以設定為9

;從左到右

loop1:

rlc a     ;帶進位左移一次;第一次移位結果為01

mov p1, a ;將a中值放入p1點亮對應led;該句可放在delay裡,然後從右到左也去掉該句

acall delay ;延時,保持燈亮一段時間,自己根據實際情況調整一下。

djnz r0, loop1 ;迴圈,點亮下一個燈,最後一次,a為0,將全滅一次,cy為1

;從右到左

mov r0,#9 ;設定迴圈次數

loop2:    ;迴圈起始表示

rrc a     ;帶進位右移,第一次結果為80h

mov p1, a ;更新p1點亮對應led

acall delay ;延時,保持燈亮一段時間

djnz r0, loop2 ;迴圈,點亮下一個燈

sjmp mainloop  ;迴圈,重新開始下一輪

如果你是管腳輸出低led才亮,只需將mov a ,#00 和setb c改為mov a, #0ffh和clr c即可。

方案2:位定址區00做標誌,為0從左到右,該標誌為1從右到左

org 00h

sjmp start

org 30h

start:

mov a ,#00

setb c

mov r0,#9

clr 00h

loop1:

rlled:

jb 00h, rrled

rlc a

ajmp disp

rrled:

rrc a

disp:

mov p1, a

acall delay

djnz r0, loop1

cpl 00h

ajmp start

delay:

mov r6,#20

delay_0:mov r5,#255

djnz r5,$

djnz r6,delay_0

retend

下面是方案1的流程圖,這種流程圖不知怎麼寫好,而且寫出來基本是對每行的**的解釋。

10樓:

org 00h

sjmp main

org 30h

main:

mov r7,#8

mov r0,#00h

loop:

mov dptr,#100h

mov a,r0

movc a,@a+dptr

mov p1,a

acall delay

inc r0

djnz r7,loop

mov r0,#00h

mov r7,#8

loop_0:mov dptr,#200hmov a,r0

movc a,@a+dptr

mov p1,a

acall delay

inc r0

djnz r7,loop_0

sjmp main

delay:mov r6,#20

delay_0:mov r5,#255

djnz r5,$

djnz r6,delay_0

retorg 100h

db 根據燈的實際連線狀態寫

org 200h

db 根據燈的實際連線狀態寫end

11樓:r傻強

迴圈以後

連續賦值就可以了!!

51微控制器 跑馬燈怎麼兩顆燈在中間亮起,往兩邊亮。在以下程式修改

12樓:匿名使用者

就改一下這一條 代替 第五條

uchar table=;

13樓:晴天小豬

51微控制器 跑馬燈怎麼兩顆燈在中間亮起,往兩邊亮。只有4種狀態吧!試試看~

#include

#include

#define uchar unsigned char#define uint unsigned intuchar table=;

void delay(uint time)}}void main()}}

51微控制器跑馬燈程式,51微控制器設計跑馬燈的程式用(c語言)編寫

不好意思,延時用了樓上的。keil下編譯ok。假設p1接燈。org 00h sjmp start org 30h start mov a 00 setb c mov r0,9 從左到右 loop1 rlc a mov p1,a acall delay djnz r0,loop1 從右到左 mov r...

關於51微控制器定時器的問題,關於51微控制器使用兩個定時器進行控制的問題

工作方式1是16位的自動重灌定時計數器,能裝的最大數為65536 0 65535 那麼初值為65536 50000 15536 0x3cb0 就是你說的50ms溢位一次 12m的晶振,一個時鐘週期剛好1us,50000us 50ms 如果你需要1秒的定時,可以在定時器計數器中斷裡設一個計數變數x,進...

51微控制器串列埠通訊中斷的問題,51微控制器串列埠通訊問題

肯定不會執行while ti 0 下面的程式的,因為你的中斷開著,程式跳到中斷服務程式裡面了,然後中斷處理結束了之後,ti自動清零了,所以一直在while ti 0 無限迴圈。程式裡面,既然開通了中斷功能,那你就一直使用中斷功能,為什麼你還要使用查詢功能呢?甚至有時把中斷給禁止了,這裡面容易出現問題...