Många studenter använder en LCD-display till sin programmeringsuppgift LCD displayer innehåller ofta sk. HD44780 pinkompatibla styrkretsar. Samma kod passar därför till många olika displayer – men inte alla, prova! GTC-08011-TS6L0C ELFA 75-511-20 GTC-1601-TR6N0C ELFA 75-511-53 18 Tex. 09-02-25 28 Tex. Pizza 58:90 Dvs. två rader direkt efter varandra! Lista över provade displayer finns på kurswebben. William Sandqvist william@kth.se
William Sandqvist william@kth.se Kontaktstandard Displayer med enradiga kontakter är enklare att ansluta till kopplingsdäck än de med tvåradiga. William Sandqvist william@kth.se
Spara ledningar - nibble-mode Att mata spädbarn går lättare när man ger smakbitar (nibble). Eftersom två smakbitar blir till en munsbit (byte), kan barnet ändå bli mätt till slut. När det gäller små PIC-processorer har man ofta ont om pinnar. Alla LCD-displayer har en finess som gör att tecken och kommandon kan "matas in" med 2 st 4-bitarstal (nibble) i följd, i stället för med ett 8-bitarstal (byte). Det kommando som "ställer in" om 8 eller 4 dataledningar ska användas måste ges först. Detta kommando har naturligtvis valts så att 4 bitar räcker för att skilja det från de övriga kommandona! William Sandqvist william@kth.se
Koppla så här med 6 ledningar Med felinställd kontrast får Du aldrig se hur bra det fungerar! William Sandqvist william@kth.se
William Sandqvist william@kth.se Definiera portpinnar Man måste ofta ”blanda” lediga pinnar från olika portar … void lcd_putchar( char data ) /* I/O-pin definitions */ /* change if you need a pin for a different use */ #pragma bit RS @ PORTB.5 #pragma bit EN @ PORTB.3 #pragma bit D7 @ PORTA.3 #pragma bit D6 @ PORTA.2 #pragma bit D5 @ PORTA.1 #pragma bit D4 @ PORTA.0 William Sandqvist william@kth.se
William Sandqvist william@kth.se lcd_putchar() void lcd_putchar( char data ) { // upper Nybble D7 = data.7; D6 = data.6; D5 = data.5; D4 = data.4; EN = 0; nop(); EN = 1; delay(5); // lower Nybble D7 = data.3; D6 = data.2; D5 = data.1; D4 = data.0; EN = 0; nop(); EN = 1; delay(5); } Välj mode innan anropet: RS = 1 character mode RS = 0 command mode William Sandqvist william@kth.se
William Sandqvist william@kth.se lcd_init() void lcd_init( void ) { delay(40); // give LCD time to settle /* Function set */ RS = 0; // LCD in command-mode // 0010.xxxx 4-bit mode lcd_putchar(0b0010.0010); // The display is actual two lines after each other // 4bitmode.two line.display off.xx lcd_putchar(0b0010.1.0.00); /* Display ON/OFF Control */ // 0000.1.display on.cursor off.blink off lcd_putchar(0b0000.1.1.0.0); /* Display clear */ // 0000.0001 lcd_putchar(0b0000.0001); /* Entry mode set */ // 0000.01.increment mode.shift off lcd_putchar(0b0000.01.1.0); // initialization is done! } Funktionen måste anropas en gång innan displayen kan användas! William Sandqvist william@kth.se
William Sandqvist william@kth.se Egna tecken! Det finns 8 egendefinierade tecken. När vi definierat ÅåÄäÖö finns det ändå två kvar till dig … // Pixel definitions of up to 8 user defined characters RS = 0; // command-mode lcd_putchar(0b01.000000); // Move Cursor into CGRAM RS =1; // data-mode // Pixel definition of user defined Character 0 (å) lcd_putchar(0b000.00100); lcd_putchar(0b000.00000); lcd_putchar(0b000.01110); lcd_putchar(0b000.00001); lcd_putchar(0b000.01111); lcd_putchar(0b000.10001); lcd_putchar(0b000.01110); lcd_putchar(0b000.00000); Ser Du systemet? Bra att Knudsen har binära konstanter! lcd_putchar( 0 ); // user defined Ch 0 is 'å' William Sandqvist william@kth.se