在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            作者: 時(shí)間:2011-02-24 來(lái)源:網(wǎng)絡(luò) 收藏
            ;*************************************************
            ;* CLKTEST.ASM *
            ;*************************************************
            ;* ICDDEMO教學(xué)實(shí)驗(yàn)板 lcd顯示時(shí)鐘演示程序 *
            ;*************************************************
            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 ; 開(kāi)顯示
            DISP_ON_C EQU 0x00E ; 開(kāi)顯示, 開(kāi)指針
            DISP_ON_B EQU 0x00F ; 開(kāi)顯示, 開(kāi)指針,開(kāi)閃爍
            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 ;顯示時(shí)間
            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 ; 按鍵去抖動(dòng)
            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 ; 按鍵去抖動(dòng)
            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個(gè)位置開(kāi)始
            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 ; 顯示小時(shí)高位
            call putcLCD ;
            movf HourL,W ; 顯示小時(shí)低位
            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)換“時(shí)”
            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 ; 顯示小時(shí)高位
            call putcLCD ;
            movf HourL1,W ; 顯示小時(shí)低位
            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)換“時(shí)”
            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 ; 開(kāi)顯示
            call SendCmd
            movlw ENTRY_INC ; 設(shè)置指針移動(dòng)方式
            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ù)信號(hào)
            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ù)信號(hào)
            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ù)信號(hào)
            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ù)信號(hào)
            bcf LCD_CNTL2,E
            call Delay
            return
            ;*******************************************************************
            ;* Delay - 延時(shí)子程序 *
            ;*******************************************************************
            Delay ; call指令占用2個(gè)指令周期
            bcf STATUS,RP0
            clrf Count ; 清 Count占用1個(gè)指令周期
            Dloop
            decfsz Count,f ; 這兩行指令將延時(shí)
            goto Dloop ; (256 * 3) -1 個(gè)指令周期
            return ; return占用2個(gè)指令周期

            ;*******************************************************************
            ;* LongDelay - 長(zhǎng)延時(shí)子程序 *
            ;*******************************************************************
            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



            評(píng)論


            相關(guān)推薦

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

            關(guān)閉