您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC单片机lcd显示时钟演示程序 正文
PIC单片机lcd显示时钟演示程序

PIC单片机lcd显示时钟演示程序

点击数:7735 次   录入时间:03-04 11:42:13   整理:http://www.55dianzi.com   PIC单片机
;* 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 ; 显示分钟高位
call putcLCD ;
movf MinsL,W ; 显示分钟低位
call putcLCD ;
movlw ':' ; 显示 ':'
call putcLCD
movf SecsH,W ; 显示秒钟高位
call putcLCD ;
movf SecsL,W ; 显示秒钟低位
call putcLCD ;
return
;************************************************
;* Bin2BCD - 将 Secs & Mins 寄存器内的二进制数转*
;* 换为相应的 ASCII 码并存为 SecsH:SecsL 及 *
;* MinsH:MinsL,HourH:HourL的形式. *
;************************************************
Bin2BCD
bcf STATUS,RP0
clrf HourH ; 初始化变量
movf Hour,W ; 转换“时”
movwf HourL
Hourth ; Loop to subtract 10
movlw .10 ; from low byte and
subwf HourL,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Next
movwf HourL
incf HourH,F
goto Hourth
Next
clrf MinsH ; 初始化变量
movf Mins,W ; 转换“分”
movwf MinsL
Mtenth ; Loop to subtract 10
movlw .10 ; from low byte and
subwf MinsL,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Next1
movwf MinsL
incf MinsH,F
goto Mtenth
Next1
clrf SecsH ; 初始化变量
movf Secs,W ; 转换“秒”
movwf SecsL
Stenth ; Loop to subtract 10
movlw .10 ; from low byte and
subwf SecsL,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Over
movwf SecsL
incf SecsH,F
goto Stenth
Over
movlw 0x30 ;
addwf HourH,F ;
addwf HourL,F ; Add 0x30 ('0') to all
addwf MinsH,F ; variables to convert
addwf MinsL,F ; a number 0 - 9 to an
addwf SecsH,F ; ASCII equivalent
addwf SecsL,F ; '0' to '9'
return
;*====
DispTime
bcf STATUS,RP0
movlw 0c7h
call SendCmd
call Bin2BCa ; 调用二进制与bcd码转换子程序
movf HourH1,W ; 显示小时高位
call putcLCD ;
movf HourL1,W ; 显示小时低位
call putcLCD ;
movlw ':' ; 显示 ':'
call putcLCD
movf MinsH1,W ; 显示分钟高位
call putcLCD ;
movf MinsL1,W ; 显示分钟低位
call putcLCD ;
return
;*----
Bin2BCa
bcf STATUS,RP0
clrf HourH1 ; 初始化变量
movf Hour1,W ; 转换“时”
movwf HourL1
Hourth1 ; Loop to subtract 10
movlw .10 ; from low byte and
subwf HourL1,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Nexta
movwf HourL1
incf HourH1,F
goto Hourth1
Nexta
clrf MinsH1 ; 初始化变量
movf Mins1,W ; 转换“分”
movwf MinsL1
Mtenth1 ; Loop to subtract 10
movlw .10 ; from low byte and
subwf MinsL1,W ; increment high byte
btfss STATUS,C ; while low byte is > 0
goto Over1
movwf MinsL1
incf MinsH1,F
goto Mtenth1
Over1
movlw 0x30 ;
addwf HourH1,F ;
addwf HourL1,F ; Add 0x30 ('0') to all
addwf MinsH1,F ; variables to convert
addwf MinsL1,F ; a number 0 - 9 to an
return ; ASCII equivalent
;*******************************************************************
;* LCD 模块子程序 *
;*******************************************************************
;InitLCD——初始化LCD模块 *
;*******************************************************************
InitLCD
bcf STATUS,RP0 ; Bank 0
bcf STATUS,RP1
clrf LCD_DATA ; 清 LCD 数据 & 控制位
bsf STATUS,RP0 ; Bank 1
movlw 0xc1 ; 设置RB1~RB5为输出
movwf LCD_DATA
bcf TRISA,5

bcf STATUS,RP0 ;
movlw 0x00 ;
movwf LCD_DATA
bsf LCD_CNTL2, E
bcf LCD_CNTL2, E

movlw 0x08 ;
movwf LCD_DATA
bsf LCD_CNTL2, E
bcf LCD_CNTL2, E
call LongDelay
call LongDelay

movlw b'00101000'
call SendCmd
movlw DISP_ON ; 开显示
call SendCmd
movlw ENTRY_INC ; 设置指针移动方式
call SendCmd
movlw DD_RAM_ADDR ; 设置起始地址
call SendCmd

InitLCDEnd ;
bcf STATUS,RP0 ;
movlw CLR_DISP ;
call SendCmd
return

;*******************************************************************
;*putcLCD—— 将字符数据送入 LCD *
;* 本程序将字符数据分成了高半字节和低半字节分别输入 *
;* 先送入的是高半字节 *
;*******************************************************************
putcLCD
bcf STATUS,RP0
movwf Byte ; 存 WREG 到 Byte 寄存器
swapf Byte,W ; 写入高半字节

上一页  [1] [2] [3] [4]  下一页


本文关键字:单片机  程序  PIC单片机单片机-工控设备 - PIC单片机