历史上的今天
今天是:2025年01月26日(星期日)
2018年01月26日 | HT48R50A的 LCD字符显示+KEY按键处理示例程序
2018-01-26 来源:eefocus

; ********************************************
; Function : LCD字符显示+KEY按键处理示例程序 *
; MICroProcessor : HT48R50A-1/28SKDIP-A *
; Author: www.picavr.com *
; Crystal : 4MHz *
; ********************************************
#INCLUDE HT48R50A-1.INC
LCD_DATA EQU PC
LCD_DATA_CTRL EQU PCC
LCD_CTRL EQU PB
LCD_CTRL_CTRL EQU PBC
E EQU 1
RS EQU 0
;------------------------------------------------------------
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]
;------------------------------------------------------------
CODE .SECTION AT 00H ’CODE’
ORG 00H
JMP START
ORG 0CH
JMP TIMER1
ORG 20H
START:
MOV A,01111111B
MOV PAC,A
CALL LCD_RESET
MOV A,OFFSET LCD_MESSAGE_1
MOV TBLP,A
CALL LCD_DISPLAY
MOV A,09H
MOV INTC,A
MOV A,80H
MOV TMR1C,A
FIRST_TIME:
MOV A,PA
AND A,00010000B
SUB A,00010000B
SZ ACC
JMP FIRST_TIME
PRESS_ANY_KEY:
MOV A,OFFSET LCD_MESSAGE_2
MOV TBLP,A
CALL LCD_DISPLAY
ANY_KEY:
MOV A,PA
AND A,00010000B
SUB A,00010000B
SZ ACC
JMP ANY_KEY
MOV A,PA
AND A,00001111B
MOV DATA,A
SUB A,09H
SZ ACC
JMP NEXT_CHECK
JMP START
NEXT_CHECK:
MOV A,DATA
SUB A,08H
SZ ACC
JMP PLAY_MONOTONY
JMP PLAY_A_SONG
PLAY_MONOTONY:
CALL MONOTONY
JMP ANY_KEY
PLAY_A_SONG:
MOV A,OFFSET LCD_MESSAGE_3
MOV TBLP,A
CALL LCD_DISPLAY
CLR COUNTER
PLAY_LOOP:
MOV A,OFFSET SONG_DATA
ADD A,COUNTER
MOV TBLP,A
TABRDL DATA
DEC DATA
CALL MONOTONY
INC COUNTER
MOV A,COUNTER
SUB A,4BH
SZ ACC
JMP PLAY_LOOP
JMP PRESS_ANY_KEY
RET
;------------------------------------------------------------
TIMER1:
CPL PA
RETI
;------------------------------------------------------------
MONOTONY PROC
MOV A,OFFSET MUSIC_DATA
ADD A,DATA
MOV TBLP,A
TABRDL DATA
MOV A,DATA
MOV TMR1L,A
MOV A,TBLP
ADD A,08H
MOV TBLP,A
TABRDL DATA
MOV A,DATA
MOV TMR1H,A
SET TMR1C.4
CALL DELAY_LONG
CLR TMR1C.4
RET
MONOTONY ENDP
;------------------------------------------------------------
LCD_RESET PROC
CLR LCD_DATA_CTRL
CLR LCD_CTRL_CTRL
CLR LCD_DATA
CLR LCD_CTRL
MOV A,00110011B ;STEP 0
MOV DATA,A ;LCD RESET
CALL TRANSFER ;
MOV A,00110010B ;SETP 1
MOV DATA,A ;FUNCTION SET
CALL TRANSFER ;
MOV A,00001100B ;STEP 2
MOV DATA,A ;DISPLAY TURN ON
CALL TRANSFER ;
MOV A,00000001B ;STEP 3
MOV DATA,A ;DISPLAY CLEAN
CALL TRANSFER ;
CALL DELAY ;DELAY SOME TIME
MOV A,00000110B ;STEP 4
MOV DATA,A ;ENTRY MODE SET
CALL TRANSFER ;
RET
LCD_RESET ENDP
;------------------------------------------------------------
LCD_DISPLAY PROC
MOV A,10000000B ;STEP 1
MOV DATA,A ;DD RAM ADDRESS SET
CALL TRANSFER ;FIRST LINE
MOV A,10H ;STEP 2-1
MOV COUNTER,A ;WRITE DATA TO DD RAM
FIRST_LINE:
CLR LCD_CTRL.RS
MOV A,00011100B ;STEP 2-2
MOV DATA,A ;DISPLAY/CURSOR
CALL TRANSFER ;SHIFT
SET LCD_CTRL.RS
TABRDL DATA
CALL TRANSFER
CALL DELAY
INC TBLP
SDZ COUNTER
JMP FIRST_LINE
CLR LCD_CTRL.RS
MOV A,11000000B ;STEP 3
MOV DATA,A ;DD RAM ADDRESS SET
CALL TRANSFER ;SECOND LINE
MOV A,10H ;STEP 4-1
MOV COUNTER,A ;WRITE DATA TO DD RAM
SECOND_LINE:
CLR LCD_CTRL.RS
MOV A,00011000B ;STEP 4-2
MOV DATA,A ;DISPLAY/CURSOR
CALL TRANSFER ;SHIFT
SET LCD_CTRL.RS
TABRDL DATA
CALL TRANSFER
CALL DELAY
INC TBLP
SDZ COUNTER
JMP SECOND_LINE
CLR LCD_CTRL.RS
RET
LCD_DISPLAY ENDP
;------------------------------------------------------------
TRANSFER PROC
SWAP DATA
MOV A,DATA
MOV PC,A
CALL WRITE
SWAP DATA
MOV A,DATA
MOV PC,A
CALL WRITE
RET
TRANSFER ENDP
;------------------------------------------------------------
WRITE PROC
SET LCD_CTRL.E
CLR LCD_CTRL.E
MOV A,0FFH
MOV DELAY_COUNTER_1,A
WRITE_WAIT:
SDZ DELAY_COUNTER_1
JMP WRITE_WAIT
RET
WRITE ENDP
;------------------------------------------------------------
DELAY PROC
MOV A,0A0H
MOV DELAY_COUNTER_1,A
MOV DELAY_COUNTER_2,A
DELAY_WAIT:
SDZ DELAY_COUNTER_2
JMP DELAY_WAIT
SDZ DELAY_COUNTER_1
JMP DELAY_WAIT
RET
DELAY ENDP
;------------------------------------------------------------
DELAY_LONG PROC
MOV A,003H
MOV DELAY_COUNTER_1,A
MOV DELAY_COUNTER_2,A
MOV DELAY_COUNTER_3,A
DELAY_LONG_WAIT:
SDZ DELAY_COUNTER_3
JMP DELAY_LONG_WAIT
SDZ DELAY_COUNTER_2
JMP DELAY_LONG_WAIT
SDZ DELAY_COUNTER_1
JMP DELAY_LONG_WAIT
RET
DELAY_LONG ENDP
;------------------------------------------------------------
ORG 0F00H
LCD_MESSAGE_1: ;[LCD 4 BITS DATA ]
;[TRANSFER TEST OK]
DC 4CH,43H,44H,20H,34H,20H,42H,49H
DC 54H,53H,20H,44H,41H,54H,41H,20H
DC 54H,52H,41H,4EH,53H,46H,45H,52H
DC 20H,54H,45H,53H,54H,20H,4FH,4BH
LCD_MESSAGE_2: ;[ MINI PIANO ]
;[ PRESS ANY KEY! ]
DC 20H,20H,20H,4DH,49H,4EH,49H,20H
DC 50H,49H,41H,4EH,4FH,20H,20H,20H
DC 20H,50H,52H,45H,53H,53H,20H,41H
DC 4EH,59H,20H,4BH,45H,59H,21H,20H
LCD_MESSAGE_3: ;[ PLAY MUSIC ]
;[ JUST A MOMENT! ]
DC 20H,20H,20H,50H,4CH,41H,59H,20H
DC 4DH,55H,53H,49H,43H,20H,20H,20H
DC 20H,4AH,55H,53H,54H,20H,41H,20H
DC 4DH,4FH,4DH,45H,4EH,54H,21H,20H
MUSIC_DATA:
DC 043H,0B1H,009H,033H
DC 083H,0C7H,005H,023H
DC 0FCH,0FCH,0FDH,0FDH
DC 0FDH,0FDH,0FEH,0FEH
SONG_DATA:
DC 06H,06H,05H,06H,05H,03H
DC 05H,03H,03H,02H,03H,03H
DC 02H,02H,01H,02H,02H,05H
DC 05H,03H,03H,02H,03H,03H
DC 06H,06H,05H,06H,05H,03H
DC 04H,04H,04H,03H,02H,03H,03H
DC 05H,05H,05H,05H,05H,07H
DC 06H,06H,06H,06H,05H,06H,06H
DC 08H,08H,08H,07H,05H
DC 06H,06H,06H,06H,05H,06H,05H,03H
DC 05H,05H,05H,05H,05H,07H
DC 06H,06H,06H,06H,05H,06H
;------------------------------------------------------------
END
史海拾趣
|
豪华的单片机开发系统498元 可稳定视频输出的: S3C2410 ARM9开发板780元DSP5402学习开发板II200元 暑期大优惠:S3C44B0开发板(标准版)350元 单片机以太网开发板 180元 DSP5402学习开发板II200元 LABTOOL-48UXP &nb ...… 查看全部问答> |
|
1、输入端与输出端的边线应避免相邻平行, 以免产生反射干扰。必要时应加地线隔离;两相邻层的布线要互相垂直,平行容易产生寄生耦合。 2、地线>电源线>信号线,通常信号线宽为:8mil~12mil;电源线为50mil~100mil。对数字电路 ...… 查看全部问答> |
|
EVC中是不是不支持settimer的SLIDER_TIMER参数?? EVC中是不是不支持settimer的SLIDER_TIMER参数?? mSliderTimer = SetTimer(SLIDER_TIMER, 100, NULL); 报错是:error C2065: \'SLIDER_TIMER\' : undeclared identifier… 查看全部问答> |
|
我写了一个很简单的程序,窗口上就两个按钮,用于动态分配和释放内存.打开WinCE.net的SystemProperties的Memory选项卡查看内存情况,发现分配可以,但按了释放内存的按钮却不能释放内存,不知原因,望高手指点!… 查看全部问答> |
|
报名参与:『ADI实验室电路DIY大赛』正式启动!https://bbs.eeworld.com.cn/thread-293726-1-1.html ADI实验室电路品种繁多,涉及面很广,如何选择合适的DIY项目可能是件容易令人困扰的事,但深究起来,其实可玩性是很大的,从今天开始,我将陆续 ...… 查看全部问答> |
|
大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败 如题,下面一段程序中,DeviceIoControl访问OID_802_11_BSSID_LIST老是失败(见下面红色),也就是说bResult一直等于0;为什么?请教牛人!!!可能的问题出现在哪?为什么第二个DeviceIoControl失败?#include \"stdafx.h\"#include <windows.h ...… 查看全部问答> |
|
卓跃教育发现随着采用Android系统的谷歌手机、平板电脑等产品逐渐扩大市场占有率,Android平台人才的缺口日益显现。据业内统计,目前国内的3G研发人才缺口有三、四百万,其中Android研发人才缺口至少30万。&n ...… 查看全部问答> |




