|
本帖最後由 fatzeros 於 2012-7-6 05:17 PM 編輯
先感謝各位先進的指導,
上一篇最基礎的方式寫七段顯視器測試程序,求精簡!
這一次參考了實驗板的程式,
修改出來這一次的實驗程式,
一樣可以使用MCU 8051 IDE模擬,
這一次使用查表的方式來對七段顯視器下顯視的指令,以下為組合語言原始碼:
;/*----------------------------------------------------------------------------------------------
; 名稱:STC_15F204EA七段顯示器測試程序
; 編寫:沈大胖
; 日期:2012/07/06_V2
; 修改:
; 內容:使用STC_15F204EA測試共陽七段顯示器,
; 使用P2,I/O口為七段之A~DP
; 使用P3.1為共陽控制腳
; 使用查表方式顯示
; 模擬前,請先LOAD STC_15F204EA_7SEG_LED_20120706_V2.vhc, VirtualHW->load->STC_15F204EA_7SEG_LED_20120706_V2.vhc
; 按「F2」啟動模擬,按「F6」開始模擬
;-----------------------------------------------------------------------------------------------*/
;腳位功能定義
SMG_LED EQU P3.1 ;定義七段顯視器控制腳為P3.1
;程序開始
START:
ORG 0000H
AJMP MAIN
;數據段
ORG 0100H
TABLE: ;定義七段顯視器顯的方式
DB 0feH,0fdH,0fbH,0f7H,0efH,0dfH,0bfH,07fH ;A,B,C,D,E,F,G,DP
DB 040h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h,080h,090h ;0DP,1,2,3,4,5,6,7,8,9
;主程序段
ORG 0200H
MAIN:
CLR SMG_LED ;初始七段顯視器,使SMG_LED為低電位導通
;循環功能段
CYCLE:
MOV R7,#18 ;初始暫存器R7為X,表示使用TABLE表之前X項之數值
MOV DPTR,#TABLE ;初始DPTR為數據段之數值
DISPLAY:
CLR A ;清除累加器
MOVC A,@A+DPTR ;指定累加器為累加器加上循環功能段之DPTR(TABLE表內之數值,由第一個開始)
MOV P2,A ;指定P2_I/O腳位為累加器之數值,即七段顯視器依TABLE表內之數值遞增顯視
ACALL DELAY ;呼叫延遲程序,使七段顯視器顯視時間加長
INC DPTR ;遞增DPTR的顯視TABLE表內之數值
DJNZ R7,DISPLAY ;遞減暫存器R7的值,如不為0則跳至DISPLAY段
AJMP CYCLE ;遞減暫存器R7的值,如為0則跳至CYCLE段
;使用遞減暫存器R5及R6達成延時效果,暫存器R4為遞減循環次數
DELAY:
MOV R4,#1 ;暫存器R4,循環A次
D1:
MOV R5,#1 ;D1段,暫存器R5指定初始值為B,最大至255
D2:
MOV R6,#1 ;D2段,暫存器R6指定初始值為C,最大至255
DJNZ R6,$ ;遞減暫存器R6初始值C
DJNZ R5,D2 ;遞減暫存器R5初始值B,如不為0時則跳至D2段
DJNZ R4,D1 ;遞減暫存器R4初始值A,如不為0時則跳至D1段
RET ;回呼叫點
END
附上專案檔:
STC_15F204EA_七段顯示器測試.zip
(27.33 KB, 下載次數: 62)
謝謝大家收看!
以下是心得:
學程式語言,真的是要自己一個字一個字KEY,才有FU啊!
另外,再一次感謝先進們不吝指導! |
|