(玩電子) 電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

HOLTEK單片機-8LED霹靂燈

作者:佚名   來源:本站原創   點擊數:x  更新時間:2012年01月02日   【字體:

功能說明:

HT48F49E控制8個LED構成的霹靂燈

介紹:

本例以 HT48F49E 為例,模擬流水燈的功能,用 LED 顯示輸出。PA 口每一位輸出接一個   LED,串聯一個470Ω電阻到地,即可完成初步電路。

通過這個例子,用戶可以了解到 HT48XX 單片機輸入輸出口的基本用法。

電路設計:

PA0-PA7 用作輸出,每一位連接一個電阻來控制一個 LED。通過左移(RLC)、右移(RRC)指令來控制點亮的 LED 左右移動。電路圖如下:

 
完整版本的源程序下載地址: http://www.rchszg.icu/f/htpld.rar  

程序:

#include HT48F49E.inc

;-------------------------------

data .section 'data'                    ;定義數據寄存器

count1 db ?                              ;延時計數器0

count2 db ?                              ;延遲計數器1

lamp   db ?                             ;亮燈狀態記錄器

;-------------------------------

code .section at 0 'code'           ;程序段

   org 00h

    jmp start                               ;主程序開始

start:

    mov a,0;(1)

    mov pac,a                            ;PA口設為輸出

    cpl acc                                 ;ACC取反(為0FFH)

    mov pa,a                              ;設定PA口初始狀態

    mov a,1;(2)

    mov lamp,a           ;亮燈狀態值送到亮燈狀態記錄器

llamp:               ;亮燈左移循環

    mov a,lamp           ;累加器的值送到亮燈狀態記錄器

    cpl acc             ;累加器值取反

    mov pa,a          ;點亮與亮燈狀態記錄器相對應的燈

    call delay;(3) ;調用延時子程序

    clr c                  ;清除進位標志

    rlc lamp;(4)     ;亮燈狀態記錄器值左移一位

    sz lamp            ;判斷亮燈狀態記錄器是否為0

    jmp llamp;(5)    ;如果不是就繼續循環

    rrc lamp;(6)       ;如果是,亮燈狀態記錄器值右移一位

rlamp:                   ;亮燈右移循環

    mov a,lamp           ;將亮燈狀態記錄器值送到累加器

cpl acc             ;累加器值取反

    mov pa,a          ;點亮與亮燈狀態記錄器相對應的燈

    call delay          ;調用延時子程序

    clr c                  ;清除進位標志

    rrc lamp;(7)       ;亮燈狀態記錄器值右移一位

    sz lamp            ;判斷亮燈狀態記錄器是否為0

    jmp rlamp         ;如果不是就繼續循環

    rlc lamp            ;如果是,亮燈狀態記錄器值左移一位

    jmp llamp;(8)     ;跳到左移循環

    delay proc

    mov a,0ffh

    mov count1,a        ;定義延時計數器1的初值

    mov count2,a        ;定義延時計數器2的初值

d1:

    sdz count2            ;延時計數器2遞減,判斷是否為0

    jmp d1              ;如果不是,跳到d1循環

    sdz count1            ;延時計數器1遞減,判斷是否為0

    jmp d1              ;如果不是,跳到d1循環

    ret                    ;程序返回

    delay   endp            ;延時子程序結束

    end                  ;主程序結束

程序說明:

   這段小程序能夠使八個 LED 依次點亮,先從左向右,然后從右向左。程序開始時先設定輸入輸出口的狀態(1),在這里設定所有的口為輸出,將 PA 口的控制寄存器 PAC 設為 0。然后設定輸出的初始狀態,PA 口的第一位設為 0,點亮第一個 LED(2)。為了能觀察到 LED的閃亮,(3)設定了延時子程序。通過亮燈狀態記錄器和累加器,點亮的 LED 由左移指令控制左移(4)。為了判斷左移時所有的 LED 是否都依次點亮過,可以測試亮燈狀態記錄器是否為 0(5),如果是則恢復亮燈狀態記錄器左移時的終值(6),程序向下執行,控制 LED右移。這次用右移指令 RRC 來控制(7),重復類似的過程。最后同樣判斷亮燈狀態記錄器是否為 0,如果是,則表明右移時所有的 LED 都已經點亮過,程序跳到開始處,重新開始循環(8)。

發表評論】【告訴好友】【收藏此文】【關閉窗口

文章評論

相關文章

街机奔驰宝马电玩城 持有的股票融资融卷是利好了吗 分分彩012路实战技巧 德甲有哪些俱乐部 现在能做基金配资业务的银行 二四六天天好彩944cc精选 四海策略 熊猫棋牌下载送28 欢乐捕鱼人老版本 福州麻将金坎是什么样 浙江快乐彩走势图 遗漏 天天爱柳州麻将下载 捕鱼达人2手机版下载 免费股票推荐网站 智慧车联网是什么意思 股票推荐软件 棋牌游戏信誉最好