V4

Dependencies:   BMP280

Fork of Thread_Communication_V4_fortest by BDG

Committer:
benparkes
Date:
Sat Jan 06 21:18:06 2018 +0000
Revision:
18:728fddea6d9c
Parent:
14:7c4d87dfc388
time with mail;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benparkes 0:cb3a5c15b01e 1 #include "mbed.h"
benparkes 0:cb3a5c15b01e 2
benparkes 0:cb3a5c15b01e 3 #include "LCD.h"
benparkes 0:cb3a5c15b01e 4 #define busy_mask 0x8000
benparkes 0:cb3a5c15b01e 5
benparkes 0:cb3a5c15b01e 6
benparkes 0:cb3a5c15b01e 7 LCD::LCD(PinName RS, PinName E, PinName d4, PinName d5,
benparkes 0:cb3a5c15b01e 8 PinName d6, PinName d7) : _RS(RS),
benparkes 0:cb3a5c15b01e 9 _E(E), _DBUS(d4, d5, d6, d7) {
benparkes 0:cb3a5c15b01e 10
benparkes 0:cb3a5c15b01e 11 _E = 0;
benparkes 0:cb3a5c15b01e 12 _RS = 0; // command mode
benparkes 0:cb3a5c15b01e 13
benparkes 0:cb3a5c15b01e 14 wait(0.015); // Wait 15ms to ensure powered up
benparkes 0:cb3a5c15b01e 15
benparkes 0:cb3a5c15b01e 16 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
benparkes 0:cb3a5c15b01e 17
benparkes 0:cb3a5c15b01e 18 wait(0.015); // Wait 15ms to ensure powered up
benparkes 0:cb3a5c15b01e 19
benparkes 0:cb3a5c15b01e 20 for (int i=0; i<3; i++) {
benparkes 0:cb3a5c15b01e 21 DATA(0x30, CMD);
benparkes 0:cb3a5c15b01e 22 wait(0.00164); // this command takes 1.64ms, so wait for it
benparkes 0:cb3a5c15b01e 23 }
benparkes 0:cb3a5c15b01e 24 DATA(0x02, CMD); // 4-bit mode
benparkes 0:cb3a5c15b01e 25 wait(0.000040f); // most instructions take 40us
benparkes 0:cb3a5c15b01e 26
benparkes 0:cb3a5c15b01e 27 DATA(0x28,CMD); // Function set 001 BW N F - -
benparkes 0:cb3a5c15b01e 28 DATA(0x0C,CMD);
benparkes 0:cb3a5c15b01e 29 DATA(0x06,CMD); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
benparkes 0:cb3a5c15b01e 30 Clear();
benparkes 0:cb3a5c15b01e 31 DATA(0x01,CMD); // cls, and set cursor to 0
benparkes 0:cb3a5c15b01e 32 wait(0.00164f); // This command takes 1.64 ms
benparkes 0:cb3a5c15b01e 33 Write("Constructed");
benparkes 0:cb3a5c15b01e 34 }
benparkes 0:cb3a5c15b01e 35
benparkes 0:cb3a5c15b01e 36
benparkes 0:cb3a5c15b01e 37
benparkes 0:cb3a5c15b01e 38
benparkes 0:cb3a5c15b01e 39 /*int main(){
benparkes 0:cb3a5c15b01e 40 //(PF_13, PE_9, PF_14, PF_15)
benparkes 0:cb3a5c15b01e 41 //(PF_15, PF_14, PE_9,PF_13)
benparkes 0:cb3a5c15b01e 42 LCD_DBUS = new BusInOut(PF_13, PE_9, PF_14, PF_15) ;
benparkes 0:cb3a5c15b01e 43 LCD_Init();
benparkes 0:cb3a5c15b01e 44 while(1){
benparkes 0:cb3a5c15b01e 45 write_string("Hi");
benparkes 0:cb3a5c15b01e 46 wait(0.1);
benparkes 0:cb3a5c15b01e 47 }
benparkes 0:cb3a5c15b01e 48 }
benparkes 0:cb3a5c15b01e 49 */
benparkes 0:cb3a5c15b01e 50 // Initialise LCD Pins //
benparkes 0:cb3a5c15b01e 51 /*void LCD_Init(void){
benparkes 0:cb3a5c15b01e 52 LCD_E = 0;; //clear enable
benparkes 0:cb3a5c15b01e 53 LCD_RW = 0; // write
benparkes 0:cb3a5c15b01e 54 LCD_RS = 0; // command
benparkes 0:cb3a5c15b01e 55
benparkes 0:cb3a5c15b01e 56 wait_ms(3); //delay for LCD to initialise.
benparkes 0:cb3a5c15b01e 57
benparkes 0:cb3a5c15b01e 58 LCD_DATA(0x28,CMD); //set to 4 bit interface, 2 line and 5*8 font
benparkes 0:cb3a5c15b01e 59 LCD_DATA(0x0f,CMD); //cursor on, cursor position blink
benparkes 0:cb3a5c15b01e 60 LCD_DATA(0x10,CMD);
benparkes 0:cb3a5c15b01e 61 LCD_CLR; //clear display
benparkes 0:cb3a5c15b01e 62 LCD_DATA(0x06,CMD); //move cursor right after write
benparkes 0:cb3a5c15b01e 63 LCD_HOME; //return home
benparkes 0:cb3a5c15b01e 64
benparkes 0:cb3a5c15b01e 65 LCD_E = 1;
benparkes 0:cb3a5c15b01e 66 LCD_RS = 0; // command mode
benparkes 0:cb3a5c15b01e 67 LCD_RW = 0;
benparkes 0:cb3a5c15b01e 68 wait(0.015); // Wait 15ms to ensure powered up
benparkes 0:cb3a5c15b01e 69
benparkes 0:cb3a5c15b01e 70 for (int i=0; i<3; i++) {
benparkes 0:cb3a5c15b01e 71 LCD_DATA(0x03, TXT);
benparkes 0:cb3a5c15b01e 72 wait(0.00164); // this command takes 1.64ms, so wait for it
benparkes 0:cb3a5c15b01e 73 }
benparkes 0:cb3a5c15b01e 74 LCD_DATA(0x02, TXT); // 4-bit mode
benparkes 0:cb3a5c15b01e 75 wait(0.000040f); // most instructions take 40us
benparkes 0:cb3a5c15b01e 76
benparkes 0:cb3a5c15b01e 77 LCD_DATA(0x28,CMD); // Function set 001 BW N F - -
benparkes 0:cb3a5c15b01e 78 LCD_DATA(0x0C,CMD);
benparkes 0:cb3a5c15b01e 79 LCD_DATA(0x06,CMD); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
benparkes 0:cb3a5c15b01e 80 LCD_DATA(0x01,CMD); // cls, and set cursor to 0
benparkes 0:cb3a5c15b01e 81 wait(0.00164f); // This command takes 1.64 ms
benparkes 0:cb3a5c15b01e 82 }*/
benparkes 0:cb3a5c15b01e 83 /*---------------------------------------------------------------------*/
benparkes 0:cb3a5c15b01e 84 void LCD::Clear(void){
benparkes 0:cb3a5c15b01e 85 DATA(CLEAR,CMD);
benparkes 0:cb3a5c15b01e 86 }
benparkes 0:cb3a5c15b01e 87
benparkes 0:cb3a5c15b01e 88 void LCD::RowSelect(int row){
benparkes 0:cb3a5c15b01e 89 switch(row){
benparkes 0:cb3a5c15b01e 90 case 0:
dnonoo 8:ab6322afa341 91 DATA(LINE1,CMD);
dnonoo 8:ab6322afa341 92 break;
benparkes 0:cb3a5c15b01e 93 case 1:
dnonoo 8:ab6322afa341 94 DATA(LINE2,CMD);
dnonoo 8:ab6322afa341 95 break;
dnonoo 14:7c4d87dfc388 96 case 2:
dnonoo 14:7c4d87dfc388 97 DATA(LINE3,CMD);
dnonoo 14:7c4d87dfc388 98 break;
dnonoo 14:7c4d87dfc388 99 case 3:
dnonoo 14:7c4d87dfc388 100 DATA(LINE4,CMD);
dnonoo 14:7c4d87dfc388 101 break;
benparkes 0:cb3a5c15b01e 102 default:
dnonoo 8:ab6322afa341 103 DATA(LINE1,CMD);
dnonoo 8:ab6322afa341 104 break;
benparkes 0:cb3a5c15b01e 105 }
benparkes 0:cb3a5c15b01e 106 }
benparkes 0:cb3a5c15b01e 107
benparkes 0:cb3a5c15b01e 108 void LCD::Busy(void)
benparkes 0:cb3a5c15b01e 109 {
benparkes 0:cb3a5c15b01e 110 wait_ms(1);
benparkes 0:cb3a5c15b01e 111 }
benparkes 0:cb3a5c15b01e 112 /*---------------------------------------------------------------------*/
benparkes 0:cb3a5c15b01e 113 void LCD::DATA(char data,char type){
benparkes 0:cb3a5c15b01e 114
benparkes 0:cb3a5c15b01e 115 Busy(); //TEST LCD FOR BUSY
benparkes 0:cb3a5c15b01e 116
benparkes 0:cb3a5c15b01e 117 _DBUS = (data>>4);
benparkes 0:cb3a5c15b01e 118
benparkes 0:cb3a5c15b01e 119 wait(0.00040f); // most instructions take 40us
benparkes 0:cb3a5c15b01e 120
benparkes 0:cb3a5c15b01e 121 if(type == CMD)
benparkes 0:cb3a5c15b01e 122 {
benparkes 0:cb3a5c15b01e 123 _RS = 0; //COMMAND MODE
benparkes 0:cb3a5c15b01e 124 }
benparkes 0:cb3a5c15b01e 125 else
benparkes 0:cb3a5c15b01e 126 {
benparkes 0:cb3a5c15b01e 127 _RS = 1; //CHARACTER/DATA MODE
benparkes 0:cb3a5c15b01e 128 }
benparkes 0:cb3a5c15b01e 129 wait(0.00040f);
benparkes 0:cb3a5c15b01e 130
benparkes 0:cb3a5c15b01e 131 _E = 1; //ENABLE LCD DATA LINE
benparkes 0:cb3a5c15b01e 132 wait(0.00040f); // most instructions take 40us
benparkes 0:cb3a5c15b01e 133 _E = 0; //DISABLE LCD DATA LINE
benparkes 0:cb3a5c15b01e 134
benparkes 0:cb3a5c15b01e 135 _DBUS = 0;
benparkes 0:cb3a5c15b01e 136
benparkes 0:cb3a5c15b01e 137 _DBUS = (data);
benparkes 0:cb3a5c15b01e 138
benparkes 0:cb3a5c15b01e 139 _E = 1; //ENABLE LCD DATA LINE
benparkes 0:cb3a5c15b01e 140 wait(0.00040f); // most instructions take 40us
benparkes 0:cb3a5c15b01e 141 _E = 0; //DISABLE LCD DATA LINE
benparkes 0:cb3a5c15b01e 142 }
benparkes 0:cb3a5c15b01e 143 /*---------------------------------------------------------------------*/
dnonoo 14:7c4d87dfc388 144 void LCD::Write(char text[80]){
benparkes 0:cb3a5c15b01e 145 int i = 0;
benparkes 0:cb3a5c15b01e 146
benparkes 0:cb3a5c15b01e 147
benparkes 0:cb3a5c15b01e 148 while((text[i] != 0))
benparkes 0:cb3a5c15b01e 149 {
benparkes 0:cb3a5c15b01e 150
benparkes 0:cb3a5c15b01e 151 char character = text[i];
benparkes 0:cb3a5c15b01e 152 DATA (character,TXT); // Write text "a" to the LCD
benparkes 0:cb3a5c15b01e 153
benparkes 0:cb3a5c15b01e 154 i++;
benparkes 0:cb3a5c15b01e 155 }
benparkes 0:cb3a5c15b01e 156 }