中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機(jī)在ICD做lcd顯示時鐘演示程序

        PIC單片機(jī)在ICD做lcd顯示時鐘演示程序

        作者: 時間:2011-02-24 來源:網(wǎng)絡(luò) 收藏
        ;*************************************************
        ;* CLKTEST.ASM *
        ;*************************************************
        ;* ICDDEMO教學(xué)實(shí)驗(yàn)板 lcd顯示時鐘演示程序 *
        ;*************************************************
        include p16f877.inc>
        ;*----
        ; 定義 LCD數(shù)據(jù) 控制I/O口
        LCD_DATA equ PORTB
        LCD_CNTL1 equ PORTB
        LCD_CNTL2 equ PORTA

        ; 定義 LCD控制相應(yīng)的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 ; 關(guān)顯示
        CLR_DISP EQU 0x001 ; 清顯示的操作數(shù)
        ENTRY_INC EQU 0x006 ; 操作數(shù)
        ENTRY_INC_S EQU 0x007 ; 操作數(shù)
        ENTRY_DEC EQU 0x004 ; 操作數(shù)
        ENTRY_DEC_S EQU 0x005 ; 操作數(shù)
        DD_RAM_ADDR EQU 0x080 ; 初始化第一行顯示的操作數(shù)
        DD_RAM_UL EQU 0x0c0 ; 初始化第二行顯示的操作數(shù)

        ; 設(shè)置顯示相關(guān)寄存器
        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 ; 進(jìn)行校準(zhǔn)處理
        subwf Temp,w ;
        addwf PCL,f ; 將補(bǔ)償結(jié)果與 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狀態(tài)
        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,ADRESBcritical
        bcf 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 ; 進(jìn)行BCD碼調(diào)整
        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 寄存器內(nèi)的二進(jìn)制數(shù)轉(zhuǎn) *
        ;* 換為相應(yīng)的 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 - 將顯示指針移至第一行,調(diào)用Bin2BCD*
        ;* 子程序?qū)ecs 和 Mins寄存器內(nèi)的數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的*
        ;* ASCII 碼, 然后送 LCD顯示. *
        ;*************************************************
        DisplayTime
        bcf STATUS,RP0
        call Bin2BCD ; 調(diào)用二進(jìn)制與bcd碼轉(zhuǎn)換子程序
        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 寄存器內(nèi)的二進(jìn)制數(shù)轉(zhuǎn)*
        ;* 換為相應(yīng)的 ASCII 碼并存為 SecsH:SecsL 及 *
        ;* MinsH:MinsL,HourH:HourL的形式. *
        ;************************************************
        Bin2BCD
        bcf STATUS,RP0
        clrf HourH ; 初始化變量
        movf Hour,W ; 轉(zhuǎn)換“時”
        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 ; 轉(zhuǎn)換“分”
        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 ; 轉(zhuǎn)換“秒”
        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 ; 調(diào)用二進(jìn)制與bcd碼轉(zhuǎn)換子程序
        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 ; 轉(zhuǎn)換“時”
        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 ; 轉(zhuǎn)換“分”
        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 數(shù)據(jù) 控制位
        bsf STATUS,RP0 ; Bank 1
        movlw 0xc1 ; 設(shè)置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 ; 設(shè)置指針移動方式
        call SendCmd
        movlw DD_RAM_ADDR ; 設(shè)置起始地址
        call SendCmd

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

        ;*******************************************************************
        ;*putcLCD—— 將字符數(shù)據(jù)送入 LCD *
        ;* 本程序?qū)⒆址麛?shù)據(jù)分成了高半字節(jié)和低半字節(jié)分別輸入 *
        ;* 先送入的是高半字節(jié) *
        ;*******************************************************************
        putcLCD
        bcf STATUS,RP0
        movwf Byte ; 存 WREG 到 Byte 寄存器
        swapf Byte,W ; 寫入高半字節(jié)
        movwf LCD_DATA1
        rlf LCD_DATA1,1
        rlf LCD_DATA1,1
        movlw 0x3c
        andwf LCD_DATA1,1
        movf LCD_DATA1,w
        movwf LCD_DATA
        bsf LCD_CNTL1, RS ; 設(shè)置為送數(shù)據(jù)模式
        bsf LCD_CNTL2, E ; 發(fā)送數(shù)據(jù)信號
        bcf LCD_CNTL2, E

        movf Byte,W ; 接著送低半字節(jié)
        movwf LCD_DATA1
        rlf LCD_DATA1,1
        rlf LCD_DATA1,1
        movlw 0x3c
        andwf LCD_DATA1,1
        movf LCD_DATA1,w
        movwf LCD_DATA
        bsf LCD_CNTL1, RS ; 設(shè)置為送數(shù)據(jù)模式
        bsf LCD_CNTL2, E ; 發(fā)送數(shù)據(jù)信號
        bcf LCD_CNTL2, E
        call Delay
        return

        ;*******************************************************************
        ;* SendCmd - 送命令到 LCD *
        ;* 本程序?qū)⒚顢?shù)據(jù)分成了高半字節(jié)和低半字節(jié)分別輸入 *
        ;* 先送入的是高半字節(jié) *
        ;*******************************************************************
        SendCmd
        bcf STATUS,RP0
        movwf Byte ; 存 WREG 到 Byte 寄存器
        swapf Byte,W ; 送入命令的高字節(jié)
        movwf LCD_DATA1
        rlf LCD_DATA1,1
        rlf LCD_DATA1,1
        movlw 0x3c
        andwf LCD_DATA1,1
        movf LCD_DATA1,w
        movwf LCD_DATA
        bcf LCD_CNTL1,RS ; 設(shè)置為送命令模式
        bsf LCD_CNTL2,E ; 發(fā)送數(shù)據(jù)信號
        bcf LCD_CNTL2,E
        movf Byte,W ; 接著送命令的低字節(jié)

        movwf LCD_DATA1
        rlf LCD_DATA1,1
        rlf LCD_DATA1,1
        movlw 0x3c
        andwf LCD_DATA1,1
        movf LCD_DATA1,w
        movwf LCD_DATA
        bcf LCD_CNTL1,RS ; 設(shè)置為送命令模式
        bsf LCD_CNTL2,E ; 發(fā)送數(shù)據(jù)信號
        bcf LCD_CNTL2,E
        call Delay
        return
        ;*******************************************************************
        ;* Delay - 延時子程序 *
        ;*******************************************************************
        Delay ; call指令占用2個指令周期
        bcf STATUS,RP0
        clrf Count ; 清 Count占用1個指令周期
        Dloop
        decfsz Count,f ; 這兩行指令將延時
        goto Dloop ; (256 * 3) -1 個指令周期
        return ; return占用2個指令周期

        ;*******************************************************************
        ;* LongDelay - 長延時子程序 *
        ;*******************************************************************
        LongDelay
        bcf STATUS,RP0
        clrf Count
        clrf Count1
        movlw 0x03
        movwf Count2
        LDloop
        decfsz Count,f
        goto LDloop
        decfsz Count1,f
        goto LDloop
        decfsz Count2,f
        goto LDloop
        return
        ;*------
        END



        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉