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

با احترام و به خلاصه خدمت تان دوستان ارجمند عرض شود که ممکن است در برنامه و یا پروژه ای نیاز باشد یا بخواهید که صرفا اعداد یا حروف خاصی را با اندازه ای بزرگتر از اندازه معمول حروف و اعداد 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