历史上的今天
返回首页

历史上的今天

今天是:2025年01月26日(星期日)

2018年01月26日 | HT48R50A的 LCD字符显示+KEY按键处理示例程序

2018-01-26 来源:eefocus

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


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


推荐阅读

史海拾趣

CQR SECURITY公司的发展小趣事

CQR SECURITY公司最初是一家专注于网络安全技术研发的小型创业公司。在创始人的带领下,公司团队攻克了一系列网络安全难题,开发出了具有高度创新性的安全协议。这一技术突破迅速吸引了业界关注,多家大型企业开始与CQR合作,共同推动产品的商业化应用。随着合作的深入,CQR逐渐在电子安全领域建立了自己的地位,最终发展成为一家业内知名的安全解决方案提供商。

DAYLIGHT公司的发展小趣事

DAYLIGHT公司成立于XX年,由一群富有远见卓识的电子工程师和投资者共同创立。当时,电子行业正经历着快速的技术革新,市场对高效、可靠的电子产品需求日益增加。DAYLIGHT公司凭借其独特的技术优势和创新能力,成功开发出一系列高性能的电子产品,迅速在市场中立足。

Cardinal Components公司的发展小趣事

2016年,Taitien收购了Cardinal Components,这一收购为公司带来了新的发展机遇和资源支持。随后,在2021年,Cardinal加入了Pletronics,进一步扩大了其在电子行业的影响力。这些收购与合作不仅为公司带来了更多的业务机会,也促进了其在技术研发和市场拓展方面的进步。

这五个故事只是Cardinal Components在电子行业发展中的一部分缩影。作为一家具有深厚历史底蕴和强大技术实力的公司,Cardinal将继续在电子行业中发挥重要作用,为行业的进步和发展做出更多贡献。

爱浦电子(AIPULNION)公司的发展小趣事

随着公司业务的不断扩展,爱浦电子于XXXX年成立了广州优联电气科技有限公司作为其分支机构。这一举措不仅进一步扩大了公司的业务范围和市场影响力,还为公司提供了更多的发展机遇和合作伙伴。广州优联电气科技有限公司在爱浦电子的业务开拓、经营及配套服务方面发挥了重要作用,推动了公司整体业务的快速发展。

这五个故事只是爱浦电子发展起来的一部分缩影,它们展现了公司在技术创新、市场拓展、服务升级、创新引领以及分支机构成立等方面的努力和成就。正是这些不懈的努力和持续的进步,使得爱浦电子在电子行业中脱颖而出,成为一家备受瞩目的高新技术企业。

Akahane Electronics Ind Corp公司的发展小趣事

随着全球市场的不断扩大,Akahane意识到单打独斗难以为继,于是积极寻求与国际同行的合作。通过与欧美知名电子企业建立战略合作关系,Akahane不仅获得了先进的技术支持,还成功打入国际市场,进一步提升了品牌影响力。同时,公司还积极参与国际电子行业的交流活动,学习借鉴先进的管理经验和市场策略,为公司的长远发展奠定了坚实基础。

HiRel Connectors Inc公司的发展小趣事
定期检查电源插头、插座、电源线和电源适配器等部件的连接情况和磨损程度。

问答坊 | AI 解惑

高性能模/数转换器AD6645及其应用

豪华的单片机开发系统498元 可稳定视频输出的: S3C2410 ARM9开发板780元DSP5402学习开发板II200元 暑期大优惠:S3C44B0开发板(标准版)350元 单片机以太网开发板  180元 DSP5402学习开发板II200元 LABTOOL-48UXP &nb ...…

查看全部问答>

LINUX

电子教案,需要的快下哦…

查看全部问答>

PCB布线的几点经验

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…

查看全部问答>

EVC环境下为什么delete对象无法释放内存

我写了一个很简单的程序,窗口上就两个按钮,用于动态分配和释放内存.打开WinCE.net的SystemProperties的Memory选项卡查看内存情况,发现分配可以,但按了释放内存的按钮却不能释放内存,不知原因,望高手指点!…

查看全部问答>

注册公司的步骤

注册公司的步骤一、选择公司的形式: 普通的有限责任公司,最低注册资金3万元,需要2个或2个以上的股东, 从06年1月起新的公司法规定,允许1个股东注册有限责任公司,这种特殊的有限责任公司又称“一人有限公司”(但公司名称中不会有“一人”字 ...…

查看全部问答>

ADI实验室电路DIY项目指南

报名参与:『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 ...…

查看全部问答>

介绍java的接口和原理

       卓跃教育发现随着采用Android系统的谷歌手机、平板电脑等产品逐渐扩大市场占有率,Android平台人才的缺口日益显现。据业内统计,目前国内的3G研发人才缺口有三、四百万,其中Android研发人才缺口至少30万。&n ...…

查看全部问答>