HOLTEK單片機(jī)-8LED霹靂燈
HT48F49E控制8個(gè)LED構(gòu)成的霹靂燈
本文引用地址:http://m.butianyuan.cn/article/201611/323312.htm介紹:
本例以 HT48F49E 為例,模擬流水燈的功能,用 LED 顯示輸出。PA 口每一位輸出接一個(gè) LED,串聯(lián)一個(gè)470Ω電阻到地,即可完成初步電路。
通過(guò)這個(gè)例子,用戶可以了解到 HT48XX 單片機(jī)輸入輸出口的基本用法。
電路設(shè)計(jì):
PA0-PA7 用作輸出,每一位連接一個(gè)電阻來(lái)控制一個(gè) LED。通過(guò)左移(RLC)、右移(RRC)指令來(lái)控制點(diǎn)亮的 LED 左右移動(dòng)。電路圖如下:
完整版本的源程序下載地址:http://www.51hei.com/f/htpld.rar
程序:#include HT48F49E.inc;-------------------------------data .section data ;定義數(shù)據(jù)寄存器count1 db ? ;延時(shí)計(jì)數(shù)器0count2 db ? ;延遲計(jì)數(shù)器1lamp db ? ;亮燈狀態(tài)記錄器;-------------------------------code .section at 0 code ;程序段org 00hjmp start ;主程序開(kāi)始start:mov a,0;(1)mov pac,a ;PA口設(shè)為輸出cpl acc ;ACC取反(為0FFH)mov pa,a ;設(shè)定PA口初始狀態(tài)mov a,1;(2)mov lamp,a ;亮燈狀態(tài)值送到亮燈狀態(tài)記錄器llamp: ;亮燈左移循環(huán)mov a,lamp ;累加器的值送到亮燈狀態(tài)記錄器cpl acc ;累加器值取反mov pa,a ;點(diǎn)亮與亮燈狀態(tài)記錄器相對(duì)應(yīng)的燈call delay;(3) ;調(diào)用延時(shí)子程序clr c ;清除進(jìn)位標(biāo)志rlc lamp;(4) ;亮燈狀態(tài)記錄器值左移一位sz lamp ;判斷亮燈狀態(tài)記錄器是否為0jmp llamp;(5) ;如果不是就繼續(xù)循環(huán)rrc lamp;(6) ;如果是,亮燈狀態(tài)記錄器值右移一位rlamp: ;亮燈右移循環(huán)mov a,lamp ;將亮燈狀態(tài)記錄器值送到累加器cpl acc ;累加器值取反mov pa,a ;點(diǎn)亮與亮燈狀態(tài)記錄器相對(duì)應(yīng)的燈call delay ;調(diào)用延時(shí)子程序clr c ;清除進(jìn)位標(biāo)志rrc lamp;(7) ;亮燈狀態(tài)記錄器值右移一位sz lamp ;判斷亮燈狀態(tài)記錄器是否為0jmp rlamp ;如果不是就繼續(xù)循環(huán)rlc lamp ;如果是,亮燈狀態(tài)記錄器值左移一位jmp llamp;(8) ;跳到左移循環(huán)delay procmov a,0ffhmov count1,a ;定義延時(shí)計(jì)數(shù)器1的初值mov count2,a ;定義延時(shí)計(jì)數(shù)器2的初值d1:sdz count2 ;延時(shí)計(jì)數(shù)器2遞減,判斷是否為0jmp d1 ;如果不是,跳到d1循環(huán)sdz count1 ;延時(shí)計(jì)數(shù)器1遞減,判斷是否為0jmp d1 ;如果不是,跳到d1循環(huán)ret ;程序返回delay endp ;延時(shí)子程序結(jié)束end ;主程序結(jié)束
程序說(shuō)明:
這段小程序能夠使八個(gè) LED 依次點(diǎn)亮,先從左向右,然后從右向左。程序開(kāi)始時(shí)先設(shè)定輸入輸出口的狀態(tài)(1),在這里設(shè)定所有的口為輸出,將 PA 口的控制寄存器 PAC 設(shè)為 0。然后設(shè)定輸出的初始狀態(tài),PA 口的第一位設(shè)為 0,點(diǎn)亮第一個(gè) LED(2)。為了能觀察到 LED的閃亮,(3)設(shè)定了延時(shí)子程序。通過(guò)亮燈狀態(tài)記錄器和累加器,點(diǎn)亮的 LED 由左移指令控制左移(4)。為了判斷左移時(shí)所有的 LED 是否都依次點(diǎn)亮過(guò),可以測(cè)試亮燈狀態(tài)記錄器是否為 0(5),如果是則恢復(fù)亮燈狀態(tài)記錄器左移時(shí)的終值(6),程序向下執(zhí)行,控制 LED右移。這次用右移指令 RRC 來(lái)控制(7),重復(fù)類似的過(guò)程。最后同樣判斷亮燈狀態(tài)記錄器是否為 0,如果是,則表明右移時(shí)所有的 LED 都已經(jīng)點(diǎn)亮過(guò),程序跳到開(kāi)始處,重新開(kāi)始循環(huán)(8)。
評(píng)論