; ********************************************
; Function : 電源掉電模式示例程序 *
; 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
;--------------------------------------------------------------------
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]
EXE_INT_FLAG DB ? ;[65H]
;--------------------------------------------------------------------
CODE .SECTION AT 00H ’CODE’
ORG 00
JMP START
ORG 04H
JMP INTERRUPT
ORG 0CH
JMP TIMER1
ORG 20H
START:
CLR LCD_DATA_CTRL
CLR LCD_CTRL_CTRL
CLR LCD_DATA
CLR LCD_CTRL
CLR PAC
CLR EXE_INT_FLAG
CALL LCD_RESET
MOV A,0BH
MOV INTC,A
MOV A,80H
MOV TMR1C,A
SLEEP:
MOV A,OFFSET LCD_MESSAGE_1
MOV TBLP,A
CALL LCD_DISPLAY
HALT
;--------------------------------------------------------------------
SIZ EXE_INT_FLAG
JMP PORT_7
JMP SLEEP
PORT_7:
MOV A,OFFSET LCD_MESSAGE_3
MOV TBLP,A
CALL LCD_DISPLAY
MOV A,OFFSET MUSIC_DATA
MOV TBLP,A
MOV A,08H
MOV COUNTER,A
PLAY_MUSIC:
TABRDL DATA
MOV A,DATA
MOV TMR1L,A
INC TBLP
TABRDL DATA
MOV A,DATA
MOV TMR1H,A
INC TBLP
SET TMR1C.4
CALL DELAY
SDZ COUNTER
JMP PLAY_MUSIC
CLR TMR1C.4
JMP SLEEP
RET
;--------------------------------------------------------------------
INTERRUPT:
MOV A,OFFSET LCD_MESSAGE_2
MOV TBLP,A
CALL LCD_DISPLAY
MOV A,10H
MOV COUNTER,A
MOV A,OFFSET SEGMENT_DATA
MOV TBLP,A
LOOP_INT:
TABRDL DATA
MOV A,DATA
MOV PA,A
CALL DELAY
INC TBLP
SDZ COUNTER
JMP LOOP_INT
SET PA
CLR INTC.4
SET EXE_INT_FLAG
RETI
;--------------------------------------------------------------------
TIMER1:
SZ PC.2
JMP OUTPUT_0
SET PC.2
JMP OUTPUT_END
OUTPUT_0:
CLR PC.2
OUTPUT_END:
RETI
;--------------------------------------------------------------------
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 , step 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
CLR LCD_CTRL.RS
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,03H
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: ;[Power Down mode!]
;[I am sleePINg..!]
DC 50H,6FH,77H,65H,72H,20H,44H,6FH
DC 77H,6EH,20H,6DH,6FH,64H,65H,21H
DC 49H,20H,61H,6DH,20H,73H,6CH,65H
DC 65H,70H,69H,6EH,67H,2EH,2EH,21H
LCD_MESSAGE_2: ;[INTB wake me up!]
;[Good morning sir]
DC 49H,4EH,54H,42H,20H,77H,61H,6BH
DC 65H,20H,6DH,65H,20H,75H,70H,21H
DC 47H,6FH,6FH,64H,20H,6DH,6FH,72H
DC 6EH,69H,6EH,67H,20H,73H,69H,72H
LCD_MESSAGE_3: ;[PA.7 wake me up!]
;[I love you baby ]
DC 50H,41H,2EH,37H,20H,77H,61H,6BH
DC 65H,20H,6DH,65H,20H,75H,70H,21H
DC 49H,20H,6CH,6FH,76H,65H,20H,79H
DC 6FH,75H,20H,62H,61H,62H,79H,20H
SEGMENT_DATA: ;7 SEGMENT 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
MUSIC_DATA: ;MUSIC DATA
DC 043H,0FCH,0B1H,0FCH
DC 009H,0FDH,033H,0FDH
DC 083H,0FDH,0C7H,0FDH
DC 005H,0FEH,023H,0FEH
;--------------------------------------------------------------------
END
上一篇:HT48R50A的 93C46示例程序
下一篇:HT48R50A的 5X7 LED點陣+LCD顯示示例程序
推薦閱讀
我的嵌入式產品用的DM9000a, 用一臺電腦能ping 通(偶爾丟包),不斷電情況下,切換成另一臺電腦,有時能ping通,有時ping 不通,并且10M/100M以及LINK燈滅,怎么回事啊?謝謝 … 查看全部問答∨ |
在將CE6.0的觸摸屏驅動移植到FS2410時,編譯通過了,但卻得不到有效的觸摸信息。得到的部分調試信息如下: 11941 PID:400002 TID:b1000a RELFSD: Opening file FS2410Touch.dll from desktop PB Debugger Loaded symbols for \'C:\\W ...… 查看全部問答∨ |
如何把 51 單片機中的 .c 文件和 .h 文件 和 VC寫的工程文件做成庫 問題一: 在 51單片機 中用 C 寫的 .c 和.h 文件,如何做成庫呢?51的編譯器是 IAR 問題二: 如何把VC寫的一個 C 工程文件做成庫呢? 問題三: 老大只說讓我把上面這兩種 C 語言寫的函數和文件做成庫,應該是做成 lib 庫呢,還是做成 dll 庫呢 ...… 查看全部問答∨ |
參考了一些桌面上的方案,發現在CE4.2下面都用不了,要么是mutex函數不支持多個參數,要么就是用不了Process類,大家能不能幫忙想想辦法啊,看怎么實現判斷程序是否運行的效果,如果已經運行了就不要再運行。… 查看全部問答∨ |
正在開發wince下的驅動,能否通過應用程序來動態調整TFT的分辨率?比如說從640x480調整到320x240,調整過程中WINCE不能重新啟動? 我發現可以通過應用程序來進行屏幕旋轉,有沒有調整分辨率的函數? 謝謝… 查看全部問答∨ |
使用的芯片是413 采用TA1的捕獲模式從P1.2口測量頻率周期,在測試板上使用按鍵模擬待測脈沖信號,結果發現按一次鍵會發生很多次捕獲中斷,為查明中斷源有查TAIV,結果令人差異。代碼如下: #include "msp430x41x.h" unsigned int m=1,l=1,o=1 ...… 查看全部問答∨ |