微控制器學習筆記 點亮流水燈

2021-09-26 07:39:33 字數 1770 閱讀 4126

我們前面學習了如何建立工程,現在就來實現乙個流水燈吧。

一、八位發光二極體

led燈原理圖

下圖為led燈的原理圖:

led燈陽極:p0[7…0]

led燈陰極:共陰極,p2.3非

點亮led燈的條件

通電:p0=0xff

p2.3=1

模式:推挽輸出

在實驗板中,點亮led燈除了需要通電,還需要設定i/o口模式,可以通過設定暫存器p0m0[7…0]和p0m1[7…0]的值來實現,每乙個led燈的i/o模式由p0m1和p0m0對應一位的組合決定(p0m1、p0m0共同控制了p0的i/o模式)

high

lowi/o模式00

準雙向口,灌電流可達到20ma01

推挽輸出(強上拉輸出,需加限流電阻)10

輸入高阻11

開漏模式,內部上拉電阻斷開

p0m1和p0m0組合決定了8位led的i/o模式,如下圖:

二、時間設定

四種週期

振盪週期:晶體的振盪器週期(1/12us)

狀態週期:振盪週期二分頻得到的脈衝訊號。前半部分和後半部分成為p1和p2,p1有效時完成算術路基運算,p2有效時完成內部暫存器的訪問傳輸。

機器週期:完成乙個基本操作所需要的時間成為機器週期。乙個及其週期包含6個狀態週期(12個振盪週期,即1us)

指令週期:cpu執行一條指令需要的時間。一般為1-4個機器週期。

軟體延時函式

延時:可以通過1ms可以執行多少條指令來定義函式,執行空操作來實現時間延遲。

stc-isp延時函式:

三、流水燈實現

init()函式:設定暫存器的值

sbit led_sel=p2^3;

//p2^3----e3

uchar led;

void

init()

描述:p0m1、p0m0設定led燈的i/o模式為推挽輸出,p2m1、p2m0設定p2.3的i/o模式,設定p2.3=1使得led燈陰極姐低電平。這樣led燈在p0為0xff時就可以全亮了

delay200ms()函式

void

delay200ms()

while

(--j);}

while

(--i)

;}

main()函式:控制led燈左移

void main(

)}

描述:每隔200ms,p0的值左移一位,燈只有最左邊的燈亮時,p0=0x01,即只有最右邊的燈亮。這樣,led燈就可以以自迴圈左移實現流水燈啦。

第二篇微控制器學習筆記完結,cheers ! ??

微控制器 流水燈

基礎知識 1.c語言預處理命令 define a p0 注意後邊不用加分號 在 中使用p0口時,可以直接用a代替,防止修改埠時大面積修改 2.迴圈左移和右移函式 crol a,b 迴圈左移函式,a是左移的值,b是左移的位數。包含在intrins.h庫函式裡面。cror a,b 迴圈右移函式,原理同上...

微控制器流水燈

上篇給大家分享了單個led的點亮與閃爍,這次給大家分享一下怎樣用微控制器控制led實現流水燈效果。所需元器件如下 stc89c52rc晶元 1 10k電阻 1 330 電阻 8 10uf 電解電容 1 22pf 瓷片電容 2 12mhz晶振 1 按鍵 1 led燈 8 電路圖如下 如下 led流水燈...

微控制器流水燈

微控制器c51流水燈實驗 1 基本的流水燈 設定延時函式使led燈依次有間隔的亮起 軟體延時採用程式delay j 可調整延時時間。2 簡單鍵控的流水燈。實現思路 由於是按下鍵不鬆手,鍵值一直保留,所以判斷if k10 即是按下k1,採用if k10 或if k1 1 後接while 1 迴圈的模式...