اطلاعیه

Collapse
No announcement yet.

بزرگ نویسی بر روی نمایشگر کاراکتری با PIC

Collapse
این موضوع بسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    بزرگ نویسی بر روی نمایشگر کاراکتری با PIC

    بسم الله الرحمن الرحیم
    سلام به همه دوستان خوب و ارجمند

    با احترام و به خلاصه خدمت تان دوستان ارجمند عرض شود که ممکن است در برنامه و یا پروژه ای نیاز باشد یا بخواهید که صرفا اعداد یا حروف خاصی را با اندازه ای بزرگتر از اندازه معمول حروف و اعداد LCD های کاراکتری نمایش دهید . نمونه اجرا شده بر روی 4 خطی:



    همانطور که همه می دانید در نمایشگر های ال سی دی چند تا محل حافظه خالی CGRAM وجود دارد که آدرس شروع آنها 64 است و در اختیار کاربر است . فارسی سازی نمایشگر هم از همین نقطه شروع می شود. ما کاراکترهایمان در محل هایی که با این آدرس 64 شروع می شود می نویسیم و بعد بقیه ماجرا...

    این تجربه بر روی هر دو دسته نمایشگر دو 2خطی و 4 خطی قابل اجرا است. این برنامه برای نمایشگر های 4 خطی آماده شده است . شما می توانید برای نمایشگر 2 خطی مقادیر اضافه را حذف کنید. همچنین این برنامه بر روی نمایشگر های کاراکتری که سریال هستند نیز با موفقیت آزمایش شد. نمونه اجرا شده بر روی 2 خطی:



    مقدار عددی که نمایش داده می شود در متغیر dispVal باید قرار داده شود. برای نمونه اینجا ، به ازای هر 300 میلی ثانیه یکی افزایش می دهد.

    از آنجا که بنده قدرتی را که در محیط PICBasic مشاهده و تجربه کرده ام هنوز در محیط برنامه نویسی دیگری برای PIC تجربه نکردم ، فلذا این سورس کد بیسیک با بضاعت اندک و تجربه کم خودم را به حضور شما معرفی می کنم. این برنامه آنقدر ساده نوشته شده که به راحتی می توانید آن را به هر محیط دلخواهی از C ببرید. می دانم که طرفداران C خیلی زیاد هستند.


    کد:
    '****************************************************************
    '* Name  : BigDigits.PBP                   *
    '* Author :ِDarrel Taylor      *
    '* Notice : Copyright (c) 2015                *
    '*     : All Rights Reserved                *
    '* Date  : 8/26/2015                     *
    '* Version : 1.0                        *
    '* Notes  :                          *
    '*     :                          *
    '****************************************************************
    ;Initialize your hardware first
    '
     
    ASM
     __config _HS_OSC & _WDT_ON & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF
    ENDASM
    DEFINE OSC 20
    DEFINE LCD_DREG PORTB
    DEFINE LCD_DBIT 4
    DEFINE LCD_RSREG PORTB
    DEFINE LCD_RSBIT 3    '* Reset Bit port B.3  pin4==>LCD
    DEFINE LCD_EREG PORTB
    DEFINE LCD_EBIT 2    '* Enable Bit port B.2  pin6==>LCD
    DEFINE LCD_BITS 4
    DEFINE LCD_LINES 4
    DEFINE LCD_COMMANDUS 2000
    DEFINE LCD_DATAUS 50
    
    I    con 254 ' Instruction prefix.
    ClrLCD con 1 ' Clear-LCD instruction.
    cgRAM  con 64 ' Address 0 of CG RAM.
    EEptr  var word ' Pointer into EEPROM.
    pat   var EEptr ' Alias for EEptr.
    dispVal var word ' Value to be displayed as big digits.
    temp  var byte ' Temporary byte variable.
    decade var word
    nbl   var byte ' Index into number-pattern tables.
    digit  var byte ' Current digit to display
    line  var byte ' LCD line
    
    LCDOUT I,ClrLCD
    PAUSE 500
    
    bitPat0 DATA 0,0,0,1,3,7,15,31 ' Left-right up-ramp shape.
    bitPat1 DATA 0,0,0,16,24,28,30,31 ' Right-left " "
    bitPat2 DATA 31,15,7,3,1,0,0,0 ' Left-right down ramp.
    bitPat3 DATA 31,30,28,24,16,0,0,0 ' Right-left " "
    bitPat4 DATA 0,0,0,0,31,31,31,31 ' Lower block.
    bitPat5 DATA 31,31,31,31,0,0,0,0 ' Upper block.
    bitPat6 DATA 31,31,31,31,31,31,31,31 ' Full block.
    bitPat7 DATA 0,0,0,0,0,0,0,0 ' Full blank
    LCDOUT I,cgRAM
    
    for EEptr = 0 to 63 ' Write the bit patterns
      Read EEptr,temp ' to the LCD.
      lcdout temp
    next
    
    LCDOUT I, ClrLCD
    pause 1
    ' ========================================================================
    ' Demo Loop: Show dispVal in Big Numerals, Increment, Loop
    ' ========================================================================
    again:
      gosub bigLCD
      dispVal = dispVal + 1
      pause 300
    goto again
    ' ========================================================================
    ' Subroutine Displaying Large Numbers
    ' ========================================================================
    bigLCD:
      for line = 0 to 3
        decade = 1000
        lookup line,[128,192,148,212],temp
        
        LCDOUT I, temp
        for digit = 3 to 0 step -1
          nbl = dispVal dig digit
          gosub getPattern
          if dispVal = 0 and digit = 0 then skip0
          if dispVal < decade then blankIt
          skip0:
          LCDOUT pat.Highbyte>>4, pat.Highbyte&$0F, pat.LowByte>>4, pat.Lowbyte&$0F
    
          goto cont
          blankIt:
          lcdout "  "
          cont:
          if digit = 0 then skip1
          LCDOUT 32
          skip1:
          decade = decade/10
        next
      next
    return
    ' Subroutines Defining Big-Character Patterns
    ' ========================================================================
    getPattern:
    branch line,[first,second,third,fourth]
    ' 0 1 2 3 4 5 6 7 8 9
    ' --- --- --- --- --- --- --- --- --- ---
    first:
    lookup2 nbl,[$0551,$7067,$0551,$0551,$6776,$6555,$0557,$2556,$0551,$0551],pat
    return
    second:
    lookup2 nbl,[$6776,$7767,$7743,$7743,$6776,$2441,$6041,$7703,$2443,$6776],pat
    return
    third:
    lookup2 nbl,[$6776,$7767,$0577,$7751,$2556,$7776,$6776,$7767,$0551,$2536],pat
    return
    fourth:
    lookup2 nbl,[$2443,$7464,$6444,$2443,$7776,$2443,$2443,$7767,$2443,$7443],pat
    return

    لینک منبع : http://www.picbasic.co.uk/forum/showthread.php?t=4795
    والسلام علی من اتبع الهدی .... و درود بر کسانی که راه هدایت را دنبال می کنند.

    هوشمندانه بپرسید...
لطفا صبر کنید...
X