Pinout for the WD-C2401P
Pin # | Name | Function |
1 | Vss | Ground ( 0v) |
2 | Vdd | +5 volts |
3 | Reset | When this pin is low it resets the LCD. You can either tie this pin to a pin on your microcontroller so you can reset the LCD before initializtion, or just tie it high. I had a couple of times where I couldn't init the LCD without first resetting it, so I'd recommend putting it under micro control, or some other powerup controller. The reset low time should be at least 10ms. The time after reset before you start commanding the LCD should also be at least 10 ms. |
4 | RS | Register Select. This pin determines whether the data you're about to write is a command or a data byte. Commands do interesting stuff to the LCD, like set the number of lines or contrast. Data is what actually gets put on the screen, or in the custom character registers. High means Data, Low means command |
5 | Read/Write | Set this pin high to read from the display. Set this pin low to write to it. If you don't need to update the display super fast you can save an I/O line by just tying it to ground. Wait at least a millisecond between each command and data, though, since you can't query the busy status without read capability. |
6 | E | Enable. This line works to clock in data and commands. See the protocol section below. |
7 | DB0 | Least Significant Data Bit |
8 | DB1 | |
9 | DB2 | |
10 | DB3 | |
11 | DB4 | |
12 | DB5 | |
13 | DB6 | |
14 | DB7 |
Details of soldering the pins are available at http://www.serialwombat.com/parts/lcd111.htm
lcd_wintek_wdc2401p.h: #define E_LO PORTA &= ~0x80; //RA7 #define E_HI PORTA |=0x80 #define RS_HI PORTA |=0x40 //RA6 #define RS_LO PORTA &= ~0x40 #define RESET_LO PORTA &= ~0x04 #define RESET_HI PORTA |= 0x04 #define LCD_DATA PORTB #define DELAY10MS __delay_ms(10) #define DELAY1MS __delay_ms(1) #define DELAY5MS __delay_ms(5) #define DELAY20MS __delay_ms(20) #define DELAY90MS __delay_ms(90) #define DELAY0_5MS __delay_us(500) #define DELAY5US __delay_us(5) void LCDInitialize(); void LCDWriteChar(char c); void LCDClockByte(char c); //Called internally do not use void LCDClearScreen(); void LCDWriteString(char *s); void LCDResetChar(); //Return back to first address lcd_wintek_wdc2401p.c: #include "lcd_wintek_wdc2401p.h" void LCDInitialize() { DELAY90MS; RESET_LO; DELAY20MS; RESET_HI; DELAY20MS; //Initialize Sequence E_LO; DELAY5US; RS_LO; DELAY1MS; LCDClockByte(0x1C); //Turn on the lcd driver power LCDClockByte(0x14); //Turn on the character display LCDClockByte(0x28); //Set two display lines (The hd66717 considers //12 characters to be a line. Our 24 character display is //actually two 12-character lines right next to each other). LCDClockByte(0x4F); //Set to darkest contrast LCDClockByte(0xE0); //Set the data address to the first character DELAY5MS; } void LCDClockByte(char c) { DELAY1MS; LCD_DATA = c; E_HI; DELAY5US; E_LO; } void LCDWriteChar(char c) { RS_HI; LCDClockByte(c); } void LCDResetChar() { RS_LO; LCDClockByte(0x02); } void LCDWriteString( char *s) { unsigned char c,i,end_flag=0; DELAY1MS; LCDResetChar(); DELAY1MS; for(i=0;i< 24;i++) { c = (s[i] == 0x00)?'-':s[i]; if(s[i] == 0x00 || end_flag == 1){ c = ' '; end_flag = 1; } else { c = s[i]; } LCDWriteChar(c); } } void LCDClearScreen() { RS_LO; LCDClockByte(0x01); } main.c: (Sample Usage) #include "lcd_wintek_wdc2401p.h" main() { //Make sure you setup the pins on the micro controller for output // and designate the pins properly in the include file. char s[]="abcdefghijklmnop"; LCDInitialize(); LCDClearScreen(); LCDWriteString(s); }
Poorly presented. The content is also very disorganized with a lot of computer based language populating the middle of the page. It is also not appealing to a broader audience.
ReplyDeleteIf this was supposed to be a dissertation then yes, it is a very poor one. It lacks a lot of information. If it is supposed to help someone use the display then I believe it is very good. It has the information needed and it doesn't include a lot of rambling words, I like it.
ReplyDeleteTo comprehend this, you have to observe that there are two sorts of LCDs: 'Uninvolved Matrix LCDs' and 'Dynamic Matrix LCDs'. In 'Uninvolved Matrix LCDs resembles 'Wake up timers' and 'Adding machines' where the power utilization is less, a backdrop illumination source is typically not required.Best 65 inch tvs
ReplyDeleteAutomated scoring of writing shows serious flaws with fixed rules and no understanding of the context or subject matter. Or if this critique of the writing style is by a human, it shows an even greater failure.
ReplyDeleteThis conveyed almost all information one would ever need to use one of these displays. The only missing bit is how to generate and use user generated character sets. Since the data sheet on this part is a little hard to access, and also a bit hard to understand this brief explanation serves a real purpose and does it well.
No problem here, I just couldn't read the data sheet. Would still like to see the timimg data sheets instead of building all the delays for the reads and writes
ReplyDeletehttps://saglamproxy.com
ReplyDeletemetin2 proxy
proxy satın al
knight online proxy
mobil proxy satın al
ZH4İ