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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16Fxxx的LCD驅(qū)動(dòng)程序(適用于HD44780兼容

          PIC16Fxxx的LCD驅(qū)動(dòng)程序(適用于HD44780兼容

          作者: 時(shí)間:2011-05-17 來源:網(wǎng)絡(luò) 收藏

          ;
          ;*********************************************************************
          ;* To put the HEX value to Display ,,
          ;* High nibble first than Low nibble
          ;* Input : W Reg.
          ;*********************************************************************
          PutHex
          banksel W_BUFR
          movwf W_BUFR ; Save W Register !!
          swapf W_BUFR,W ; High nibble first !!
          call Hex2ASCII
          call putc
          ;
          movf W_BUFR,W
          call Hex2ASCII
          call putcLCD
          return
          ;
          ;******************************************************************
          ;* Convert a low nibble to ASCII code
          ;* Input : W Reg.
          ;* Output: W Reg.
          ;******************************************************************
          Hex2ASCII
          andlw 0x0f ; Mask Bit 4 to 7
          movwf Hex_Bfr
          sublw .09
          btfsc STATUS,C ; If W less than A (C=1) --> only add 30h
          goto Add_W_30
          Add_W_37 movlw 0x37
          goto Hex_cont
          Add_W_30 movlw 0x30
          Hex_cont addwf Hex_Bfr,W ; The correct ASCII code for this char !!
          return
          ;
          ;*******************************************************************
          ;* SendCmd - Sends command to LCD *
          ;* This routine splits the command into the upper and lower *
          ;* nibbles and sends them to the LCD, upper nibble first. *
          ;*******************************************************************
          SendCmd
          banksel Byte
          movwf Byte ; Save WREG in Byte variable
          call Delay_1MS
          swapf Byte,W ; Send upper nibble first
          andlw 0x0f
          movwf LCD_DATA
          bcf LCD_CNTL,RS ; Clear for command
          bsf LCD_CNTL,E ; Clock nibble into LCD
          bcf LCD_CNTL,E
          movf Byte,W ; Write lower nibble last
          Send_4bit andlw 0x0f
          movwf LCD_DATA
          bcf LCD_CNTL,RS ; Clear for command
          bsf LCD_CNTL,E ; Clock nibble into LCD
          bcf LCD_CNTL,E
          return
          ;
          ;*******************************************************************
          ;* clrLCD - Clear the contents of the LCD *
          ;*******************************************************************
          clrLCD
          movlw CLR_DISP ; Send the command to clear display
          call SendCmd
          return
          ;
          ;*******************************************************************
          ;* L1homeLCD - Moves the cursor to home position on Line 1 *
          ;*******************************************************************
          L1homeLCD
          movlw DD_RAM_ADDR|0x00 ; Send command to move cursor to
          call SendCmd ; home position on line 1
          return

          本文引用地址:http://www.ex-cimer.com/article/150736.htm

          ;*******************************************************************
          ;* L2homeLCD - Moves the cursor to home position on Line 2 *
          ;*******************************************************************
          L2homeLCD
          movlw DD_RAM_ADDR|0x28 ; Send command to move cursor to
          call SendCmd ; home position on line 2
          return


          ;*******************************************************************
          ;* Delay - Generic LCD delay (1.024mS @ 4MHz) *
          ;* Since the microcontroller can not read the busy flag of the *
          ;* LCD, a specific delay needs to be executed between writes to *
          ;* the LCD. *
          ;*******************************************************************
          Delay_1MS ; 2 cycles for call
          clrf Count ; 1 cycle to clear counter variable
          Dloop
          nop
          decfsz Count,F ; These two instructions provide a
          goto Dloop ; (256 * 3) -1 cycle count
          return ; 2 cycles for return
          ;
          ;*******************************************************************
          ;* Delay - 1mS base delay *
          ;* input : W Reg. *
          ;* *
          ;*******************************************************************
          Delay_MS
          movwf Count1
          ;
          DLop1 call Delay_1MS
          decfsz Count1,F
          goto DLop1
          return
          ;
          END


          上一頁 1 2 下一頁

          評(píng)論


          相關(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); })();