Example Audio Spectrum Analyzer

Dependencies:   mbed FFT

Committer:
Suky
Date:
Fri Feb 11 00:37:57 2011 +0000
Revision:
0:74f5a741c618

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Suky 0:74f5a741c618 1 /*
Suky 0:74f5a741c618 2 @file LCD_Serial.h
Suky 0:74f5a741c618 3 @version: 1.0
Suky 0:74f5a741c618 4
Suky 0:74f5a741c618 5 @web www.micros-designs.com.ar
Suky 0:74f5a741c618 6 @date 05/02/11
Suky 0:74f5a741c618 7
Suky 0:74f5a741c618 8 *- Version Log --------------------------------------------------------------*
Suky 0:74f5a741c618 9 * Fecha Autor Comentarios *
Suky 0:74f5a741c618 10 *----------------------------------------------------------------------------*
Suky 0:74f5a741c618 11 * 05/02/11 Suky Original *
Suky 0:74f5a741c618 12 *----------------------------------------------------------------------------*/
Suky 0:74f5a741c618 13 ///////////////////////////////////////////////////////////////////////////
Suky 0:74f5a741c618 14 //// ////
Suky 0:74f5a741c618 15 //// ////
Suky 0:74f5a741c618 16 //// (C) Copyright 2011 www.micros-designs.com.ar ////
Suky 0:74f5a741c618 17 //// Este codigo puede ser usado, modificado y distribuido libremente ////
Suky 0:74f5a741c618 18 //// sin eliminar esta cabecera y sin garantia de ningun tipo. ////
Suky 0:74f5a741c618 19 //// ////
Suky 0:74f5a741c618 20 //// ////
Suky 0:74f5a741c618 21 ///////////////////////////////////////////////////////////////////////////
Suky 0:74f5a741c618 22 #include "mbed.h"
Suky 0:74f5a741c618 23 #include "DataCGRAM.h"
Suky 0:74f5a741c618 24
Suky 0:74f5a741c618 25 class LCDSerial:public Stream {
Suky 0:74f5a741c618 26 public:
Suky 0:74f5a741c618 27 #define LCDClr 0x01 // Borra pantalla, cursor a Inicio
Suky 0:74f5a741c618 28 #define LCDHome 0x02 // Cursor a Inicio, DDRAM sin cambios
Suky 0:74f5a741c618 29 #define LCDIncCursor 0x06 // Modo incrementa cursor
Suky 0:74f5a741c618 30 #define LCDDecCursor 0x04 // Modo decrementa cursor
Suky 0:74f5a741c618 31 #define LCDOn 0x0C // Pantalla On
Suky 0:74f5a741c618 32 #define LCDOff 0x08 // Pantalla Off
Suky 0:74f5a741c618 33 #define LCDCursorOn 0x0E // Pantalla On, cursor On
Suky 0:74f5a741c618 34 #define LCDCursorOff 0x0C // Pantalla On, cursor Off
Suky 0:74f5a741c618 35 #define LCDCursorBlink 0x0F // Pantalla On, Cursor parpadeante
Suky 0:74f5a741c618 36 #define LCDCursorLeft 0x10 // Mueve cursor a la izquierda
Suky 0:74f5a741c618 37 #define LCDCursorRight 0x14 // Mueve cursor a la derecha
Suky 0:74f5a741c618 38 #define LCDDisplayLeft 0x18 // Mueve Display a la izquierda
Suky 0:74f5a741c618 39 #define LCDDisplayRight 0x1C // Mueve Display a la Derecha
Suky 0:74f5a741c618 40 /** Crea LCD interface
Suky 0:74f5a741c618 41 *
Suky 0:74f5a741c618 42 * @param DATA
Suky 0:74f5a741c618 43 * @param CLK
Suky 0:74f5a741c618 44 * @param E
Suky 0:74f5a741c618 45 */
Suky 0:74f5a741c618 46 LCDSerial(PinName DATA,PinName CLK,PinName E,PinName BACK=NC);
Suky 0:74f5a741c618 47 void vGotoxy(char x,char y);
Suky 0:74f5a741c618 48 void vSetBacklight(bool Value);
Suky 0:74f5a741c618 49 void vPutc(char Data);
Suky 0:74f5a741c618 50 void vCommand(char Data);
Suky 0:74f5a741c618 51 #if DOXYGEN_ONLY
Suky 0:74f5a741c618 52 /** Escribe un caracter en LCD
Suky 0:74f5a741c618 53 *
Suky 0:74f5a741c618 54 * @param c El caracter a escribir en LCD
Suky 0:74f5a741c618 55 */
Suky 0:74f5a741c618 56 int putc(int c);
Suky 0:74f5a741c618 57
Suky 0:74f5a741c618 58 /** Escribe un string formateado en LCD
Suky 0:74f5a741c618 59 *
Suky 0:74f5a741c618 60 * @param format A printf-style format string, followed by the
Suky 0:74f5a741c618 61 * variables to use in formating the string.
Suky 0:74f5a741c618 62 */
Suky 0:74f5a741c618 63 int printf(const char* format, ...);
Suky 0:74f5a741c618 64 #endif
Suky 0:74f5a741c618 65 private:
Suky 0:74f5a741c618 66 #define LcdType 2 // 0=5x7, 1=5x10, 2=varias lineas
Suky 0:74f5a741c618 67 #define LCD_LINE_1_ADDRESS 0x00
Suky 0:74f5a741c618 68 #define LCD_LINE_2_ADDRESS 0x40
Suky 0:74f5a741c618 69 #define LCD_LINE_3_ADDRESS 0x14
Suky 0:74f5a741c618 70 #define LCD_LINE_4_ADDRESS 0x54
Suky 0:74f5a741c618 71 #define LCD_COMMAND 0
Suky 0:74f5a741c618 72 #define LCD_DATA 1
Suky 0:74f5a741c618 73 DigitalOut _DATA,_CLK,_E,_BACK;
Suky 0:74f5a741c618 74 char NLinea;
Suky 0:74f5a741c618 75 // Stream implementation functions
Suky 0:74f5a741c618 76 virtual int _putc(int value);
Suky 0:74f5a741c618 77 virtual int _getc();
Suky 0:74f5a741c618 78 virtual void vWriteLCD(char Data,char Type);
Suky 0:74f5a741c618 79 virtual void vSetCGRAM(const char *Data);
Suky 0:74f5a741c618 80 };
Suky 0:74f5a741c618 81
Suky 0:74f5a741c618 82
Suky 0:74f5a741c618 83 LCDSerial::LCDSerial(PinName DATA,PinName CLK,PinName E,PinName BACK)
Suky 0:74f5a741c618 84 :_DATA(DATA),_CLK(CLK),_E(E),_BACK(BACK){
Suky 0:74f5a741c618 85 char Temp;
Suky 0:74f5a741c618 86
Suky 0:74f5a741c618 87 NLinea=1;
Suky 0:74f5a741c618 88 wait_ms(15);
Suky 0:74f5a741c618 89 _DATA=0;
Suky 0:74f5a741c618 90 _CLK=0;
Suky 0:74f5a741c618 91 _E=0;
Suky 0:74f5a741c618 92 _BACK=0;
Suky 0:74f5a741c618 93
Suky 0:74f5a741c618 94 for(int k=0;k<8;k++){
Suky 0:74f5a741c618 95 _CLK=1;
Suky 0:74f5a741c618 96 wait_us(1);
Suky 0:74f5a741c618 97 _CLK=0;
Suky 0:74f5a741c618 98 wait_us(1);
Suky 0:74f5a741c618 99 }
Suky 0:74f5a741c618 100
Suky 0:74f5a741c618 101 Temp=0x03;
Suky 0:74f5a741c618 102 for(int k=0;k<8;k++){
Suky 0:74f5a741c618 103 _DATA=!!(Temp&0x80);
Suky 0:74f5a741c618 104 Temp<<=1;
Suky 0:74f5a741c618 105 _CLK=1;
Suky 0:74f5a741c618 106 wait_us(1);
Suky 0:74f5a741c618 107 _CLK=0;
Suky 0:74f5a741c618 108 }
Suky 0:74f5a741c618 109 for(int k=0;k<3;k++){
Suky 0:74f5a741c618 110 _E=1;
Suky 0:74f5a741c618 111 wait_ms(2);
Suky 0:74f5a741c618 112 _E=0;
Suky 0:74f5a741c618 113 wait_ms(2);
Suky 0:74f5a741c618 114 }
Suky 0:74f5a741c618 115 Temp=0x02;
Suky 0:74f5a741c618 116 for(int k=0;k<8;k++){
Suky 0:74f5a741c618 117 _DATA=!!(Temp&0x80);
Suky 0:74f5a741c618 118 Temp<<=1;
Suky 0:74f5a741c618 119 _CLK=1;
Suky 0:74f5a741c618 120 wait_us(1);
Suky 0:74f5a741c618 121 _CLK=0;
Suky 0:74f5a741c618 122 }
Suky 0:74f5a741c618 123 _E=1;
Suky 0:74f5a741c618 124 wait_us(1);
Suky 0:74f5a741c618 125 _E=0;
Suky 0:74f5a741c618 126
Suky 0:74f5a741c618 127 vWriteLCD(0x20 | (LcdType<<2),LCD_COMMAND); // Tipo display.-
Suky 0:74f5a741c618 128 wait_ms(2);
Suky 0:74f5a741c618 129 vWriteLCD(0x01,LCD_COMMAND); // Borramos display.-
Suky 0:74f5a741c618 130 wait_ms(2);
Suky 0:74f5a741c618 131 vWriteLCD(0x06,LCD_COMMAND); // Incrementa cursor.-
Suky 0:74f5a741c618 132 vWriteLCD(0x0C,LCD_COMMAND); // Encendemos display.-
Suky 0:74f5a741c618 133 vSetCGRAM(CGRAM_DATA); // Guardamos data en CGRAM.-
Suky 0:74f5a741c618 134 }
Suky 0:74f5a741c618 135
Suky 0:74f5a741c618 136 void LCDSerial::vWriteLCD(char Data,char Type){
Suky 0:74f5a741c618 137 char data_temp;
Suky 0:74f5a741c618 138
Suky 0:74f5a741c618 139
Suky 0:74f5a741c618 140 wait_us(100);
Suky 0:74f5a741c618 141
Suky 0:74f5a741c618 142 data_temp=(Data>>4); // Rs es bit 4
Suky 0:74f5a741c618 143 if(Type){
Suky 0:74f5a741c618 144 data_temp|=0x10;
Suky 0:74f5a741c618 145 }
Suky 0:74f5a741c618 146 for(int i=0;i<8;i++){
Suky 0:74f5a741c618 147 _DATA=!!(data_temp & 0x80);
Suky 0:74f5a741c618 148 data_temp<<=1;
Suky 0:74f5a741c618 149 _CLK=1;
Suky 0:74f5a741c618 150 wait_us(1);
Suky 0:74f5a741c618 151 _CLK=0;
Suky 0:74f5a741c618 152 }
Suky 0:74f5a741c618 153
Suky 0:74f5a741c618 154 _E = 1;
Suky 0:74f5a741c618 155 wait_us(1);
Suky 0:74f5a741c618 156 _E = 0;
Suky 0:74f5a741c618 157 data_temp=(Data&0x0F); // Rs es bit 4
Suky 0:74f5a741c618 158 if(Type){
Suky 0:74f5a741c618 159 data_temp|=0x10;
Suky 0:74f5a741c618 160 }
Suky 0:74f5a741c618 161 for(int i=0;i<8;i++){
Suky 0:74f5a741c618 162 _DATA=!!(data_temp & 0x80);
Suky 0:74f5a741c618 163 data_temp<<=1;
Suky 0:74f5a741c618 164 _CLK=1;
Suky 0:74f5a741c618 165 wait_us(1);
Suky 0:74f5a741c618 166 _CLK=0;
Suky 0:74f5a741c618 167 }
Suky 0:74f5a741c618 168 _E = 1;
Suky 0:74f5a741c618 169 wait_us(1);
Suky 0:74f5a741c618 170 _E = 0;
Suky 0:74f5a741c618 171
Suky 0:74f5a741c618 172 }
Suky 0:74f5a741c618 173
Suky 0:74f5a741c618 174 void LCDSerial::vGotoxy(char x,char y){
Suky 0:74f5a741c618 175 char Direccion;
Suky 0:74f5a741c618 176
Suky 0:74f5a741c618 177 switch(y){
Suky 0:74f5a741c618 178 case 1:Direccion = LCD_LINE_1_ADDRESS;NLinea=1;break;
Suky 0:74f5a741c618 179 case 2:Direccion = LCD_LINE_2_ADDRESS;NLinea=2;break;
Suky 0:74f5a741c618 180 case 3:Direccion = LCD_LINE_3_ADDRESS;NLinea=3;break;
Suky 0:74f5a741c618 181 case 4:Direccion = LCD_LINE_4_ADDRESS;NLinea=4;break;
Suky 0:74f5a741c618 182 default:Direccion = LCD_LINE_1_ADDRESS;NLinea=1;break;
Suky 0:74f5a741c618 183 }
Suky 0:74f5a741c618 184
Suky 0:74f5a741c618 185 Direccion+=x-1;
Suky 0:74f5a741c618 186 vWriteLCD(0x80|Direccion,LCD_COMMAND);
Suky 0:74f5a741c618 187 }
Suky 0:74f5a741c618 188
Suky 0:74f5a741c618 189 int LCDSerial::_getc(){
Suky 0:74f5a741c618 190 return(-1);
Suky 0:74f5a741c618 191 }
Suky 0:74f5a741c618 192
Suky 0:74f5a741c618 193 int LCDSerial::_putc(int value){
Suky 0:74f5a741c618 194
Suky 0:74f5a741c618 195 switch(value){
Suky 0:74f5a741c618 196 case '\f':
Suky 0:74f5a741c618 197 vWriteLCD(0x01,LCD_COMMAND);
Suky 0:74f5a741c618 198 NLinea=1;
Suky 0:74f5a741c618 199 wait_ms(2);
Suky 0:74f5a741c618 200 break;
Suky 0:74f5a741c618 201 case '\n':
Suky 0:74f5a741c618 202 vGotoxy(1,++NLinea);
Suky 0:74f5a741c618 203 break;
Suky 0:74f5a741c618 204 default:
Suky 0:74f5a741c618 205 vWriteLCD(value,LCD_DATA);
Suky 0:74f5a741c618 206 }
Suky 0:74f5a741c618 207
Suky 0:74f5a741c618 208 return(value);
Suky 0:74f5a741c618 209 }
Suky 0:74f5a741c618 210
Suky 0:74f5a741c618 211 void LCDSerial::vSetBacklight(bool Value){
Suky 0:74f5a741c618 212 _BACK=Value;
Suky 0:74f5a741c618 213 }
Suky 0:74f5a741c618 214
Suky 0:74f5a741c618 215 void LCDSerial::vSetCGRAM(const char *Data){
Suky 0:74f5a741c618 216
Suky 0:74f5a741c618 217 vWriteLCD(0x40,LCD_COMMAND);
Suky 0:74f5a741c618 218 for(int k=0;k<64;k++){
Suky 0:74f5a741c618 219 vWriteLCD(*Data++,LCD_DATA);
Suky 0:74f5a741c618 220 }
Suky 0:74f5a741c618 221 }
Suky 0:74f5a741c618 222
Suky 0:74f5a741c618 223 void LCDSerial::vPutc(char Data){
Suky 0:74f5a741c618 224 _putc(Data);
Suky 0:74f5a741c618 225 }
Suky 0:74f5a741c618 226
Suky 0:74f5a741c618 227 void LCDSerial::vCommand(char Data){
Suky 0:74f5a741c618 228 vWriteLCD(Data,LCD_COMMAND);
Suky 0:74f5a741c618 229 }