功能說明:
HT48F49E控制8個LED構成的霹靂燈
介紹:
本例以 HT48F49E 為例,模擬流水燈的功能,用 LED 顯示輸出。PA 口每一位輸出接一個 LED,串聯一個470Ω電阻到地,即可完成初步電路。
通過這個例子,用戶可以了解到 HT48XX 單片機輸入輸出口的基本用法。
電路設計:
PA0-PA7 用作輸出,每一位連接一個電阻來控制一個 LED。通過左移(RLC)、右移(RRC)指令來控制點亮的 LED 左右移動。電路圖如下:
完整版本的源程序下載地址: http://www.zg4o1577.cn/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)。