Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // in de header file staan alle function-prototypes en alle defines
- // de andere commando's zorgen ervoor dat dezelfde header-file
- // geen 2keer wordt geïnclude in dezelfde compilatie
- #ifndef LCD_H_
- #define LCD_H_
- #include <system.h>
- #define E portb.5 // enable
- #define RS portb.4 // registery select
- #define CLR_DISP 0x01 // clear display
- #define DISP_ON 0x0C // display on
- #define DISP_OFF 0x08 // display off
- #define CUR_HOME 0x02 // cursor naar eerste positie, set DDRAM naar adress 0
- #define CUR_OFF 0x0C // cursor uit
- #define CUR_ON 0x0E // cursor aan
- #define CUR_ON_BLINK 0x0F // cursor blinken
- #define CUR_LEFT 0x10 // cursor naar links
- #define CUR_RIGHT 0x14 // cursor naar rechts
- #define CUR_UP 0x80 // set DDRAM adress (lijn 1)
- #define CUR_DOWN 0xC0 // set DDRAM adress 2 (lijn 2)
- #define ENTER 0xC0 // set DDRAM adress 2 (lijn 2)
- #define DD_RAM_ADDR 0x80 // set DDRAM adress (lijn 1)
- #define DD_RAM_ADDR2 0xC0 // set DDRAM adress 2 (lijn 2)
- //UITBREIDINGEN
- #define DISP_SHIFT_LEFT 0x18 // display shift links
- #define DISP_SHIFT_RIGHT 0x1C // display shift rechts
- #define LINE1 0x80 // lijn 1 schrijven
- #define LINE2 0xC0 // lijn 1 schrijven
- void E_Pulse(void) {
- E=1;
- delay_us(100);
- E=0;
- }
- //********************************************************************
- // Send char to LCD
- void LCDSendChar(unsigned char c) {
- unsigned char data;
- delay_ms(20);
- //get upper nibble
- data = c & 0b11110000;
- //set b3-b0
- data = data >> 4;
- //send data to LCD
- portb = data;
- //set LCD to write
- //RW=0;
- //set LCD to data mode
- RS=1;
- //toggle Enable for LCD
- E_Pulse();
- // get lower nibble
- data = c & 0b00001111;
- //send data to LCD
- portb = data;
- //set LCD to write
- //RW=0;
- //set LCD to data mode
- RS=1;
- //toggle Enable for LCD
- E_Pulse();
- }
- //********************************************************************
- // Send command to LCD
- void LCDSendCmd(unsigned char c) {
- unsigned char data;
- delay_ms(20);
- //get upper nibble
- data = c & 0b11110000;
- //set b3-b0
- data = data >> 4;
- //send data to LCD
- portb = data;
- //set LCD to write
- //RW=0;
- //set LCD to data mode
- RS=0;
- //toggle E for LCD
- E_Pulse();
- // get lower nibble
- data = c & 0b00001111;
- portb = data;
- //set LCD to write
- //RW=0;
- //set LCD to data mode
- RS=0;
- //toggle Enable for LCD
- E_Pulse();
- }
- //********************************************************************
- void LCDSendStr(unsigned char* str) {
- // string doorsturen: karakter per karakter doorsturen
- unsigned int i=0;
- while(str[i]) {
- LCDSendChar(str[i]);
- i++;
- }
- }
- //********************************************************************
- // Init LCD after reset
- void InitLCD(void) {
- intcon = 0x0; // Disable interupt
- trisb.5 = 0; // E pin as output
- trisb = 0x00; // b0-b3 as output
- RS=0; // instructie
- delay_ms(110); // wacht 110ms
- //onderstaande waarden geinspireerd op ASSEMBLER oefeningen vorig jaar
- LCDSendCmd(0b00100000); // LCD-init
- delay_ms(20); // wacht 10ms
- LCDSendCmd(0b00100000); // LCD-init
- delay_ms(20); // wacht 10ms
- LCDSendCmd(0b00100000); // LCD-init
- delay_ms(20); // wacht 10ms
- LCDSendCmd(0b00101000); // function set
- // b4=0=dl > 4 bit interface
- // b3=0=N > display 1 line
- // b2=0=F > 5*8dots
- delay_ms(20); // wacht 10ms
- LCDSendCmd(0b00101000); // display control
- // b2=1 > display on
- // b1=0 > cursor on
- // b0=0 > cursor doesn't blink
- delay_ms(20); // wacht 10ms
- LCDSendCmd(0b00000001); // clear display
- delay_ms(20); // wacht 10ms
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement