****************************************
; Function : 5X7 LED點陣+LCD顯示示例程序 *
; MICroProcessor : HT48R50A-1/28SKDIP-A *
; Author: www.picavr.com *
; Crystal : 4MHz *
; ********************************************
#INCLUDE HT48R50A-1.INC
LCD_DATA EQU PB
LCD_DATA_CTRL EQU PBC
LCD_CTRL EQU PC
LCD_CTRL_CTRL EQU PCC
E EQU 5
RS EQU 3
TIME_OUT EQU 11H
CLR_WDT EQU 22H
EXE_HALT EQU 33H
CLR_WDT1_WDT2 EQU 44H
;--------------------------------------------------------------------
DATA .SECTION AT 60H ’DATA’
DELAY_COUNTER_1 DB ? ;[60H]
DELAY_COUNTER_2 DB ? ;[61H]
DELAY_COUNTER_3 DB ? ;[62H]
DATA DB ? ;[63H]
COUNTER DB ? ;[64H]
WARM_RESET DB ? ;[65H]
DISPLAY_FLAG DB ? ;[66H]
;--------------------------------------------------------------------
CODE .SECTION AT 00H ’CODE’
ORG 00H
JMP START
START:
CLR PAC
CLR LCD_DATA_CTRL
CLR LCD_CTRL_CTRL
CLR LCD_DATA
CLR LCD_CTRL
;--------------------------------------------------------------------
MOV A,07H ; set watch dog time out
MOV WDTS,A ; 2.6 sec
CLR WDT ; clear watch dog timer
;--------------------------------------------------------------------
MOV A,WARM_RESET
MOV DISPLAY_FLAG,A
SUB A,TIME_OUT
SZ ACC
JMP CHK_CLR_WDT
JMP GO_TIME_OUT
CHK_CLR_WDT:
MOV A,WARM_RESET
MOV DISPLAY_FLAG,A
SUB A,CLR_WDT
SZ ACC
JMP CHK_EXE_HALT
JMP GO_CLR_WDT
CHK_EXE_HALT:
MOV A,WARM_RESET
MOV DISPLAY_FLAG,A
SUB A,EXE_HALT
SZ ACC
JMP CHK_CLR_WDT_12
JMP GO_EXE_HALT
CHK_CLR_WDT_12:
MOV A,WARM_RESET
MOV DISPLAY_FLAG,A
SUB A,CLR_WDT1_WDT2
SZ ACC
JMP BEGIN
JMP GO_CLR_WDT_12
BEGIN:
CALL LCD_RESET
CLR WDT ; clear watch dog timer
;--------------------------------------------------------------------
GO_TIME_OUT:
MOV A,CLR_WDT
MOV WARM_RESET,A
MOV A,OFFSET LCD_MESSAGE_1
MOV TBLP,A
CALL LCD_DISPLAY
TIME_OUT_LOOP:
CALL LED_DISPLAY
JMP TIME_OUT_LOOP
RET
;--------------------------------------------------------------------
GO_CLR_WDT:
MOV A,EXE_HALT
MOV WARM_RESET,A
MOV A,OFFSET LCD_MESSAGE_2
MOV TBLP,A
CALL LCD_DISPLAY
CLR_WDT_LOOP:
CALL LED_DISPLAY
JMP CLR_WDT_LOOP
RET
;--------------------------------------------------------------------
GO_EXE_HALT:
MOV A,CLR_WDT1_WDT2
MOV WARM_RESET,A
MOV A,OFFSET LCD_MESSAGE_3
MOV TBLP,A
CALL LCD_DISPLAY
EXE_HALT_LOOP:
CALL LED_DISPLAY
JMP EXE_HALT_LOOP
RET
;--------------------------------------------------------------------
GO_CLR_WDT_12:
MOV A,TIME_OUT
MOV WARM_RESET,A
MOV A,OFFSET LCD_MESSAGE_4
MOV TBLP,A
CALL LCD_DISPLAY
CLR_WDT_12_LOOP:
CALL LED_DISPLAY
JMP CLR_WDT_12_LOOP
RET
;--------------------------------------------------------------------
LED_DISPLAY PROC
SET PA
CALL DELAY
MOV A,OFFSET SEGMENT_DATA
MOV TBLP,A
MOV A,10H
MOV COUNTER,A
DISPLAY_START:
TABRDL DATA
MOV A,DATA
MOV PA,A
CALL DELAY
INC TBLP
MOV A,DISPLAY_FLAG
SUB A,CLR_WDT
SZ ACC
JMP LED_CLR_WDT12
CLR WDT
JMP DISPLAY_END
LED_CLR_WDT12:
MOV A,DISPLAY_FLAG
SUB A,CLR_WDT1_WDT2
SZ ACC
JMP LED_EXE_HALT
CLR WDT1
CLR WDT2
JMP DISPLAY_END
LED_EXE_HALT:
MOV A,DISPLAY_FLAG
SUB A,EXE_HALT
SZ ACC
JMP DISPLAY_END
HALT
DISPLAY_END:
SDZ COUNTER
JMP DISPLAY_START
RET
LED_DISPLAY ENDP
;--------------------------------------------------------------------
LCD_RESET PROC
MOV A,30H ; LCD reset , step 1
MOV LCD_DATA,A ;
CALL WRITE ;
CALL DELAY ; LCD reset , step 2
MOV A,30H ; LCD reset , step 3
MOV LCD_DATA,A ;
CALL WRITE ;
CALL DELAY ; LCD reset , step 4
MOV A,30H ; LCD reset , step 5
MOV LCD_DATA,A ;
CALL WRITE ;
MOV A,38H ; LCD setting , step 1
MOV LCD_DATA,A ; function set
CALL WRITE ;
MOV A,06H ; LCD setting , step 2
MOV LCD_DATA,A ; entry mode set
CALL WRITE ;
MOV A,01H ; LCD setting , step 3
MOV LCD_DATA,A ; display clear
CALL WRITE ;
CALL DELAY ;
MOV A,0EH ; LCD setting , step 4
MOV LCD_DATA,A ; display turn on
CALL WRITE ;
RET
LCD_RESET ENDP
;--------------------------------------------------------------------
LCD_DISPLAY PROC
MOV A,01H ; LCD setting , step 5
MOV LCD_DATA,A ; display clear
CALL WRITE ;
CALL DELAY ;
MOV A,80H ; LCD setting , setp 6
MOV LCD_DATA,A ; DD RAM address setting
CALL WRITE ; address = 00h (first line)
SET LCD_CTRL.RS ; LCD setting , step 7
MOV A,10H ; write data to DD RAM
MOV COUNTER,A
DISPLAY1:
TABRDL DATA
MOV A,DATA
MOV LCD_DATA,A
CALL WRITE
INC TBLP
SDZ COUNTER
JMP DISPLAY1
CLR LCD_CTRL.RS
MOV A,0C0H ; LCD setting , step 8
MOV LCD_DATA,A ; DD RAM address setting
CALL WRITE ; address = 40h (second line)
SET LCD_CTRL.RS ; LCD setting , step 9
MOV A,10H ; write data to DD RAM
MOV COUNTER,A
DISPLAY2:
TABRDL DATA
MOV A,DATA
MOV LCD_DATA,A
CALL WRITE
INC TBLP
SDZ COUNTER
JMP DISPLAY2
RET
LCD_DISPLAY ENDP
;--------------------------------------------------------------------
WRITE PROC
SET LCD_CTRL.E
CLR LCD_CTRL.E
MOV A,0FFH
MOV DELAY_COUNTER_1,A
WAIT:
SDZ DELAY_COUNTER_1
JMP WAIT
RET
WRITE ENDP
;--------------------------------------------------------------------
DELAY PROC
MOV A,003H
MOV DELAY_COUNTER_1,A
MOV DELAY_COUNTER_2,A
MOV DELAY_COUNTER_3,A
DELAY_WAIT:
SDZ DELAY_COUNTER_3
JMP DELAY_WAIT
SDZ DELAY_COUNTER_2
JMP DELAY_WAIT
SDZ DELAY_COUNTER_1
JMP DELAY_WAIT
RET
DELAY ENDP
;--------------------------------------------------------------------
ORG 0F00H
LCD_MESSAGE_1: ;[Now , watch dog ]
;[will be time out]
DC 4EH,6FH,77H,20H,2CH,20H,77H,61H
DC 74H,63H,68H,20H,64H,6FH,67H,20H
DC 77H,69H,6CH,6CH,20H,62H,65H,20H
DC 74H,69H,6DH,65H,20H,6FH,75H,74H
LCD_MESSAGE_2: ;[Without time out]
;[Because CLR WDT ]
DC 57H,69H,74H,68H,6FH,75H,74H,20H
DC 74H,69H,6DH,65H,20H,6FH,75H,74H
DC 42H,65H,63H,61H,75H,73H,65H,20H
DC 43H,4CH,52H,20H,57H,44H,54H,20H
LCD_MESSAGE_3: ;[Executing the ]
;[HALT instruction]
DC 45H,78H,65H,63H,75H,74H,69H,6EH
DC 67H,20H,74H,68H,65H,20H,20H,20H
DC 48H,41H,4CH,54H,20H,69H,6EH,73H
DC 74H,72H,75H,63H,74H,69H,6FH,6EH
LCD_MESSAGE_4: ;[Without time out]
;[CLR WDT1 & WDT2 ]
DC 57H,69H,74H,68H,6FH,75H,74H,20H
DC 74H,69H,6DH,65H,20H,6FH,75H,74H
DC 43H,4CH,52H,20H,57H,44H,54H,31H
DC 20H,26H,20H,57H,44H,54H,32H,20H
SEGMENT_DATA: ;7 SEGMENT DISPLAY DATA (COMMON ANODE)
DC 081H,0CFH,092H,086H ;0123
DC 0CCH,0A4H,0A0H,08FH ;4567
DC 080H,084H,088H,0E0H ;89AB
DC 0B1H,0C2H,0B0H,0B8H ;CDEF
;--------------------------------------------------------------------
END
上一篇:HT48R50A的 電源掉電模式示例程序
下一篇:HT48R50A的 LCD字符顯示+KEY按鍵處理示例程序
推薦閱讀
史海拾趣
在電子行業的發展過程中,技術創新始終是BROTHER公司的重要驅動力。公司注重研發投入,擁有一支高素質的研發團隊,不斷推出具有創新性和競爭力的新產品。同時,BROTHER還積極與高校、科研機構等合作,開展產學研合作,推動技術創新和產業升級。通過技術創新,BROTHER不僅提升了產品質量和性能,還降低了生產成本,提高了市場競爭力。
近年來,隨著電子行業的快速發展和市場競爭的加劇,Bay Linear Inc公司面臨著前所未有的挑戰。為了應對行業變革,公司進行了一系列戰略調整,包括優化產品結構、加強研發投入、拓展新興市場等。這些舉措有效地提升了公司的競爭力,使公司在激烈的市場競爭中保持了穩健的發展態勢。
隨著市場的不斷變化和競爭的加劇,艾華集團意識到,要想在行業中立足并取得長遠發展,必須走科技創新之路。于是,公司成立了多個研究院,專注于基礎材料、產品、工業裝備以及產品應用的研究。通過不斷的科技創新和產品升級,艾華集團成功研發出了耐超高紋波和耐超強沖擊電流的鋁電容器技術,這一技術在市場上獲得了廣泛認可,贏得了飛利浦、歐司朗、GE等世界知名照明客戶的青睞。
隨著產品技術的不斷提升,Crystalfontz America Inc公司開始積極拓展市場。公司通過與各大電子設備制造商建立合作伙伴關系,將產品應用于嵌入式系統、機架式服務器、儀器集群等領域。同時,公司還積極參加各類行業展會和技術交流活動,提升品牌知名度,吸引更多潛在客戶。這些舉措有效推動了公司市場份額的擴大和業務的快速增長。
ATC公司深知質量管理對于企業發展的重要性。因此,公司建立了嚴格的質量管理體系,從原材料的采購到產品的生產、檢測、包裝等環節都進行嚴格控制。此外,ATC公司還注重員工的培訓和教育,提升員工的質量意識和技能水平。這些措施確保了ATC公司產品的穩定性和可靠性,贏得了客戶的信任和好評。
福建國光新業科技股份有限公司,作為全球領先的聚合物片式疊層鋁電解電容器(MLPC)制造商,自成立之初便致力于國產高端被動元器件的技術開發與產品創新。面對高端電容器被國外廠商長期壟斷的局面,國光新業經過長期技術積累與研發,成功打破了國際壟斷,實現了MLPC電容器的國產替代。這一成就不僅填補了國內空白,還使公司在細分領域發明專利授權數量上躍居全球第一,榮獲多項國家級榮譽稱號。
AB控制系統中控制器和通訊模塊各自有自己的連接數上限,例如ControlLogix有250個連接上限,1756-CNB有64個,1756-ENBT有128個,請看問題: 1、假如我的系統有1個CPU,1個本地CNBR,5個遠程CNBR,是每個CNBR都有64個連接數的上限,還是這6個CNBR加 ...… 查看全部問答∨ |
|
最近在思考一個問題,就是有關SD卡升級的。 我看到過三星發布2442下的SD卡升級,但有個缺陷是只支持FAT格式的小容量卡,而且,在EBOOT里面去讀寫卡的block、sector,簡直有點復雜。 我在想,如果是FAT32格式的(現在基本上都是FAT32格式了)SD卡能 ...… 查看全部問答∨ |
|
軟件:evc4、platform builder5.0 問題: 1、在安裝了很多SDK后想卸掉一些不用的,可是卸載并刪除Windows CE Tools\\wce500\\下對應的SDK文件夾后,打開EVC工程后,發現該SDK選項還在, 如何根除該SDK?下圖是我卸載后X86_320_240仍 ...… 查看全部問答∨ |
|
昨天成都地區TI的FAE到我們公司來推廣M4,一樣對我拿到M4開發板比較震驚,據說整個中國地區只有20塊左右,他們培訓完也全部上交了,其實開始拿到M4開發板,個人覺得和M3比較起來除了外設比較多外其他差別不是太大,但是昨天和FAE聊了一下發現TI推出 ...… 查看全部問答∨ |
想用FPGA實現一個單道脈沖計數器,就是記錄脈沖峰值在某兩個電壓之間的脈沖數。大致思路是用兩個比較器構成雙限比較器。然后把比較器的輸出值值輸入到FGPA。一般的思路是把兩個信號異或,但是由于脈沖不是典型的沖擊信號,上升沿和下降沿不是垂直的 ...… 查看全部問答∨ |