⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd电子钟.asm

📁 详细的中文说明 标准的程序格式 保证调试通过877a读写lcd
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*************************************************
;* CLKTEST.ASM                                   *
;*************************************************
;宁波歌林电子实验室
;网址:  www.nbglin.com
;电话:  0574-88464538  
;EMAIL: PICWORLD@126.COM
;*************************************************
;*  PIC全系列实验板   电子钟演示程序       *
;*************************************************
	include <p16f877A.inc>
;*----
; 定义 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -