kevin ollivier / Mbed 2 deprecated LCD_clavier

Dependencies:   mbed

Committer:
kevin_38
Date:
Tue May 29 09:30:20 2012 +0000
Revision:
0:18d40dac71ff

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevin_38 0:18d40dac71ff 1 /*Modification de :" mbed TextLCD Library, for a 4-bit LCD based on HD44780........"
kevin_38 0:18d40dac71ff 2 pour la commande d'un afficheur 4x40 (M4024)
kevin_38 0:18d40dac71ff 3 */
kevin_38 0:18d40dac71ff 4 #include "TextLCD_4x40.h"
kevin_38 0:18d40dac71ff 5 #include "mbed.h"
kevin_38 0:18d40dac71ff 6
kevin_38 0:18d40dac71ff 7 TextLCD_4x40::TextLCD_4x40(PinName rs, PinName e, PinName d0, PinName d1, PinName d2, PinName d3) :
kevin_38 0:18d40dac71ff 8 _rs(rs),_e(e), _d(d0, d1, d2, d3) {
kevin_38 0:18d40dac71ff 9
kevin_38 0:18d40dac71ff 10 //-------------------------------------
kevin_38 0:18d40dac71ff 11 char euro_v1[8]={0x06,0x09,0x1c,0x08,0x1C,0x09,0x06,0}//symbole euro
kevin_38 0:18d40dac71ff 12 ,e_aigu[8] ={0x02,0x04,0x0e,0x11,0x1f,0x10,0x0e,0}//e accent aigu
kevin_38 0:18d40dac71ff 13 ;
kevin_38 0:18d40dac71ff 14 //-------------------------------------
kevin_38 0:18d40dac71ff 15 char i;
kevin_38 0:18d40dac71ff 16 _e = 1;
kevin_38 0:18d40dac71ff 17 _rs = 0; // command mode
kevin_38 0:18d40dac71ff 18
kevin_38 0:18d40dac71ff 19 wait_ms(15); // Wait 15ms to ensure powered up
kevin_38 0:18d40dac71ff 20
kevin_38 0:18d40dac71ff 21 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
kevin_38 0:18d40dac71ff 22 for (char i=0; i<3; i++) {
kevin_38 0:18d40dac71ff 23 writeByte(0x3);
kevin_38 0:18d40dac71ff 24 wait_us(1640); // this command takes 1.64ms, so wait for it
kevin_38 0:18d40dac71ff 25 }
kevin_38 0:18d40dac71ff 26 writeByte(0x2); // 4-bit mode
kevin_38 0:18d40dac71ff 27 wait_us(40); // most instructions take 40us
kevin_38 0:18d40dac71ff 28
kevin_38 0:18d40dac71ff 29 writeCommand(0x28); // Function set 001 BW N F - -
kevin_38 0:18d40dac71ff 30 writeCommand(0x0C);
kevin_38 0:18d40dac71ff 31 writeCommand(0x6); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
kevin_38 0:18d40dac71ff 32 cls();
kevin_38 0:18d40dac71ff 33 wait_ms(6);
kevin_38 0:18d40dac71ff 34
kevin_38 0:18d40dac71ff 35 ////////////////////// Generateur de caracteres ////////////////////////////////
kevin_38 0:18d40dac71ff 36 //........ chargement du 1er caractere .........
kevin_38 0:18d40dac71ff 37 for(i=0;i<=7;i++){
kevin_38 0:18d40dac71ff 38 writeCommand(0x40+i);
kevin_38 0:18d40dac71ff 39 writeData(e_aigu[i]);
kevin_38 0:18d40dac71ff 40 }
kevin_38 0:18d40dac71ff 41 //........ chargement du 2eme caractere .........
kevin_38 0:18d40dac71ff 42 for(i=0;i<=7;i++){
kevin_38 0:18d40dac71ff 43 writeCommand(0x48+i);
kevin_38 0:18d40dac71ff 44 writeData(euro_v1[i]);
kevin_38 0:18d40dac71ff 45 }
kevin_38 0:18d40dac71ff 46 /////////////////////// Fin du generateur de caracteres ///////////////////////
kevin_38 0:18d40dac71ff 47
kevin_38 0:18d40dac71ff 48 writeCommand(2);// "home" pour que l'afficheur soit pret a afficher,
kevin_38 0:18d40dac71ff 49 // pour sortir du generateur de caracteres
kevin_38 0:18d40dac71ff 50 }
kevin_38 0:18d40dac71ff 51
kevin_38 0:18d40dac71ff 52 void TextLCD_4x40::character(char column, char row, char c) {
kevin_38 0:18d40dac71ff 53 char a = address(column, row);
kevin_38 0:18d40dac71ff 54 writeCommand(a);
kevin_38 0:18d40dac71ff 55 writeData(c);
kevin_38 0:18d40dac71ff 56 }
kevin_38 0:18d40dac71ff 57
kevin_38 0:18d40dac71ff 58 void TextLCD_4x40::cls() {
kevin_38 0:18d40dac71ff 59 writeCommand(0x01); // cls, and set cursor to 0
kevin_38 0:18d40dac71ff 60 wait_us(1640); // This command takes 1.64 ms
kevin_38 0:18d40dac71ff 61 // locate(0, 0);
kevin_38 0:18d40dac71ff 62 }
kevin_38 0:18d40dac71ff 63
kevin_38 0:18d40dac71ff 64 void TextLCD_4x40::locate(char column, char row) {
kevin_38 0:18d40dac71ff 65 _column = column;
kevin_38 0:18d40dac71ff 66 _row = row;
kevin_38 0:18d40dac71ff 67 }
kevin_38 0:18d40dac71ff 68
kevin_38 0:18d40dac71ff 69 //-----------------------------
kevin_38 0:18d40dac71ff 70 int TextLCD_4x40::_putc(int value) {
kevin_38 0:18d40dac71ff 71 switch(value)
kevin_38 0:18d40dac71ff 72 {
kevin_38 0:18d40dac71ff 73 case '\f':
kevin_38 0:18d40dac71ff 74 cls();
kevin_38 0:18d40dac71ff 75 break;
kevin_38 0:18d40dac71ff 76
kevin_38 0:18d40dac71ff 77 case '\n':
kevin_38 0:18d40dac71ff 78 _column = 0;
kevin_38 0:18d40dac71ff 79 _row++;
kevin_38 0:18d40dac71ff 80 if (_row >= 2) {
kevin_38 0:18d40dac71ff 81 _row = 0;
kevin_38 0:18d40dac71ff 82 }
kevin_38 0:18d40dac71ff 83 break;
kevin_38 0:18d40dac71ff 84
kevin_38 0:18d40dac71ff 85 case '\b':
kevin_38 0:18d40dac71ff 86 writeCommand(0x10);
kevin_38 0:18d40dac71ff 87 break;
kevin_38 0:18d40dac71ff 88
kevin_38 0:18d40dac71ff 89 case '\1':
kevin_38 0:18d40dac71ff 90 writeData(0);
kevin_38 0:18d40dac71ff 91 break;
kevin_38 0:18d40dac71ff 92 case '\2':
kevin_38 0:18d40dac71ff 93 writeData(1);
kevin_38 0:18d40dac71ff 94 break;
kevin_38 0:18d40dac71ff 95 default:
kevin_38 0:18d40dac71ff 96 writeData(value);
kevin_38 0:18d40dac71ff 97 break;
kevin_38 0:18d40dac71ff 98 }
kevin_38 0:18d40dac71ff 99 return value;
kevin_38 0:18d40dac71ff 100 }
kevin_38 0:18d40dac71ff 101 //-----------------------------
kevin_38 0:18d40dac71ff 102 int TextLCD_4x40::_getc() {
kevin_38 0:18d40dac71ff 103 return -1;
kevin_38 0:18d40dac71ff 104 }
kevin_38 0:18d40dac71ff 105
kevin_38 0:18d40dac71ff 106 void TextLCD_4x40::writeByte(char value) {
kevin_38 0:18d40dac71ff 107 _d = value >> 4;
kevin_38 0:18d40dac71ff 108 wait_us(40); // most instructions take 40us
kevin_38 0:18d40dac71ff 109 _e = 0;
kevin_38 0:18d40dac71ff 110 wait_us(40);
kevin_38 0:18d40dac71ff 111 _e = 1;
kevin_38 0:18d40dac71ff 112 _d = value >> 0;
kevin_38 0:18d40dac71ff 113 wait_us(40);
kevin_38 0:18d40dac71ff 114 _e = 0;
kevin_38 0:18d40dac71ff 115 wait_us(40); // most instructions take 40us
kevin_38 0:18d40dac71ff 116 _e = 1;
kevin_38 0:18d40dac71ff 117 }
kevin_38 0:18d40dac71ff 118
kevin_38 0:18d40dac71ff 119 void TextLCD_4x40::writeCommand(char command) {
kevin_38 0:18d40dac71ff 120 _rs = 0;
kevin_38 0:18d40dac71ff 121 writeByte(command);
kevin_38 0:18d40dac71ff 122 }
kevin_38 0:18d40dac71ff 123
kevin_38 0:18d40dac71ff 124 void TextLCD_4x40::writeData(char data) {
kevin_38 0:18d40dac71ff 125 _rs = 1;
kevin_38 0:18d40dac71ff 126 writeByte(data);
kevin_38 0:18d40dac71ff 127 }
kevin_38 0:18d40dac71ff 128
kevin_38 0:18d40dac71ff 129 char TextLCD_4x40::address(char column, char row) {
kevin_38 0:18d40dac71ff 130 return 0x80 + (row * 0x40) + column;
kevin_38 0:18d40dac71ff 131 }