4 花樣流水燈

2021-05-24 13:56:24 字數 2823 閱讀 9980

at89s51的定時/計數器t0產生2秒鐘的定時,每當2秒定時到來時,更換閃爍的燈,每個指示閃爍的頻率為0.2秒。(即l1以0.2秒的速率閃爍,2秒定時到來時,燈l1閃過10下之後,l2開始以0.2秒的速率閃爍,如此迴圈下去,共4個燈,l1~l4)

(說明:定時2秒,採用16位定時50ms,共定時40次才可達到2秒,每50ms產生一中斷,定時的40次數在中斷服務程式中完成,同樣0.2秒的定時,需要4次才可達到0.2秒。對於中斷程式,在主程式中要對中斷開中斷。 由於每次2秒定時到時,l1-l4要交替閃爍。採用id來號來識別。當id=0時,l1在閃爍,當id=1時,l2在閃爍;當id=2時,l3在閃爍;當id=3時,l4在閃爍 )

彙編:tcount2s equ 30h

tcnt02s equ 31h

id equ 32h

org 00h

ljmp start

org 0bh;定時/計數器t0中斷入口位址為000bh,

ljmp int_t0;在中斷入口地方加入長跳轉指令來執行中斷服務程式

start: mov tcount2s,#00h

mov tcnt02s,#00h

mov id,#00h

mov tmod,#01h

mov th0,#(65536-50000) / 256

mov tl0,#(65536-50000) mod 256

setb tr0

setb et0

setb ea

sjmp $

int_t0: mov th0,#(65536-50000) / 256

mov tl0,#(65536-50000) mod 256

inc tcount2s

mov a,tcount2s

cjne a,#40,next

mov tcount2s,#00h

inc id

mov a,id

cjne a,#04h,next

mov id,#00h

next: inc tcnt02s

mov a,tcnt02s

cjne a,#4,done

mov tcnt02s,#00h

mov a,id

cjne a,#00h,sid1

cpl p1.0

sjmp done

sid1: cjne a,#01h,sid2

cpl p1.1

sjmp done

sid2: cjne a,#02h,sid3

cpl p1.2

sjmp done

sid3: cjne a,#03h,sid4

cpl p1.3

sid4: sjmp done

done: reti;中斷服務程式返回

endc語言:

#include

unsigned char tcount2s;

unsigned char tcount02s;

unsigned char id;

void main(void)

void t0(void) interrupt 1 using 0

} tcount02s++;

if(tcount02s==4)

} } 

流水燈(取表方式)

利用取表的方法,使p1口的燈做不同變化:左移2次,右移2次,閃爍2次(延時的時間0.2秒)。

說明:

在用**進行程式設計的時候,要用以下的指令來完成

(1). 利用mov

dptr,#data16的指令來使資料指標暫存器指到表的開頭。

(2). 利用movc

a,@a+dptr的指令,根據累加器的值再加上dptr的值,就可以使程式計數器pc指到**內所要取出的資料。

因此,只要把控制碼建成乙個表,而利用movc

a,@a+dptr做取碼的操作,就可方便地處理一些複雜的控制動作

彙編:

org 0

start: mov dptr,#table

loop

: clr a

movc a,@a+dptr

cjne a,#01h,loop1

jmp start

loop1: mov p1,a

mov r3,#20

lcall delay

inc dptr

jmp loop

delay: mov r4,#20

d1: mov r5,#248

djnz r5,$

djnz r4,d1

djnz r3,delay

rettable: db 0feh,0fdh,0fbh,0f7h

db 0efh,0dfh,0bfh,07fh

db 0feh,0fdh,0fbh,0f7h

db 0efh,0dfh,0bfh,07fh

db 07fh,0bfh,0dfh,0efh

db 0f7h,0fbh,0fdh,0feh

db 07fh,0bfh,0dfh,0efh

db 0f7h,0fbh,0fdh,0feh

db 00h, 0ffh,00h, 0ffh

db 01h

endc語言:

#include

unsigned char code table=;

unsigned char i;

void delay(void)

void main(void)

else

} }

可控的花樣流水燈

其實,上文中的電路,並不是實際的硬體電路,其中的數碼顯示器,是使用了 proteus 中的 元件。如果想要製作硬體電路,這個 的元件就必須更換為七段解碼器晶元,選用 cd4511 74ls48 這些解碼器都可以。如果採用軟體解碼,也可以省掉解碼晶元,這更體現了微控制器的智慧型特點。下面就是採用軟體解...

FPGA之花樣流水燈控制模組

例子 8個燈中,硬體控制其中1個led燈以0.5秒的速度正向點亮一次,然後逆向點亮1次,並不斷迴圈。主 系統時鐘為50mhz 分析 首先,訊號 8個燈 系統時鐘clk 需要時鐘0.5秒 實現 系統時鐘分頻0.5秒模組。控制燈亮乙個。module div 25m clk 50m,clk 2hz inp...

51小程式 流水燈 花樣燈

該程式為燈乙個乙個亮 void main void u8 w,i while 1 for i 0,w 0x01 i 8 i port w w 1 delay 2000 只有乙個燈進行流水 花樣流水燈 名稱 花樣流水燈 編寫 jam 日期 2018.7.21 修改 無 功能 花樣燈 第一遍 led1 ...