<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          PIC單片機在ICD做lcd顯示時鐘演示程序

          作者: 時間:2011-02-24 來源:網(wǎng)絡(luò) 收藏
          ;*************************************************
          ;* CLKTEST.ASM *
          ;*************************************************
          ;* ICDDEMO教學(xué)實驗板 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 ; 進行校準(zhǔn)處理
          subwf Temp,w ;
          addwf PCL,f ; 將補償結(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 ; 進行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)的二進制數(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)用二進制與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)的二進制數(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)用二進制與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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();