Feltételezett kiindulási helyzet: telepített MPLAB 8.15a és Microchip C18 v3.22 fordító (utóbbi a C:\Program Files\Microchip\MCC18 mappában).
/* Interface type 8-bit or 4-bit For 8-bit operation uncomment the #define BIT8 */ #define BIT8 /* When in 4-bit interface define if the data is in the upper or lower nibble. For lower nibble, comment the #define UPPER */ #define UPPER //Ennek most nincs jelentősége /* DATA_PORT defines the port to which the LCD data lines are connected */ #define DATA_PORT PORTC #define TRIS_DATA_PORT TRISC /* CTRL_PORT defines the port where the control lines are connected. These are just samples, change to match your application. */ #define RS_PIN LATBbits.LATB5 /* PORT for RS */ #define TRIS_RS TRISBbits.TRISB5 /* TRIS for RS */ #define RW_PIN LATBbits.LATB6 /* PORT for RW */ #define TRIS_RW TRISBbits.TRISB6 /* TRIS for RW */ #define E_PIN LATBbits.LATB7 /* PORT for E */ #define TRIS_E TRISBbits.TRISB7 /* TRIS for E */
SET MCC_INCLUDE=C:\MCC18\h
make_one_device_t.bat 18F14K50
Megjegyzés: Az OpenXLCD() függvény paraméterezése azt sejteti, hogy futáskor választhatunk a 4 vagy 8 bites üzemmód között. Ez, sajnos, nem így van, mivel a perifériakönyvtár fordításakor a forráskódban elhelyezett feltételes fordítási direktívák miatt eleve csak egyféle üzemmód vezérlő parancsai fordulnak le, s utólagos módosítás csak újrafordítással lehetséges. Így tehát az OpenXLCD() függvény paraméterezésénél már csak a hibás vagy a hibátlan beáálítás között választhatunk (hibátlan a beállítás akkor, amikor a megadott üzemmód megegyezik azzal, amire a programkönyvtárat fordítottuk).
Egy mintapélda az LCD kezelésére a "gyári" perifériakönyvtár felhasználásával
Az alábbi mintaprogramban 8 bites adatúttal, kétsoros módban inicializáljuk az LCD modult, az 5x7-es fontméret használva. Mindkét sorba kiírunk egy-egy rövid szöveget.
Hardver követelmények:
Projekt konfiguráció:
#include "piccolo_all.h" #include "piccolo_xlcd.h" #include "delays.h" void DelayFor18TCY(void) { Delay10TCYx(2); //20 TCY delay } void DelayPORXLCD(void) { Delay10KTCYx(60); //50 ms delay } void DelayXLCD() { Delay1KTCYx(60); //5 ms delay } const rom char szoveg[]= "PICCOLO projekt"; void main(void) { DISABLE_ALL_ANALOG(); OpenXLCD( EIGHT_BIT & LINES_5X7 ); while( BusyXLCD() ); putrsXLCD(szoveg); //első sor kiírása while( BusyXLCD() ); SetDDRamAddr(0xC0); //kurzor a második sor elejére while( BusyXLCD() ); //második sor kiírása putrsXLCD("PIC18F14K50 MCU"); while(1); }
Javítása: a fájl elején az első hosszú
#if defined ( ADC_V1 ) || defined ( ADC_V2 ) ... stb.
#define ADC_REF_VDD_VDD 0b11110011 // ADC voltage source VREF+ = AVDD #define ADC_REF_VDD_VREFPLUS 0b11110111 // ADC voltage source VREF+ = ext. source at VREF+ #define ADC_REF_VDD_FVREF 0b11111011 // ADC voltage source VREF+ = FVREF+
A PIC18F14K50 analóg csatornái egymástól függetlenül engedélyezhetők. Ehhez nincs jó gyári makró, ezért definiáltam néhányat az OpenADC() függvény negyedik paraméterének (az ANSEL és ANSELH registerekbe írandó érték) kényelmes összeállításához.
#define ENABLE_AN3 0x0008 #define ENABLE_AN4 0x0010 #define ENABLE_AN5 0x0020 #define ENABLE_AN6 0x0040 #define ENABLE_AN7 0x0080 #define ENABLE_AN8 0x0100 #define ENABLE_AN9 0x0200 #define ENABLE_AN10 0x0400 #define ENABLE_AN11 0x0800
#include "adc.h" #define USE_OR_MASKS OpenADC(ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_20_TAD, ADC_CH10 | ADC_INT_OFF, ADC_REF_VDD_VDD | ADC_REF_VDD_VSS, ENABLE_AN10 | ENABLE_AN11);