Dependents:   vmConfort_v6 Programski_zadatak_23 Projektni_zadatak_23 tempivolt

Committer:
RichardUK
Date:
Sun Apr 08 12:51:51 2012 +0000
Revision:
1:fc4c861451e1
Parent:
0:6c0e68e0d876
Fixed a bug in the printf func.
Added comments.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardUK 0:6c0e68e0d876 1
RichardUK 0:6c0e68e0d876 2 #ifndef __DISPLAY1602_H__
RichardUK 0:6c0e68e0d876 3 #define __DISPLAY1602_H__
RichardUK 0:6c0e68e0d876 4
RichardUK 0:6c0e68e0d876 5 #include "mbed.h"
RichardUK 0:6c0e68e0d876 6 #include <stdarg.h>
RichardUK 0:6c0e68e0d876 7
RichardUK 0:6c0e68e0d876 8 /*
RichardUK 0:6c0e68e0d876 9 INITIALIZING BY INSTRUCTION
RichardUK 0:6c0e68e0d876 10 1) 8-bit interface mode (Condition: fosc = 270KHZ)
RichardUK 0:6c0e68e0d876 11
RichardUK 0:6c0e68e0d876 12 Codes
RichardUK 0:6c0e68e0d876 13 N = 0 1-line mode , 1 2-line mode
RichardUK 0:6c0e68e0d876 14 D = 0 display off, 1 display on
RichardUK 0:6c0e68e0d876 15 C = 0 cursor off, 1 cursor on
RichardUK 0:6c0e68e0d876 16 B = 0 blink off, 1 blink on
RichardUK 0:6c0e68e0d876 17 I/D = 0 decrement mode, 1 increment mode
RichardUK 0:6c0e68e0d876 18 SH = 0 entire shift off, 1 entire shift on
RichardUK 0:6c0e68e0d876 19
RichardUK 0:6c0e68e0d876 20
RichardUK 0:6c0e68e0d876 21 *** Power on
RichardUK 0:6c0e68e0d876 22 Wait for more than 30 ms after VDD rises to 4.5 v
RichardUK 0:6c0e68e0d876 23
RichardUK 0:6c0e68e0d876 24 *** Function set
RichardUK 0:6c0e68e0d876 25 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
RichardUK 0:6c0e68e0d876 26 0 0 0 0 1 1 N D X X
RichardUK 0:6c0e68e0d876 27 Wait for more than 39 &#956;s
RichardUK 0:6c0e68e0d876 28
RichardUK 0:6c0e68e0d876 29 *** Display ON/OFF Control
RichardUK 0:6c0e68e0d876 30 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
RichardUK 0:6c0e68e0d876 31 0 0 0 0 0 0 1 D C B
RichardUK 0:6c0e68e0d876 32 Wait for more than 39 &#956;s
RichardUK 0:6c0e68e0d876 33
RichardUK 0:6c0e68e0d876 34
RichardUK 0:6c0e68e0d876 35 *** Display Clear
RichardUK 0:6c0e68e0d876 36 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
RichardUK 0:6c0e68e0d876 37 0 0 0 0 0 0 0 0 0 1
RichardUK 0:6c0e68e0d876 38 Wait for more than 1.53 ms
RichardUK 0:6c0e68e0d876 39
RichardUK 0:6c0e68e0d876 40 *** Entry Mode Set
RichardUK 0:6c0e68e0d876 41 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
RichardUK 0:6c0e68e0d876 42 0 0 0 0 0 0 0 1 I/D SH
RichardUK 0:6c0e68e0d876 43
RichardUK 0:6c0e68e0d876 44 *** Initialization end ***
RichardUK 0:6c0e68e0d876 45
RichardUK 0:6c0e68e0d876 46
RichardUK 0:6c0e68e0d876 47 */
RichardUK 0:6c0e68e0d876 48
RichardUK 1:fc4c861451e1 49 /** Basic bit of code for using a standard 1602 display in 8 bit mode.
RichardUK 0:6c0e68e0d876 50 * Written by Richard e Collins.
RichardUK 0:6c0e68e0d876 51 * Basic bit of code for using a standard 1602 display in 8 bit mode.
RichardUK 0:6c0e68e0d876 52 * When wiring one of these displays up make sure the power to the LCD on pin 3 is correct, too high and it will not display anything. About 0.2v is good, I use a POT to set it.
RichardUK 0:6c0e68e0d876 53 *
RichardUK 0:6c0e68e0d876 54 * Example use.
RichardUK 0:6c0e68e0d876 55 * Display1602 display(p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20);
RichardUK 0:6c0e68e0d876 56 * display.SetXY(0,0);
RichardUK 0:6c0e68e0d876 57 * display.Print("Hello world");
RichardUK 0:6c0e68e0d876 58 */
RichardUK 0:6c0e68e0d876 59 struct Display1602
RichardUK 0:6c0e68e0d876 60 {
RichardUK 1:fc4c861451e1 61 /**
RichardUK 1:fc4c861451e1 62 * Constructor, here you state the oins used to read and write data on and the control pins.
RichardUK 1:fc4c861451e1 63 * @param registerSelect This is the pin used to select if you are sending data or setting a control register.
RichardUK 1:fc4c861451e1 64 * @param readWriteSelect The pin to state if you are reading or writing data / register.
RichardUK 1:fc4c861451e1 65 * @param d0 -> d7. The eight pins for the data to be either written to the display or a register.
RichardUK 1:fc4c861451e1 66 */
RichardUK 0:6c0e68e0d876 67 Display1602(PinName registerSelect,PinName readWriteSelect,PinName readWriteEnable,PinName d0,PinName d1,PinName d2,PinName d3,PinName d4,PinName d5,PinName d6,PinName d7) ;
RichardUK 1:fc4c861451e1 68
RichardUK 1:fc4c861451e1 69 /**
RichardUK 1:fc4c861451e1 70 * Clears the display.
RichardUK 1:fc4c861451e1 71 */
RichardUK 0:6c0e68e0d876 72 void Clear();
RichardUK 0:6c0e68e0d876 73
RichardUK 1:fc4c861451e1 74 /**
RichardUK 1:fc4c861451e1 75 * Prints the text to the display, will limit the chars read by 16 chars or hitting a null terminator, which ever comes first.
RichardUK 1:fc4c861451e1 76 * Advances the cursor pos.
RichardUK 1:fc4c861451e1 77 */
RichardUK 0:6c0e68e0d876 78 void Print(const char *text);
RichardUK 0:6c0e68e0d876 79
RichardUK 1:fc4c861451e1 80 /**
RichardUK 1:fc4c861451e1 81 * handy printf funtion for displaying text.
RichardUK 1:fc4c861451e1 82 * Advances the cursor pos.
RichardUK 1:fc4c861451e1 83 */
RichardUK 0:6c0e68e0d876 84 void printf(const char *format,...);
RichardUK 0:6c0e68e0d876 85
RichardUK 1:fc4c861451e1 86 /**
RichardUK 1:fc4c861451e1 87 *Sets the cusor X Y pos.
RichardUK 1:fc4c861451e1 88 */
RichardUK 0:6c0e68e0d876 89 void SetXY(int x,int y);
RichardUK 0:6c0e68e0d876 90
RichardUK 0:6c0e68e0d876 91 private:
RichardUK 0:6c0e68e0d876 92 DigitalOut rs; //Register select, high value in data is data char data, when low is a command.
RichardUK 0:6c0e68e0d876 93 DigitalOut rw; //Data direction, high read operation, low is write operation.
RichardUK 0:6c0e68e0d876 94 DigitalOut e; //When high the value in data is read from or written to the register selected.
RichardUK 0:6c0e68e0d876 95 BusOut data; //The data sent.
RichardUK 0:6c0e68e0d876 96
RichardUK 0:6c0e68e0d876 97 void SendCommand(int cmd);
RichardUK 0:6c0e68e0d876 98
RichardUK 0:6c0e68e0d876 99 void SendChar(char c);
RichardUK 0:6c0e68e0d876 100 };
RichardUK 0:6c0e68e0d876 101
RichardUK 0:6c0e68e0d876 102 #endif //#ifndef __DISPLAY1602_H__