基于LCD字符++KEY按键显示程序

控制/MCU

1834人已加入

描述

 Function : LCD字符显示+KEY按键处理示例程序 * 

lcd



; MICroProcessor : HT48R50A-1/28SKDIP-A      * 

; Author:                      * 
; 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 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分