历史上的今天
返回首页

历史上的今天

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

2018年01月26日 | HT48R50A的 5X7 LED点阵+LCD显示示例程序

2018-01-26 来源:eefocus

5X7 LED点阵+LCD显示示例程序****************************************


; 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 


推荐阅读

史海拾趣

DREMEL公司的发展小趣事

随着电子行业的不断发展,数据治理和云数据湖领域也面临着越来越多的挑战。Dremio公司始终保持敏锐的市场洞察力,积极应对各种挑战。他们不断投入研发资源,推出了一系列创新产品和技术解决方案。例如,他们开发了一种基于人工智能的数据分析引擎,能够自动识别和预测数据中的异常和趋势。这一技术不仅提高了数据分析的准确性和效率,也为企业提供了更全面的数据支持。

FOSLINK公司的发展小趣事

面对全球气候变化的严峻挑战,FOSLINK公司积极响应国家关于绿色发展的号召,将绿色转型作为企业发展的重要方向。公司致力于研发和生产低能耗、环保型的电子产品,并不断优化生产工艺流程,减少资源消耗和环境污染。同时,FOSLINK还积极推广绿色供应链管理,与供应商和客户共同构建绿色、低碳的产业链生态。这一系列的绿色转型举措,不仅彰显了FOSLINK的社会责任感,也为其赢得了更多消费者的青睐和支持。

Gould Fiber Optics公司的发展小趣事
确保电源电路中的接地良好,避免接地不良引起的噪声和干扰。对于数字电路和模拟电路共存的电源系统,应采用模拟地和数字地分开接地的方式。
ABL Aluminum Components公司的发展小趣事

ABL Aluminum Components公司自成立以来,一直注重技术创新。早期,公司研发出了一种新型铝合金材料,这种材料具有优异的导电性和轻量化特点,迅速在电子行业引起关注。随着技术的不断迭代,ABL公司逐步将这种材料应用于手机、电脑等消费电子产品的内部组件,大大提高了产品的性能和用户体验。凭借这一技术优势,ABL公司逐渐在电子行业中占据了一席之地。

Digitron公司的发展小趣事

Digitron公司始终将创新作为企业发展的核心驱动力。公司投入大量资金用于研发新技术和新产品,不断提升产品的性能和功能。XXXX年,Digitron公司成功研发出一款具有无线传输功能的数据记录器,用户可以通过手机或电脑实时查看和监控数据。这一创新产品受到了市场的热烈欢迎,为Digitron公司带来了显著的增长。

CUI Inc.公司的发展小趣事

除了电源产品,CUI Inc.还提供世界一流的配套板级元器件,包括互连、声音、运动控制和热产品。为了满足全球客户的需求,CUI积极扩展其全球化布局。通过与各地的合作伙伴建立紧密的合作关系,CUI成功地将其产品和服务推广到了全球范围内。这种全球化战略不仅提高了CUI的市场份额,还增强了其在国际市场上的影响力。

问答坊 | AI 解惑

应用定时器中断实例技术

如何应用定时器实现中断呢?具体的操作步骤有呢些?应该注意什么问题?下面由工程师讲解一个应用定时器中断的实例: 现要求编制一段程序,使P1.0端口线上输出周期为2ms的方波脉冲。设单片机晶振频率 Fosc=6MHZ. 1、方法:利用定时器T0作1ms定 ...…

查看全部问答>

CCS是否会改变中断向量表所在的地址内的内容

听风且饮 16:48:08请问下在ccs仿真的时候,程序运行的时候中断向量表所在的地址内的内容会不会被修改,现在的程序运行的时候观测到中断向量表所在的地址空间内容被修改了。…

查看全部问答>

求助:用C51系列的单片机模拟一个非标准的SPI接口的从机?

大家知道有什么办法么?怎么才能及时的响应主机clk信号的,就是用单片机对主机的响应返回一定的值?我暂时想到用单片机C51来模拟,不知道大家在这方面有什么建议?不胜感激~~~~~~~…

查看全部问答>

急救:WM5注册表问题,在线等!!

我用EVC4写的程序 可以修改WM5的注册表 就是Today下面的 用我写的程序修改后 用EVC自带的注册表编辑器查看显示修改是正确地 但是 只要一重启 就还原了 不知道这个问题怎么解决 谢谢了 ps 最好不要用破解注册表这种办法…

查看全部问答>

请教:为什么程序可以单步运行,但不能快速运行

各位大侠:我写了一个简单的关于字符串转换为无符号长整形秒数的程序。因为EVC不支持mktime()和localtime()等函数, 我自己写了一个。目前此程序单步执行可以,但是如果直接run,在模拟器上就会看到The application has performed an Illegal Opera ...…

查看全部问答>

怎样烧程序????

小弟刚接触AVR系列单片机,疑惑一堆,现急切想知道怎样把程序烧到ATMEGA8中(需要什么软件,硬件之类的),非常感谢!! [ 本帖最后由 Saintif 于 2011-3-27 15:25 编辑 ]…

查看全部问答>

有谁用过uln2803?

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 请教一下这个芯片是做什么使的?com口接的是多大的电压?数据手册上没有讲太明白,不胜感激!  …

查看全部问答>

超声波测距 cx20106 接收信号一直出错

用的就是网上常用的电路 可是接收的信号不确定而且都不正确 求教用过cx20106的大侠帮忙一下  谢谢了  我是用105电容接一个5欧的电阻    5脚是220K电阻  接收头到cx20106这个我画图时太水了 用的是跳线(单面板) 而 ...…

查看全部问答>

MSP430跟手机通信,你能想到什么办法?

大家有没有想过这样一个问题,用MSP430和我们的智能机通信,你能想到什么办法呢? 全双工的、半双工的、单工的都可以,当然双工最好啦! 你能想到什么样的办法呢?…

查看全部问答>