LCD1289Serial_Ethenet
Dependencies: EthernetInterface FatFileSystemCpp SDFileSystem mbed-rtos mbed
Diff: main.cpp
- Revision:
- 0:a5367e4d8591
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Nov 07 06:42:34 2012 +0000 @@ -0,0 +1,369 @@ +#include "mbed.h" +#include "SDFileSystem.h" + +#include "EthernetInterface.h" + +#define ECHO_SERVER_PORT 10373 + +/* + GND: + VIN: + VB : + nR : + p5 : mosi SD_DIN(37) + p6 : miso SD_OUT(35) + p7 : sck SD_SCL(36) + p8 : SD_CS(38) + p9 : LCD_RESET(17) + p10: LCD_CNT + p11: LCD_DATA(HC164-AB) + p12: + p13: LCD_CLK(HC164-CLK) + p14: LCD_CS1(15) + p15: LCD_CS2(16) + p16: RS(4) + p17: WR(5) + p18: CLR(HC164-CLR) + p19: + p20: + + p21: + p22: + p23: + p24: + p25: + p26: + p27: + p28: + p29: + p30: + D+ + D- + TD+ + TD- + RD+ + RD- + IF+ + IF- + VU + VOUT +*/ + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned long u32; + +DigitalOut LCD_RESET(p9); +DigitalOut LCD_CNT(p10); +DigitalOut LCD_CS(p14); +DigitalOut LCD_CLR(p18); +DigitalOut LCD_RS(p16); +DigitalOut LCD_WR(p17); + +SPI lcdSerial(p11, NC, p13); + +u16 DeviceCode = 0; + +//Serial pc(USBTX, USBRX); + +#define LCD_WR_CMD(data){\ + LCD_CLR=0;\ + LCD_CLR=1;\ + lcdSerial.write(data);\ + LCD_RS=0;\ + LCD_CS=0;\ + LCD_WR=0;\ + wait_us(500);\ + LCD_WR=1;\ + LCD_CS=1;\ +} + +#define LCD_WR_DATA(data){\ + LCD_CLR=0;\ + LCD_CLR=1;\ + lcdSerial.write(data);\ + LCD_RS=1;\ + LCD_CS=0;\ + LCD_WR=0;\ + LCD_WR=1;\ + LCD_CS=1;\ +} + +#define WHITE 0xffff + +LocalFileSystem local("local"); + +void LCD_Clear(u16 Color); + +void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue) +{ + LCD_WR_CMD(LCD_Reg); + LCD_WR_DATA(LCD_RegValue); +} + +void LCD_Init1289(void) +{ + LCD_CNT = 1; + LCD_RESET = 0; + LCD_CS = 1; + wait_ms(50); // delay 50 ms + LCD_RESET = 1; + wait_ms(50); // delay 50 ms + LCD_WriteReg(0x0000,0x0001); + wait_ms(50); // delay 50 ms + LCD_WriteReg(0x0000,0x0001); + wait_ms(6); //�Lò¿ª¾��Õñ + LCD_WriteReg(0x0003,0xA8A4); + wait_ms(6); //0xA8A4 + LCD_WriteReg(0x000C,0x0000); + wait_ms(6); + LCD_WriteReg(0x000D,0x080C); + wait_ms(6); + LCD_WriteReg(0x000E,0x2B00); + wait_ms(6); + LCD_WriteReg(0x001E,0x00B7); + wait_ms(6); + LCD_WriteReg(0x0001,0x2B3F); + wait_ms(6); //Çý��¯Êä³ö¿ØÖÆ320*240 0x6B3F + LCD_WriteReg(0x0002,0x0600); + wait_ms(6); + LCD_WriteReg(0x0010,0x0000); + wait_ms(6); + LCD_WriteReg(0x0011,0x6070); + wait_ms(6); //0x4030 //���NÒåÊý¾Ý¸ñʽ 16λɫ + LCD_WriteReg(0x0005,0x0000); + wait_ms(6); + LCD_WriteReg(0x0006,0x0000); + wait_ms(6); + LCD_WriteReg(0x0016,0xEF1C); + wait_ms(6); + LCD_WriteReg(0x0017,0x0003); + wait_ms(6); + LCD_WriteReg(0x0007,0x0233); + wait_ms(6); //0x0233 + LCD_WriteReg(0x000B,0x0000); + wait_ms(6); + LCD_WriteReg(0x000F,0x0000); + wait_ms(6); //É�NÃ迪ʼµØÖ· + LCD_WriteReg(0x0041,0x0000); + wait_ms(6); + LCD_WriteReg(0x0042,0x0000); + wait_ms(6); + LCD_WriteReg(0x0048,0x0000); + wait_ms(6); + LCD_WriteReg(0x0049,0x013F); + wait_ms(6); + LCD_WriteReg(0x004A,0x0000); + wait_ms(6); + LCD_WriteReg(0x004B,0x0000); + wait_ms(6); + LCD_WriteReg(0x0044,0xEF00); + wait_ms(6); + LCD_WriteReg(0x0045,0x0000); + wait_ms(6); + LCD_WriteReg(0x0046,0x013F); + wait_ms(6); + LCD_WriteReg(0x0030,0x0707); + LCD_WriteReg(0x0031,0x0204); + LCD_WriteReg(0x0032,0x0204); + LCD_WriteReg(0x0033,0x0502); + LCD_WriteReg(0x0034,0x0507); + LCD_WriteReg(0x0035,0x0204); + LCD_WriteReg(0x0036,0x0204); + LCD_WriteReg(0x0037,0x0502); + LCD_WriteReg(0x003A,0x0302); + LCD_WriteReg(0x003B,0x0302); + wait_ms(6); + LCD_WriteReg(0x0023,0x0000); + wait_ms(6); + LCD_WriteReg(0x0024,0x0000); + wait_ms(6); + LCD_WriteReg(0x0025,0x8000); + wait_ms(6); + LCD_WriteReg(0x004f,0); //ÐÐÊ�~Ö·0 + LCD_WriteReg(0x004e,0); //ÁÐÊ�~Ö·0 + +// LCD_WriteReg(0X07,0X0133); +// } + LCD_CNT = 0; + //LCD_Clear(WHITE); +} + +void LCD_WriteRAM_Prepare(void) +{ + LCD_WR_CMD(0x22); +} + +void LCD_WriteRAM(u16 RGB_Code) +{ + LCD_WR_DATA(RGB_Code); +} + +void LCD_SetCursor(u16 Xpos, u16 Ypos) +{ +// LCD_WriteReg(0x4E, Ypos); +// LCD_WriteReg(0x4F, 319 - Xpos); + + LCD_WriteReg(0x20, Ypos); + LCD_WriteReg(0x21, 319 - Xpos); +} + +void LCD_Clear(u16 Color) +{ + u32 index=0; + LCD_SetCursor(0x00,0x0000);//������������ + LCD_WriteRAM_Prepare(); //�I������GRAM + for(index=0; index<76800; index++) { + LCD_WR_DATA(Color); + } +} + +void LCD_Clear2() +{ + u32 i; + u32 j; + LCD_SetCursor(0x00,0x0000);//������������ + LCD_WriteRAM_Prepare(); //�I������GRAM + for(i = 0; i < 320; i++) { + for (j = 0; j < 240; j++) { + if (j < 60) { + LCD_WR_DATA(0xf000); + } else if (j < 120) { + LCD_WR_DATA(0x0f00); + } else if (j < 180) { + LCD_WR_DATA(0x00f0); + } else { + LCD_WR_DATA(0x000f); + } + } + } +} + +void LCD_Clear3() +{ + u32 i,j; + int shift; + LCD_WriteReg(0x0016,0x771C); + LCD_SetCursor(0x00,0x0000);//������������ + LCD_WriteRAM_Prepare(); //�I������GRAM + for(i = 0; i < 320; i++) { + if (i < 107) { + shift = -2; + } else if (i < 214) { + shift = 3; + } else { + shift = 9; + } + for(j = 0; j < 240; j++) { + if (shift > 0) { + LCD_WR_DATA(((j & 0xfc) << shift));// | ((j & 0xf0) >> 4)); + } else { + LCD_WR_DATA(((j & 0xfc) >> (-shift))); + } + } + } +} + +void LCD_Clear4(u16 color) +{ + u32 index=0; + LCD_SetCursor(0x00,0x0000);//������������ + LCD_WriteRAM_Prepare(); //�I������GRAM + LCD_CLR=0; + LCD_CLR=1; + lcdSerial.write(color); + LCD_RS=1; + LCD_CS=0; + for(index=0; index<9600; index++) { + LCD_WR=0; + LCD_WR=1; + LCD_WR=0; + LCD_WR=1; + LCD_WR=0; + LCD_WR=1; + LCD_WR=0; + LCD_WR=1; + LCD_WR=0; + LCD_WR=1; + LCD_WR=0; + LCD_WR=1; + LCD_WR=0; + LCD_WR=1; + LCD_WR=0; + LCD_WR=1; + } + LCD_CS=1; +} + +void LCD_Paint(int pict) +{ + FILE *fp; + switch (pict) { + case 0: + fp = fopen("/local/pict001.pic", "r"); + break; + case 1: + fp = fopen("/local/pict002.pic", "r"); + break; + case 2: + fp = fopen("/local/pict003.pic", "r"); + break; + default: + fp = fopen("/local/pict004.pic", "r"); + break; + } + if(fp == NULL) { + LCD_Clear4(0); + } else { + LCD_SetCursor(0x00,0x0000); + LCD_WriteRAM_Prepare(); + for (int i = 0; i < 320; i++) { + u16 buffer[240]; + fread((void*)buffer, sizeof(u8), 480, fp); + for(int j = 0; j < 240; j++) { + //u16 b = (buffer[j] << 8) | ((buffer[j] >> 8) & 0x0f); + LCD_WR_DATA(buffer[j]); + } + } + } + fclose(fp); +} + +int main() +{ + lcdSerial.format(16, 3); + lcdSerial.frequency(100000); + LCD_CLR = 1; + + LCD_Init1289(); + lcdSerial.frequency(30000000); + + LCD_Paint(0); + + EthernetInterface eth; + eth.init(); //Use DHCP + eth.connect(); + printf("IP Address is %s\n", eth.getIPAddress()); + + TCPSocketServer server; + server.bind(ECHO_SERVER_PORT); + server.listen(); + + while (1) { + TCPSocketConnection client; + server.accept(client); + client.set_blocking(false, 1500); + printf("Client connected %s\n", client.get_address()); + + char buffer[256]; + + while (true) { + int n = client.receive(buffer, sizeof(buffer)); + + int pict = (buffer[0] - 'H'); + LCD_Paint(pict); + } + + return 0; + } +} \ No newline at end of file