历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | PIC单片机在ICD做lcd显示时钟演示程序

2019-10-17 来源:eefocus

;*************************************************

;* CLKTEST.ASM *

;*-----------------------------------------------*

;*-----------------------------------------------*

;*************************************************

;* ICDDEMO教学实验板 lcd显示时钟演示程序 *

;*************************************************

include

;*----

; 定义 LCD数据& 控制I/O口

LCD_DATA equ PORTB

LCD_CNTL1 equ PORTB

LCD_CNTL2 equ PORTA

; 定义 LCD控制相应的I/O引脚

RS equ 1

E equ 5


; LCD 模块命令

DISP_ON EQU 0x00C ; 开显示

DISP_ON_C EQU 0x00E ; 开显示, 开指针

DISP_ON_B EQU 0x00F ; 开显示, 开指针,开闪烁

DISP_OFF EQU 0x008 ; 关显示

CLR_DISP EQU 0x001 ; 清显示的操作数

ENTRY_INC EQU 0x006 ; 操作数

ENTRY_INC_S EQU 0x007 ; 操作数

ENTRY_DEC EQU 0x004 ; 操作数

ENTRY_DEC_S EQU 0x005 ; 操作数

DD_RAM_ADDR EQU 0x080 ; 初始化第一行显示的操作数

DD_RAM_UL EQU 0x0c0 ; 初始化第二行显示的操作数


; 设置显示相关寄存器

Byte EQU 20H

Count EQU 21H

Count1 EQU 22H

Count2 EQU 23H

LCD_DATA1 EQU 24H

PORTDB EQU 25H

Temp EQU 26H

TempH EQU 27H

TempL EQU 28H

INTSIG EQU 29H

RTCCSIG1 EQU 2AH

RTCCSIG EQU 2BH

ALRSIG EQU 2CH

Hour EQU 2DH

HourH EQU 2EH

HourL EQU 2FH

HourL1 EQU 30H

HourH1 EQU 31H

Mins EQU 32H

Mins1 EQU 33H

MinsH EQU 34H

MinsL EQU 35H

MinsH1 EQU 36H

MinsL1 EQU 37H

Secs EQU 38H

SecsH EQU 39H

SecsL EQU 3AH

ALRH1 EQU 3BH

ALRM1 EQU 3CH

ALRH2 EQU 3DH

ALRM2 EQU 3EH

ALRH3 EQU 3FH

ALRM3 EQU 40H

_WREG EQU 41H

_STATUS EQU 42H

Hour1 EQU 43H

ADRESB EQU 44H

BKM EQU 45H

;*----


org 0

nop

goto start

org 4

goto ISR


org 10


CalTable

bcf STATUS,RP0

bcf PCLATH,0

movlw 0x66 ; 进行校准处理

subwf Temp,w ;

addwf PCL,f ; 将补偿结果与 PCL相加

dt 0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5

dt 6,6,6,7,7,7,8,8,8,9,9,0xa,0xa,0xb,0xb,0xc,0xc

dt 0xd,0xd,0xe,0xe,0xf,0xf,0xf,0x10,0x10,0x10

dt 0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x14

dt 0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x18,0x18

dt 0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c

dt 0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20

dt 0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x24,0x25,0x25

dt 0x26,0x26,0x27,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b

dt 0x2c,0x2d,0x2e,0x2f,0x30,0x32


start

call InitLCD

clrf RTCCSIG

clrf RTCCSIG1

clrf INTSIG

clrf Hour

clrf Hour1

clrf Mins

clrf Mins1

clrf Secs

clrf ALRSIG

movlw 20h

movwf BKM

movlw b'10001111'

movwf PORTDB

movlw 0ffh

movwf TMR0

movlw 00

movwf TMR1L

movlw 80h

movwf TMR1H

movlw b'00001111'

movwf T1CON

bsf STATUS,RP0

bsf PIE1,TMR1IE

bcf STATUS,RP0

movlw b'10111111'

OPTION

movlw b'11110000'

movwf INTCON

main

movlw 80h

call SendCmd

call DisplayTime ;显示时间

movlw 0c0h

call SendCmd

movlw 'H'

call putcLCD

movlw 'e'

call putcLCD

movlw 'l'

call putcLCD

movlw 'l'

call putcLCD

movlw 'o'

call putcLCD

movlw ' '

call putcLCD

movlw '!'

call putcLCD

movlw ' '

call putcLCD

movlw ':'

call putcLCD

movlw ')'

call putcLCD

movlw ' '

call putcLCD

movlw ' '

call putcLCD

call BkLight ;背光控制

call TempM ;显示温度

btfsc ALRSIG,1

call ALR1

btfsc ALRSIG,2

call ALR2

btfsc ALRSIG,3

call ALR3

bcf STATUS,RP0

bcf PCLATH,0

movf RTCCSIG,W

addwf PCL,1

goto main

goto RtccS1

goto RtccS2

goto Rtccs3

goto Rtccs4

clrf RTCCSIG

clrf RTCCSIG1

goto main

;*=====

ALR1 bcf STATUS,RP0

movf Hour,W

xorwf ALRH1,W

btfss STATUS,Z

goto ALREND

movf Mins,W

xorwf ALRM1,W

btfss STATUS,Z

goto ALREND

bsf STATUS,RP0

clrf TRISD

bcf STATUS,RP0

bcf STATUS,C

rlf PORTDB,1

btfsc STATUS,C

bsf PORTDB,0

movf PORTDB,W

movwf PORTD

return

;*---

ALR2 bcf STATUS,RP0

movf Hour,W

xorwf ALRH2,W

btfss STATUS,Z

goto ALREND

movf Mins,W

xorwf ALRM2,W

btfss STATUS,Z

goto ALREND

bsf STATUS,RP0

clrf TRISD

bcf STATUS,RP0

bcf STATUS,C

rlf PORTDB,1

btfsc STATUS,C

bsf PORTDB,0

movf PORTDB,W

movwf PORTD

return

;*----

ALR3 bcf STATUS,RP0

movf Hour,W

xorwf ALRH3,W

btfss STATUS,Z

goto ALREND

movf Mins,W

xorwf ALRM3,W

btfss STATUS,Z

goto ALREND

bsf STATUS,RP0

clrf TRISD

bcf STATUS,RP0

bcf STATUS,C

rlf PORTDB,1

btfsc STATUS,C

bsf PORTDB,0

movf PORTDB,W

movwf PORTD

return

;*---

ALREND

bsf STATUS,RP0

movlw 0ffh

movwf TRISD

return

;*=====

RtccS1

movlw 80h

call SendCmd

call DisplayTime

call LongDelay

movlw 0c0h

call SendCmd ;line2, 00

movlw 'S'

call putcLCD

movlw 'e'

call putcLCD

movlw 't'

call putcLCD

movlw ' '

call putcLCD

movlw 'T'

call putcLCD

movlw 'i'

call putcLCD

movlw 'm'

call putcLCD

movlw 'e'

call putcLCD ;show "Set Time"

movlw ' '

call putcLCD

movlw ' '

call putcLCD

movlw ' '

call putcLCD

movlw ' '

call putcLCD

bsf PCLATH,0

movf RTCCSIG1,W

addwf PCL,1

goto SetHour

goto SetMins

clrf INTSIG

incf RTCCSIG

clrf RTCCSIG1

goto main

;*----

SetHour

movlw 80h

call Selshow

movlw d'24'

subwf INTSIG,W

btfsc STATUS,C

goto $+4

movf INTSIG,w

movwf Hour

goto RtccS1

clrf INTSIG

movwf Hour

goto RtccS1

;*----

SetMins

movlw 83h

call Selshow

movlw d'60'

subwf INTSIG,W

btfsc STATUS,C

goto $+4

movf INTSIG,w

movwf Mins

goto RtccS1

clrf INTSIG

movwf Mins

goto RtccS1

;*=====

RtccS2

bcf STATUS,RP0

movlw 0c0h

call SendCmd

call Alarm

movlw '1'

call putcLCD

movlw ' '

call putcLCD

S2 movlw 80h

call SendCmd

call DisplayTime

call DispTime

call LongDelay

bsf PCLATH,0

movf RTCCSIG1,W

addwf PCL,1

goto SetAlH2

goto SetAlM2

movf Hour1,w

movwf ALRH1

movf Mins1,w

movwf ALRM1

clrf INTSIG

clrf RTCCSIG1

incf RTCCSIG

goto main

;*---

SetAlH2

movlw 0c7h

call Selshow

movf INTSIG,W

btfss STATUS,Z

bsf ALRSIG,1

movf INTSIG,W

movwf Hour1

movlw d'24'

subwf Hour1,W

btfss STATUS,C

goto S2

clrf INTSIG

clrf Hour1

goto S2

SetAlM2

movlw 0cah

call Selshow

movf INTSIG,W

btfss STATUS,Z

bsf ALRSIG,1

movf INTSIG,W

movwf Mins1

movlw d'60'

subwf Mins1,W

btfss STATUS,C

goto S2

clrf INTSIG

clrf Mins1

goto S2

;*----

Alarm movlw 'A'

call putcLCD

movlw 'l'

call putcLCD

movlw 'a'

call putcLCD ;

movlw 'r'

call putcLCD

movlw 'm'

call putcLCD ;

return

;*----

Selshow

call SendCmd

movlw ' '

call putcLCD

movlw ' '

call putcLCD

call LongDelay

return

;*=====

Rtccs3

bcf STATUS,RP0

movlw 0c0h

call SendCmd

call Alarm

movlw '2'

call putcLCD

movlw ' '

call putcLCD

S3 movlw 80h

call SendCmd

call DisplayTime

call DispTime

call LongDelay

bsf PCLATH,0

movf RTCCSIG1,w

addwf PCL,1

goto SetAlH3

goto SetAlM3

movf Hour1,w

movwf ALRH2

movf Mins1,w

movwf ALRM2

clrf INTSIG

clrf RTCCSIG1

incf RTCCSIG

goto main

;*---

SetAlH3

movlw 0c7h

call Selshow

movf INTSIG,W

btfss STATUS,Z

bsf ALRSIG,2

movf INTSIG,W

movwf Hour1

movlw d'24'

subwf Hour1,W

btfss STATUS,C

goto S3

clrf INTSIG

clrf Hour1

goto S3

SetAlM3

movlw 0cah

call Selshow

movf INTSIG,W

btfss STATUS,Z

bsf ALRSIG,1

movf INTSIG,W

movwf Mins1

movlw d'60'

subwf Mins1,W

btfss STATUS,C

goto S3

clrf INTSIG

clrf Mins1

goto S3

;*=====

Rtccs4

movlw 80h

call SendCmd

call DisplayTime

bcf STATUS,RP0

movlw 0c0h

call SendCmd

call Alarm

movlw '3'

call putcLCD

movlw ' '

call putcLCD

S4 call DispTime

call LongDelay

bsf PCLATH,0

movf RTCCSIG1,w

addwf PCL,1

goto SetAlH4

goto SetAlM4

movf Hour1,w

movwf ALRH3

movf Mins1,w

movwf ALRM3

clrf INTSIG

clrf RTCCSIG1

incf RTCCSIG

goto main

;*---

SetAlH4

movlw 0c7h

call Selshow

movf INTSIG,W

btfss STATUS,Z

bsf ALRSIG,3

movf INTSIG,W

movwf Hour1

movlw d'24'

subwf Hour1,W

btfss STATUS,C

goto S4

clrf INTSIG

clrf Hour1

goto S4

SetAlM4

movlw 0cah

call Selshow

movf INTSIG,W

btfss STATUS,Z

bsf ALRSIG,1

movf INTSIG,W

movwf Mins1

movlw d'60'

subwf Mins1,W

btfss STATUS,C

goto S4

clrf INTSIG

clrf Mins1

goto S4

;*=====

ISR

Push

movwf _WREG ; 存 WREG状态

swapf STATUS,W ; 存 STATUS

movwf _STATUS

;*----

bcf STATUS,RP0

btfsc PIR1,TMR1IF

call TimeAdj

btfsc INTCON,INTF

call IntDeal

btfsc INTCON,T0IF

call RtccDeal


;*----

Pop

swapf _STATUS,W ; Restore STATUS

movwf STATUS

swapf _WREG,F ; Restore WREG w/o

swapf _WREG,W ; affecting STATUS

retfie

;*=====

TimeAdj

bcf STATUS,RP0

bcf PIR1,TMR1IF

movlw 00h

movwf TMR1L

movlw 80h

movwf TMR1H

incf Secs,1

movlw d'60'

xorwf Secs,W

btfss STATUS,Z

goto TE

clrf Secs

incf Mins,1

movlw d'60'

xorwf Mins,W

btfss STATUS,Z

goto TE

clrf Mins

incf Hour

movlw d'24'

xorwf Hour,W

btfss STATUS,Z

goto TE

clrf Hour

TE

return

;*=====

IntDeal

bcf INTCON,INTF

bsf PORTB,0

btfsc PORTB,0 ;

goto $+5 ;

call Delay

bsf PORTB,0 ; 按键去抖动

btfsc PORTB,0

goto $+2 ; /

incf INTSIG

return

;*=====

RtccDeal

bcf STATUS,RP0

movlw 0ffh ;

movwf TMR0

bcf INTCON,T0IF

bsf PORTA,4

btfsc PORTA,4 ;

goto RtcWr ;

call Delay

bsf PORTA,4 ; 按键去抖动

btfsc PORTB,4

goto RtcWr ; /

movf RTCCSIG,W

sublw 04h

btfss STATUS,C

goto WRONG

movf RTCCSIG1,W

sublw 03h

btfss STATUS,C

goto WRONG

movf RTCCSIG,W

addwf RTCCSIG1,W

btfsc STATUS,Z

goto $+3

incf RTCCSIG1

goto RtcWr

incf RTCCSIG

goto RtcWr


WRONG

clrf RTCCSIG

clrf RTCCSIG1

RtcWr return

;*=====

BkLight

bsf STATUS,RP0

bcf ADCON1,ADFM ;ADRESH all 8-bit,H

bcf STATUS,RP0

movlw b'01010001'

movwf ADCON0 ;select AD2,Fosc/8

decfsz BKM

goto $-1

bsf ADCON0,GO

btfss PIR1,ADIF

goto $-1

bcf PIR1,ADIF

;READ ADRES---

movf ADRESH,W

movwf ADRESB

bsf STATUS,RP0

bcf TRISE,0 ;SELECT RE0 OUTPUT

bcf STATUS,RP0

movlw b'10000000' ;critical value of lightness

subwf ADRESB,W

btfss STATUS,C

goto $+4 ;c=0,ADRESBbcf STATUS,RP0

bsf PORTE,0 ;c=1,backlight on

goto $+3

bcf STATUS,RP0

bcf PORTE,0

movlw 20h

movwf BKM

return

;*=====

TempM ;temprature measure

bsf STATUS,RP0

bcf ADCON1,ADFM ;ADRESH all 8-bit

bcf STATUS,RP0

movlw b'01001001' ;select AD1,FOSC/8

movwf ADCON0

decfsz BKM

goto $-1

bsf ADCON0,GO

btfss PIR1,ADIF

goto $-1

bcf PIR1,ADIF

;bsf STATUS,RP0

movf ADRESH,W

;bcf STATUS,RP0

movwf Temp

call CalTable

movwf Temp

call Bin2BCDT ; 进行BCD码调整

movlw 08ah ; 从第一行的第0A个位置开始

call SendCmd

movf TempH,W ; 显示温度

call putcLCD

movf TempL,W

call putcLCD

movlw 'C' ; 显示“C”(表示摄氏度)

call putcLCD

movlw 20h

movwf BKM

return

;************************************************

;* Bin2BCDT - 将 Temp 寄存器内的二进制数转 *

;* 换为相应的 ASCII 码并存为 TempH:TempL 的形式 *

;************************************************

Bin2BCDT

bcf STATUS,RP0

clrf TempH ; Initialize variables

movf Temp,W

movwf TempL

Ttenth ; Subtract 10 from low variable

movlw .10 ; until result is < 0. On each

subwf TempL,W ; subtraction, increment the

btfss STATUS,C ; temperature high byte.

goto Over0

movwf TempL

incf TempH,F

goto Ttenth

Over0

movlw 0x30 ; Make decimal ASCII by adding

addwf TempH,F ; '0' to high and low byte

addwf TempL,F

return

;*************************************************

;* DisplayTime - 将显示指针移至第一行,调用Bin2BCD*

;* 子程序将Secs 和 Mins寄存器内的数据转换为相应的*

;* ASCII 码, 然后送 LCD显示. *

;*************************************************

DisplayTime

bcf STATUS,RP0

call Bin2BCD ; 调用二进制与bcd码转换子程序

movf HourH,W ; 显示小时高位

call putcLCD ;

movf HourL,W ; 显示小时低位

call putcLCD ;

movlw ':'

call putcLCD ; 显示 ':'

movf MinsH,W ; 显示分钟高位

推荐阅读

史海拾趣

GSME Electronics公司的发展小趣事

在半导体行业,技术创新是企业持续发展的关键。GSME Electronics深知这一点,不断加大研发投入,提升公司的研发实力。公司拥有一支朝气蓬勃的高素质员工团队,他们致力于新产品的开发和旧产品的升级换代。通过不断的技术创新和研发努力,GSME Electronics在半导体器件领域取得了多项技术突破,为公司的发展注入了新的动力。

厦门法拉(faratronic)公司的发展小趣事

随着电子技术的飞速发展,FMI公司紧跟时代步伐,不断研发新技术和新产品。在1992年,FMI成功将频率管理扩展到OEM市场,进一步拓宽了其业务范围。这一举措不仅增强了公司的市场竞争力,还为公司带来了更多的商业机会。通过为计算机外设、工业仪器、局域网/广域网等多个领域提供定制化的频率控制解决方案,FMI逐渐成为了行业内的佼佼者。

南京中科微公司的发展小趣事

CSM成立以来,一直致力于研发具有自主知识产权的射频/模拟关键芯片。经过数年的辛勤耕耘,团队成功开发出了多款高性能的集成电路芯片与模块,其中不乏在功耗、成本、性能等方面达到国际先进水平的产品。这些技术突破不仅为公司赢得了市场的认可,也为国内电子行业的发展注入了新的活力。

Advanced Linear Devices公司的发展小趣事

CSM自成立以来,便积极承担国家和地方具有战略性意义的重大攻关研发项目。其中,公司前身南京市物联网研究与产业化有限公司RFID事业部申报的“超高频与微波RFID读写器射频芯片研发”项目获得了国家工信部物联网专项资金项目资助,并在江苏省名列第一。这些项目的成功完成不仅展示了CSM在技术研发方面的实力,也为国家科技进步和产业发展做出了积极贡献。

Gould Ami公司的发展小趣事
检查电路板是否有明显损坏迹象,如烧焦、变形等。使用万用表等工具检测元件是否老化或接触不良,必要时进行更换或修复。
Electroswitch公司的发展小趣事

面对快速变化的电子行业环境,Electroswitch始终保持着敏锐的洞察力和创新精神。公司不断加大对新技术和新产品的研发力度,推出了一系列具有领先水平的开关产品。同时,公司还积极探索新的业务领域和市场机会,为未来的发展做好充分准备。展望未来,Electroswitch将继续秉承“质量、选择、产品创新和出色的支持”的理念,为客户提供更加优质的产品和服务。

请注意,以上故事框架仅供参考,您可以根据这些框架进一步扩展和丰富故事内容。

问答坊 | AI 解惑

借人气问问如何连接两个GPRS模块?

最近我使用IWOW的TR800来做一个无线数传的项目,我在想移动既然分配给模块的ip是内网ip,那是否意味着两个模块连上GPRS网络之后,他们都是获得同一内网里的ip,就像连接到同一路由器里面的两台机器一样? 另外共享一下我觉得不错的技术QQ群 群5 ...…

查看全部问答>

通过MR16谈谈自己对LED行业的想法--antsin

本人一直在一家电源IC原厂华东区做FAE,07年公司从linear挖了一个团队进入LED驱动行业,我随之也开始进入这个行业。在勤勤勉勉的耕耘3年中,我从学习到与客户分享我的学习经验,很多客户都会跟我讲,王工,从你身上我学到了很多。但这时我告诫自己 ...…

查看全部问答>

小弟新学TMS320LF2407,请教一下加载程序的问题

原来用的6416的片子,现在用的2407,想问下怎么能一上电就让dsp芯片运行我的程序?小弟新手希望各位大侠教的详细点,有资料发我邮箱也可以hljlishen0517@gmail.com   多谢各位了…

查看全部问答>

vxworks下U盘的插拔问题

小弟最近遇到个问题: 在vxworks中包含usb mass storage的相关组件,启动目标板后,插入U盘,读写操作都正确,但是拔掉后,再插入,就报告dosFsDevCreate失败,查看错误号,说是设备已存在,使用 hdr = iosDevFind(\"/usb/bd\", 0); iosDevDelet ...…

查看全部问答>

请高手帮忙调试一块板子(报酬1.5w)

主板芯片: Intel 6700 PXH 64 bit PCI Express to PCI-X Hub,CPU是INTEL的 Sossaman。 现在就是没有仿真到芯片组,另外,因为没有Super I/O芯片,CPLD时序设置也有点不太清楚。 请高手帮忙调试出来。 我的msn:dq_lu@hotmail.com …

查看全部问答>

74系列芯片功能大全

74系列芯片功能大全 这里是常用74系列芯片功能大全很有收藏价值   7400 TTL 2输入端四与非门7401 TTL 集电极开路2输入端四与非门7402 TTL 2输入端四或非门7403 TTL 集电极开路2输入端四与非门7404 TTL 六反相器7405 TTL 集电极开路六反相 ...…

查看全部问答>

帮忙看看这个 三相三线制缺相保护电路

这个电路在很多网站都有   对它解释也是相同 “这是一种用于三相三线制电源缺相保护电路,A、B、C缺任何一相,光耦器输出电平低于比较器的反相输入端的基准电压,比较器输出低电平,封锁PWM驱动信号,关闭电源。比较器输入极性稍加变动 ...…

查看全部问答>

LCD液晶显示

LCD1604驱动模块 /*备注一:LCD1604只含有ASCII码表内字符的字库,无汉字字库,不能自行打点,不便画曲线*/ /*本模板功能一:在任意位置显示阿拉伯数字 */ /*本模板功能二:在任意位置显示字符及字符串 */ #include #include \"lcd1604.h\" /* ...…

查看全部问答>

TPS5430DDAR芯片过回流焊后无法正常工作,重新焊接上正常工作

如题,TPS5430DDAR芯片经过热风回流焊,峰值温度230℃左右,测试电源无法工作,将两片TPS5430DDAR用烙铁取下,交换下重新焊接上去,电源正常工作,请问这是什么原因??????…

查看全部问答>

TA 输出模式 疑问

输出信号由OUTx位决定,可我没在寄存器里找到它…

查看全部问答>