基於89C51的閃爍LED小燈設計

2021-08-10 04:23:48 字數 3379 閱讀 2114

c51的閃爍led設計

本設計採用通俗易懂的語言組織,看好了,在進行以下主要內容之前,先話癆話癆,學習這些微控制器設計啊,真的得有興趣,所謂興趣,就是你懂了它,理解了它,自然而然就對它產生了興趣了,換句話說,你他麼一點都不懂,你來跟我說興趣,你個龜兒,鬼都不信,牆都不服舅扶你。話不多說,想玩這個,總得知道入口吧,你是通過什麼方式知道玩這個微控制器呢,有人專業課就是這個,有人網上知乎聽水友嘮嘮知道,千奇百怪的方式,而我呢,確實是專業課所需的,沒辦法,寫這篇部落格,我正在讀大三呢,哈哈,一起加油吧!

我寫的這個led閃爍小燈,是採用at89c51的,是採用組合語言來寫程式的,主要使小燈輪流點亮,逐點點亮,間隔點亮。下圖(1)是閃爍小燈電路原理圖,其中p1口作led燈控制輸出埠,p3.0~p3.2分別為三個閃爍功能開關控制埠,p3.3埠做備用,限流電阻10k,採用12mhz晶振。

圖(1)

系統程式設計

一.主要程式

掃瞄p3.0~p3.2口,看一看有沒有按鍵按下,然後呢,在20記憶體單元中的低三位全部置1,進而確定所執行的閃爍功能,來看看,20h.0為1時,led燈輪流點亮,20h.1為1時,led燈逐點點亮;20h.2為1時,led燈間隔點亮;然後呢,注意要先對20h低三位的位值判斷是否為1,會轉入相應的閃爍控制程式,上電要初始化的,要先對20h.0進行置1,系統首先進入輪流點亮功能。主程式流程圖如圖(2)

二.鍵掃瞄子程式

採用直接埠掃瞄鍵開關,要用軟體延時消抖確認後呢,要對20h記憶體單元相應的位進行置1,其餘位置零。

三.閃爍控制程式

這個程式用來控制p1口的發光變化方式的,其中如下:

功能程式0(fun0)的p1口輸出變化為:11111110 延時 11111101 延時 11111011 延時 11110111 延時 11101111 延時 11011111 延時 10111111 延時 01111111 延時 結束 轉去執行主程式

功能程式1(fun1)的p1口輸出變化為:11111110 延時 11111100 延時 11111000 延時 11110000 延時 11100000 延時 11000000 延時1000000 延時 00000000 延時 結束轉去執行主程式

功能程式2(fun2) 的p1口輸出變化為:10101010 延時 01010101 延時 結束轉去執行主程式。

四.延時子程式

延時子程式有10ms和0.5s兩個,用作鍵掃瞄消抖及led閃爍延時,led的閃爍快慢由r4暫存器內的初值進行改變。

匯程式設計序清單

rg 0000h  ;程式執行開始位址

ljmp start ;轉去start執行

org 0003h ;外中斷0中斷入口位址

reti ;中斷返回(不開中斷)

org 000bh ;定時器t0中斷入口位址

reti ;不開中斷

org 0013h ;外中斷1中斷入口位址

reti ;不開中斷

org 001bh ;定時器t1中斷入口位址

reti ;不開中斷

org 0023h ;序列口中斷入口位址

reti ;不開中斷

clear:mov 20h,#00h ;20h單元內容清零(閃爍標誌清零)

setb 00h ;20h.0位置置1

ret ;子程式返回

start:acall clear ;呼叫初始化子程式

main:lcall keywork ;呼叫鍵掃瞄子程式

jb 00h,fun0 ;20h.0位為1時轉去執行fun0

jb 01h,fun1 ;20h.1位為1時轉去執行fun1

jb 02h,fun2 ;20h.2位為1時轉去執行fun2

jb 03h,main ;備用

ajmp main ;返回主程式main

fun0:mov a,#0feh ;累加器賦初值

fun00:mov p1,a ;累加器值送入p1口

lcall dl05s ;呼叫延時05s子程式

jnb acc.7,main

rl a

ajmp fun00 ;轉去執行fun00

fun1:mov a,#0feh ;累加器賦初值

fun11:mov p1,a ;累加器值送入p1口

lcall dl05s ;呼叫延時05s子程式

jz main ; 累加器為0轉去執行主程式main

rl a ;累加器中資料迴圈左移1位

anl a,p1 ;a中值與p1值相與

ajmp fun11 ;轉去執行fun11

fun2:mov a,#0aah ;累加器賦初值

fun22:mov p1,a ;累加器值送入p1口

lcall dl05s ;呼叫延時05s子程式

cpl a ;a中各位取反

mov p1,a ;再把累加器值送入p1口

lcall dl05s ;呼叫05s子程式

ajmp main ;轉去執行主程式main

keywork:mov p3,#0ffh

jnb p3.0,key0

jnb p3.1,key1

jnb p3.2,key2

jnb p3.3,key3

retkey0:lcall dl10ms

jb p3.0,out0

setb 00h

clr 01h

clr 02h

clr 03h

out0:ret

key1:lcall dl10ms

jb p3.1,out1

setb 01h

clr 00h

clr 02h

clr 03h

out1:ret

key2:lcall dl10ms

jb p3.2,out2

setb 02h

clr 00h

clr 01h

clr 03h

out2:ret

key3:lcall dl10ms

jb p3.3,out3

setb 03h

clr 00h

clr 01h

clr 02h

out3:ret

dl512:mov r2,#0ffh

loop1:djnz r2,loop1

retdl10ms:mov r3,#14h

loop2:lcall dl512

djnz r3,loop2

retdl05s:mov r4,#0fh

loop3:lcall dl25ms

djnz r4,loop3

retdl25ms:mov r5,#0ffh

loop4:lcall keywork

djnz r5,loop4

retend

簡述基於89c51的8 8LED點陣屏使用方法

最近弄了一塊32 64的led點陣屏,想做個萬年曆的.發現不會驅動,我去。遂拿起放了很久的8 8led點陣來耍耍。話歸正題,此次試驗用89c51 74hc595兩塊 1塊8 8led點陣 首先關於74hc595的驅動,就不多說了。參考 關於8 8點陣 首先要解決的是關於引腳順序的問題 如圖,阿拉伯數...

89C51和89S51的區別

89c51和89s51的區別 很多初學51微控制器的會有這樣的問題 at89s51是什麼?書上和網路教程上可都是8051,89c51等!沒聽說過有89s51 這 裡,初學者要澄清微控制器實際使用方面的乙個產品概念,mcs 51微控制器是美國inte公司於1980年推出的產品,典型產品有 8031 內...

基於89c51晶元的開發 搶答器

搶答器簡介 總共有8個按鈕,其中7個按鈕給選手使用,1個按鈕給主持人使用,當1位選手按下按鈕後,對應的led燈將會變亮,同時靜態數碼管上會顯示該名選手的號碼,另外6位選手無論怎麼按按鈕都不會發生改變 只有通過主持人手中的復位按鈕才會使led燈熄滅,並且靜態數碼管上數字消失。include sbit ...