//选择菜单 void Select_Menu(u8 M_Type,u8 Cnt,u8 En) { u8 tx; u16 ty; u8 t; ty=10; if(M_Type==0)//主菜单 { tx=80*(Cnt%3)+10;//10,90,170 if(Cnt>5)ty=216; else if(Cnt>2)ty=113; //显示外框部分 if(En)POINT_COLOR=BLUE; else POINT_COLOR=WHITE; for(t=0;t<4;t++) { LCD_DrawRectangle(tx-7+t,ty-7+t,tx+66-t,ty+67-t); } //显示字体,反白 if(En)//选中当前的菜单 { POINT_COLOR=WHITE;//白色字体 BACK_COLOR=LBBLUE; //蓝色背景 }else { POINT_COLOR=DARKBLUE;//深蓝色字体 BACK_COLOR=WHITE; //白色背景 } Show_Str(tx-3,ty+74,(u8*)Menu[Cnt],16,0); } }
void main() { unsigned char i; Init_CLK(); LCD_Init(); //TFT³õʼ»¯ LCD_Clear(BLACK); //ÇåÆÁ /* LCD_Clear(RED); delay_s(1); LCD_Clear(GREEN); delay_s(2); LCD_Clear(BLUE); delay_s(2); //showimage(); */ POINT_COLOR=GREEN; LCD_DrawRectangle(0,0, 479, 271); POINT_COLOR=BLUE; LCD_DrawRectangle(5,5, 474, 266); POINT_COLOR=RED; Draw_Circle(100,100,100); LCD_DrawPicture(0,0,160,160, gImage_fg); while(1) { POINT_COLOR=RED; for(i=100;i>0;i--) { Draw_Circle(100,100,i); Draw_Circle(100,200,i); Draw_Circle(200,200,i); Draw_Circle(300,100,i); Draw_Circle(300,200,i); delay_ms(50); } POINT_COLOR=BLACK; for(i=0;i<101;i++) { Draw_Circle(100,100,i); Draw_Circle(100,200,i); Draw_Circle(200,200,i); Draw_Circle(300,100,i); Draw_Circle(300,200,i); delay_ms(50); } } }
void Windows_DrawMenu( void ) { //Draw Frame LCD_DrawRectangle(0, 0, Frame_L-1, Frame_H-1, WHITE); LCD_DrawRectangle(1, 1, Frame_L-3, Frame_H-3, WHITE); //Draw Button and Strings Windows_DrawButton(SelMenu_1, WINDOW_H-ButMenu_L-3, WHITE); LCD_PutStr(SelMenu_1+2+(ButMenu_W>>1)-16,WINDOW_H-(ButMenu_L>>1)-8-2, (u8*)"INIT", ASCII1608, WHITE, BLACK); Windows_DrawButton(SelMenu_2, WINDOW_H-ButMenu_L-3, WHITE); LCD_PutStr(SelMenu_2+2+(ButMenu_W>>1)-24,WINDOW_H-(ButMenu_L>>1)-8-2, (u8*)"SDCARD", ASCII1608, WHITE, BLACK); Windows_DrawButton(SelMenu_3, WINDOW_H-ButMenu_L-3, WHITE); LCD_PutStr(SelMenu_3+2+(ButMenu_W>>1)-16,WINDOW_H-(ButMenu_L>>1)-8-2, (u8*)"WAVE", ASCII1608, WHITE, BLACK); Windows_DrawButton(SelMenu_4, WINDOW_H-ButMenu_L-3, WHITE); LCD_PutStr(SelMenu_4+2+(ButMenu_W>>1)-16,WINDOW_H-(ButMenu_L>>1)-8-2, (u8*)"INFO", ASCII1608, WHITE, BLACK); Windows_SelMenu(1); }
//显示串口收到的数据 //comdata:要显示的数据 void com_statusBar(char * comdata){ static u8 rec_count = 0; LCD_DrawRectangle(1,lcddev.height-40,lcddev.width-1,lcddev.height-1); //屏幕底部画一个矩形 LCD_DrawLine(1,lcddev.height-20,lcddev.width,lcddev.height-20); //画线 LCD_ShowString(2,lcddev.height-39,500,16,16,"Received data from srialport:"); //标题 LCD_Fill(2,lcddev.height-19,lcddev.width-2,lcddev.height-2,WHITE); LCD_ShowString(2,lcddev.height-19,500,16,16,(u8*)comdata); //内容 //状态条尾部蓝绿色闪烁:表示系统串口任务正在接收数据 LCD_Fill(lcddev.width-19,lcddev.height-39,lcddev.width,lcddev.height-21,lcd_discolor[10-rec_count%2]); //填充状态信号 }
/******************************************************************************* * Refresh page 2 draws screen graphics and headers. * *******************************************************************************/ void Refresh_page2() { LCD_Clear(field_color); //Clear the screen with field color POINT_COLOR = border_color; LCD_DrawRectangle(2, 2, 317, 237); // Screen Border LCD_Fill(3,3,316,18,heading_color); // Heading Fill POINT_COLOR = char_rev_color; BACK_COLOR = heading_color; LCD_8x16_String(50,3,"ADVANCED SETTINGS 2"); // Heading POINT_COLOR = char_norm_color; BACK_COLOR = char_hglt_color; Refresh_Parameter_Name(); BACK_COLOR = field_color; Refresh_Parameter_Value(); }
//主函数 int main(void) { OS_ERR err; CPU_SR_ALLOC(); delay_init(168); //时钟初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置 uart_init(115200); //串口初始化 LED_Init(); //LED初始化 LCD_Init(); //LCD初始化 KEY_Init(); //按键初始化 FSMC_SRAM_Init(); //初始化SRAM my_mem_init(SRAMIN);//初始化内部RAM POINT_COLOR = RED; LCD_ShowString(30,10,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,30,200,16,16,"UCOSIII Examp 13-1"); LCD_ShowString(30,50,200,16,16,"Pend Multi"); LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,90,200,16,16,"2015/5/20"); POINT_COLOR = BLACK; LCD_DrawRectangle(5,110,234,314); LCD_DrawLine(5,130,234,130); POINT_COLOR = RED; LCD_ShowString(50,111,200,16,16,"ObjRdy_NUM: 0"); POINT_COLOR = BLUE; OSInit(&err); //初始化UCOSIII OS_CRITICAL_ENTER(); //进入临界区 //创建开始任务 OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块 (CPU_CHAR * )"start task", //任务名字 (OS_TASK_PTR )start_task, //任务函数 (void * )0, //传递给任务函数的参数 (OS_PRIO )START_TASK_PRIO, //任务优先级 (CPU_STK * )&START_TASK_STK[0], //任务堆栈基地址 (CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈深度限位 (CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小 (OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息 (OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度, (void * )0, //用户补充的存储区 (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项 (OS_ERR * )&err); //存放该函数错误时的返回值 OS_CRITICAL_EXIT(); //退出临界区 OSStart(&err); //开启UCOSIII }
void root_page(void) { int8_t root_page_index = 0; int8_t page_reflash = 1; sysParam.delay = 10; sysParam.interval = 10; sysParam.uartFlag = 0; sysParam.GRB[0] = 1; sysParam.GRB[1] = 1; sysParam.GRB[2] = 1; sysParam.start = 0; sysParam.end = 8; while(1) { if(page_reflash) { page_reflash = 0; LCD_Clear(BLACK); LCD_DrawRectangle(0, 0, 127, 127, YELLOW); LCD_ShowString(1, 1, (char *)" PIXELSTICK ", BLACK, YELLOW); if(SD_Init() != SD_OK) //初始化失败 LCD_ShowString(10, 16, (char *)"SD Card", RED, BLACK); else //初始化成功了 LCD_ShowString(10, 16, (char *)"SD Card", GREEN, BLACK); LCD_ShowString(10, 32, (char *)"Wifi", RED, BLACK); LCD_ShowString(10, 48, (char *)"Lamp", WHITE, BLACK); LCD_ShowString(10, 64, (char *)"Settings", WHITE, BLACK); LCD_ShowString(10, 80, (char *)"About Me", WHITE, BLACK); LCD_ShowString(10, 96, (char *)"Gradient Ramp", WHITE, BLACK); } LCD_ShowIcon(2, 16 +root_page_index*16, 0, RED, BLACK); //先清除之前的光标 /* button LEFT */ if(button_state[LEFT] == BUTTON_PRESS_UP) { button_state[LEFT] = BUTTON_NOT_PRESSED; ; } /* button RIGHT */ if(button_state[RIGHT] == BUTTON_PRESS_UP) { button_state[RIGHT] = BUTTON_NOT_PRESSED; ; } /* button UP */ if(button_state[UP] == BUTTON_PRESS_UP) { button_state[UP] = BUTTON_NOT_PRESSED; root_page_index--; if(root_page_index < 0) root_page_index = ROOT_PAGE_OPTION_NUM - 1; } /* button DOWN */ if(button_state[DOWN] == BUTTON_PRESS_UP) { button_state[DOWN] = BUTTON_NOT_PRESSED; root_page_index++; if(root_page_index == ROOT_PAGE_OPTION_NUM) root_page_index = 0; } LCD_ShowIcon(2, 16+root_page_index*16, 2, WHITE, BLACK); /* button MIDDLE */ if(button_state[MIDDLE] == BUTTON_PRESS_UP) //选中或者确认 { button_state[MIDDLE] = BUTTON_NOT_PRESSED; switch(root_page_index) { case SD_CARD_PAGE: /* SD card browser */ show_files(); page_reflash = 1; break; case WIFI_PAGE: /* esp8266 settings */ wifi_page(); page_reflash = 1; break; case LAMP_PAGE: /* param settings */ lamp_page(); page_reflash = 1; break; case SETTING_PAGE: /* param settings */ setting_page(); page_reflash = 1; break; case INFO_PAGE: /* informations */ info_page(); page_reflash = 1; break; case GRADIENT_RAMP_PAGE: /* informations */ gradient_ramp_page(); page_reflash = 1; break; default: break; } } delay_ms(20); } }
void show_files(void) { FRESULT f_res; //FatFs通用结果码 char c_path[50] = {"SD:"}; char bmp_path[50]; char temp[15]; volatile uint32_t file_num = 0; volatile uint8_t update_file = 1, update_dir = 1; volatile uint8_t show_start = 1, show_end = ROW_PER_PAGE; volatile uint16_t image_height = 0 ,height_offset = 0; volatile uint8_t image_flag = 0; int8_t i; file_index.dir_depth = 1; file_index.page = 1; file_index.row = 1; file_index.file = 1; f_res = f_mount(&FatFs[0], "SD:", (BYTE)0); //挂载SD卡 f_res = f_res; while(file_index.dir_depth) { LCD_ShowIcon(2, file_index.row*8, 0, RED, BLACK); //先清除之前的光标 /* button LEFT */ if(button_state[LEFT] == BUTTON_PRESS_UP) { button_state[LEFT] = BUTTON_NOT_PRESSED; file_index.page--; //向左翻页显示,不能再翻时便是退回到上一级目录 update_file = 1; file_index.row = 1; if(file_index.page < 1) //左翻到头,则返回上一级目录 { update_dir = 1; file_index.page = 1; file_index.dir_depth--; for(i=FILE_NAME_LEN-1;i>1;i--) //清除 目录字符串中当前文件夹的名字,即得到上一级目录的路径 { if((c_path[i]) == '/') { c_path[i] = 0; for(;i<FILE_NAME_LEN;i++) c_path[i] = 0; break; } } update_dir = 1; //由于目录更改,需要更新目录的所有信息 if(file_index.dir_depth == 0) //若为根目录,则无需更新 { update_file = 0; update_dir = 0; //由于目录更改,需要更新目录的所有信息 } } } /* button RIGHT */ if(button_state[RIGHT] == BUTTON_PRESS_UP) { button_state[RIGHT] = BUTTON_NOT_PRESSED; if((file_num/ROW_PER_PAGE)<file_index.page) //右翻到头,则留在当前页面上 { ; } else { update_file = 1; file_index.row = 1; file_index.page++; //向右翻页显示 } } /* button UP */ if(button_state[UP] == BUTTON_PRESS_UP) { button_state[UP] = BUTTON_NOT_PRESSED; file_index.row--; //光标上移 if(file_index.row < 1 ) //翻过上界转到最后一行 { file_index.row = file_num - ROW_PER_PAGE*(file_index.page-1); if(ROW_PER_PAGE < file_index.row) file_index.row = ROW_PER_PAGE; } } /* button DOWN */ if(button_state[DOWN] == BUTTON_PRESS_UP) { button_state[DOWN] = BUTTON_NOT_PRESSED; file_index.row++; //光标下移 if( (file_num - ROW_PER_PAGE*(file_index.page-1)) < file_index.row || ROW_PER_PAGE < file_index.row) //翻过下界返回到第一行 file_index.row = 1; } /* button MIDDLE */ if(button_state[MIDDLE] == BUTTON_PRESS_UP) //选中或者确认 { button_state[MIDDLE] = BUTTON_NOT_PRESSED; if(all_file_name[file_index.row][0] & AM_DIR) //选中文件夹,则更新当前路径以及当前页面 { file_index.dir_depth++; for(i=0;i<FILE_NAME_LEN-1;i++) { temp[i] = all_file_name[file_index.row + ROW_PER_PAGE*(file_index.page-1)][i+1]; } sprintf(c_path, "%.*s%.*s%.*s", strlen(c_path),c_path,strlen("/"), "/", strlen(temp), temp); update_dir = 1; update_file = 1; file_index.row = 1; } else if(all_file_name[file_index.row][0] & AM_ARC) //选中文图片,则显示图片 { image_flag = 1; for(;;) { if(image_flag) { image_flag = 0; if(all_file_name[file_index.row][0] & AM_ARC) { for(i=0;i<50;i++) { bmp_path[i] = 0; } for(i=0;i<FILE_NAME_LEN-1;i++) { temp[i] = all_file_name[file_index.row + ROW_PER_PAGE*(file_index.page-1)][i+1]; } sprintf(bmp_path, "%.*s%.*s%.*s", strlen(c_path),c_path,strlen("/"), "/", strlen(temp), temp); if(height_offset > 10000) height_offset = 0; if(height_offset > image_height - 128) height_offset = image_height - 129; if(image_height < 128) height_offset = 0; image_height = show_bmp_center(bmp_path); } } /* button UP */ if(button_state[LEFT] == BUTTON_PRESS_UP) { button_state[LEFT] = BUTTON_NOT_PRESSED; file_index.row--; //向左翻图片 image_flag = 1; height_offset = 0; if(file_index.row < 1 ) //翻过上界转到最后一行 { file_index.row = file_num - ROW_PER_PAGE*(file_index.page-1); if(ROW_PER_PAGE < file_index.row) file_index.row = ROW_PER_PAGE; } } /* button DOWN */ if(button_state[RIGHT] == BUTTON_PRESS_UP) { button_state[RIGHT] = BUTTON_NOT_PRESSED; file_index.row++; //向右翻图片 image_flag = 1; height_offset = 0; if( (file_num - ROW_PER_PAGE*(file_index.page-1)) < file_index.row || ROW_PER_PAGE < file_index.row) //翻过下界返回到第一行 file_index.row = 1; } if(button_state[UP] == BUTTON_PRESS_UP) { button_state[UP] = BUTTON_NOT_PRESSED; height_offset+=30; image_flag = 1; } if(button_state[DOWN] == BUTTON_PRESS_UP) { button_state[DOWN] = BUTTON_NOT_PRESSED; height_offset-=30; image_flag = 1; } if(button_state[START] == BUTTON_PRESS_UP) //选中或者确认 { button_state[START] = BUTTON_NOT_PRESSED; led_blink(5,100); paint_bmp(bmp_path); } if(button_state[MIDDLE] == BUTTON_PRESS_UP) //长按退出看图模式 { button_state[MIDDLE] = BUTTON_NOT_PRESSED; update_dir = 1; update_file = 1; break; } } } } LCD_ShowIcon(2, file_index.row*8, 2, WHITE, BLACK); if(update_dir) { update_dir = 0; for(i=FILE_NAME_LEN-1;i>1;i--) { if( ((c_path[i]) == '/') && ((c_path[i+1]) == 0) ) { c_path[i] = 0; break; } } scan_files(c_path, &file_num); LCD_DrawRectangle(0, 0, 127, 127, YELLOW); LCD_Fill(0, 0, 127, 8, YELLOW); LCD_ShowString(0, 0, &all_file_name[0][0], BLACK, YELLOW); LCD_ShowNum(100, 0, file_num, 2, BLACK, YELLOW); } if(update_file) { update_file = 0; show_start = ((file_index.page-1)*ROW_PER_PAGE)+1; show_end = show_end + ROW_PER_PAGE; if(show_end > file_num) show_end = file_num+1; show_menu(c_path, show_start, show_end); } delay_ms(20); } }
//加载游戏界面 //size:3,3*3图片 // 4,4*4图片 // 5,5*5图片 //#define FRAME1 0XBC40 //棕色 void Load_Game_ICO(u8 size) { u8 i; LCD_Clear(LGRAY);//清屏 for(i=0;i<4;i++)//画大边框 { POINT_COLOR=FRAME1; LCD_DrawRectangle(i,i,239-i,239-i); } if(size==3) { for(i=0;i<4;i++)//画小边框 { POINT_COLOR=FRAME1; LCD_DrawRectangle(154+i,235+i,239-i,316-i); } LCD_Fill(158,235,235,239,WHITE);//把多余的去掉 POINT_COLOR=RED; LCD_DrawRectangle(158,235,235,312);//画空的方框,事先不放图片 LCD_DrawRectangle(4,4,235,235); //画最大的红框 LCD_DrawLine(81,4,81,235); //画内部红框 LCD_DrawLine(158,4,158,235);//画内部红框 LCD_DrawLine(4,81,235,81); //画内部红框 LCD_DrawLine(4,158,235,158);//画内部红框 }else if(size==4) { for(i=0;i<4;i++)//画小边框 { POINT_COLOR=FRAME1; LCD_DrawRectangle(174+i,236+i,239-i,298-i); } LCD_Fill(178,236,236,240,WHITE);//把多余的去掉 POINT_COLOR=RED; LCD_DrawRectangle(178,236,236,294);//画空的方框,第十六格 LCD_DrawRectangle(4,4,236,236); //画最大的红框 for(i=0;i<size;i++)LCD_DrawLine(4,4+58*i,236,4+58*i); //画内部横网格线 for(i=0;i<size;i++)LCD_DrawLine(4+58*i,4,4+58*i,236); //画内部竖网格线 }else if(size==5) { for(i=0;i<4;i++)//画小边框 { POINT_COLOR=FRAME1; LCD_DrawRectangle(184+i,234+i,239-i,284-i); } LCD_DrawLine(4,235,236,235); //误差横线填充线 LCD_DrawLine(235,4,235,281); //误差竖线填充线 LCD_Fill(188,234,234,239,WHITE);//把多余的去掉 POINT_COLOR=RED; LCD_DrawRectangle(188,234,234,280);//画空的方框,第十六格 LCD_DrawRectangle(4,4,234,234); //画最大的红框 for(i=0;i<size;i++)LCD_DrawLine(4,4+46*i,234,4+46*i); //画内部横网格线 for(i=0;i<size;i++)LCD_DrawLine(4+46*i,4,4+46*i,234); //画内部竖网格线 } LCD_DrawRectangle(2,241,79,318);//包括预览图片 BACK_COLOR=WHITE; POINT_COLOR=BLUE;//画笔颜色 Show_Str(81,242,"等级:",16,0x01); POINT_COLOR=RED;//画笔颜色 if(size==3)Show_Str(121,242,"简单",16,0x01); else if(size==4)Show_Str(121,242,"一般",16,0x01); else Show_Str(121,242,"困难",16,0x01); POINT_COLOR=BLUE;//画笔颜色 Show_Str(81,258,"步数:",16,0x01); Show_Str(81,274,"用时:",16,0x01); GUI_Draw_Button(98,298,37,20,"退出",BLACK); }
void Windows_DrawButton( u16 CoordiX, u16 CoordiY, u32 Color ) { LCD_DrawRectangle(CoordiX, CoordiY, ButMenu_W, ButMenu_L, Color); LCD_DrawRectangle(CoordiX+1, CoordiY+1, ButMenu_W-2, ButMenu_L-2, Color); }
void KEY_Test(void) { u8 i = 0; unsigned char key_flag = 0; unsigned char read_val = 0; LCD_Clear(BLACK); LCD_DrawRectangle(0,5, 479, 271); LCD_DrawRectangle(5,18, 474, 266); LCD_ShowString(150, 6, "--STC51 Platform--"); // 实验开发平台 LCD_ShowString(150,60, "Step 1:Key and Led Testing"); LCD_ShowString(150, 100,"Press K1,K2,K3,K4,Seee the LED"); while(key_flag != 0x0F) { LCD_ShowNum(150, 80,uart_flag, 0); if(strstr((const char*)gsm_ch, "OK")) LCD_ShowString(200, 150, "GSM_OK!"); if(KEY4 == 0) // K1 1110 0111 { delayms(20); if(KEY4 == 0) { //Uart1_SendData('1'); while(!KEY4); key_flag |= 0x01; PCF8574_Single_WriteI2C(UD_PCF8574_SlaveAddress, 0xE7); Uart2_SendString("AT\r\n"); //GSM test //Uart1_SendString(mode_FLASH); //MP3 test //Delay5ms(); Uart1_SendString(play); //MP3 test } } read_val = PCF8574_Single_ReadI2C(UD_PCF8574_SlaveAddress); ///////////////////////////////////////// if((read_val & 0x80) == 0) //OUTC1 K2 1110 0101 { key_flag |= 0x08; Uart1_SendData('2'); PCF8574_Single_WriteI2C(UD_PCF8574_SlaveAddress, 0xE5); ///led2 buzzer 1111 0011 } ///////////////////////////////////////// ///////////////////////////////////////// if((read_val & 0x40) == 0) //OUTC2 K3 1110 0001 { Uart1_SendData('3'); key_flag |= 0x04; PCF8574_Single_WriteI2C(UD_PCF8574_SlaveAddress, 0xE1); ///led1 buzzer 1110 0111 } ///////////////////////////////////////// if((read_val & 0x20) == 0) //OUTC5 K4 LED2 1111 0111 { Uart1_SendData('4'); key_flag |= 0x02; PCF8574_Single_WriteI2C(UD_PCF8574_SlaveAddress, 0xF7); //led off! 1111 0101 } if(strstr((const char*)gsm_ch, "OK")) LCD_ShowString(200, 150, "GSM_OK!"); } for(i; i < GSM_length; i++) gsm_ch[i] = 0; for(i=0;i<BufferCount;i++) BufferA[i]=0x00; BufferCount=0; uart_flag = 0; }
void Lcd_Init(void) { //调用一次这些函数,免得编译的时候提示警告 LCD_CS =1; if(LCD_CS==0) { LCD_WR_REG_DATA(0,0); LCD_ShowString(0,0," "); LCD_ShowNum(0,0,0,0); LCD_Show2Num(0,0,0,0); LCD_DrawPoint_big(0,0); LCD_DrawRectangle(0,0,0,0); Draw_Circle(0,0,0); } LCD_REST=0; delayms(20); LCD_REST=1; delayms(20); LCD_CS =0; //打开片选使能 LCD_WR_REG(0xCB); LCD_WR_DATA8(0x39); LCD_WR_DATA8(0x2C); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x34); LCD_WR_DATA8(0x02); LCD_WR_REG(0xCF); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0XC1); LCD_WR_DATA8(0X30); LCD_WR_REG(0xE8); LCD_WR_DATA8(0x85); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x78); LCD_WR_REG(0xEA); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x00); LCD_WR_REG(0xED); LCD_WR_DATA8(0x64); LCD_WR_DATA8(0x03); LCD_WR_DATA8(0X12); LCD_WR_DATA8(0X81); LCD_WR_REG(0xF7); LCD_WR_DATA8(0x20); LCD_WR_REG(0xC0); //Power control LCD_WR_DATA8(0x23); //VRH[5:0] LCD_WR_REG(0xC1); //Power control LCD_WR_DATA8(0x10); //SAP[2:0];BT[3:0] LCD_WR_REG(0xC5); //VCM control LCD_WR_DATA8(0x3e); //对比度调节 LCD_WR_DATA8(0x28); LCD_WR_REG(0xC7); //VCM control2 LCD_WR_DATA8(0x86); //-- LCD_WR_REG(0x36); // Memory Access Control LCD_WR_DATA8(0x48); // //48 68竖屏//28 E8 横屏 LCD_WR_REG(0x3A); LCD_WR_DATA8(0x55); LCD_WR_REG(0xB1); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x18); LCD_WR_REG(0xB6); // Display Function Control LCD_WR_DATA8(0x08); LCD_WR_DATA8(0x82); LCD_WR_DATA8(0x27); LCD_WR_REG(0xF2); // 3Gamma Function Disable LCD_WR_DATA8(0x00); LCD_WR_REG(0x26); //Gamma curve selected LCD_WR_DATA8(0x01); LCD_WR_REG(0xE0); //Set Gamma LCD_WR_DATA8(0x0F); LCD_WR_DATA8(0x31); LCD_WR_DATA8(0x2B); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x0E); LCD_WR_DATA8(0x08); LCD_WR_DATA8(0x4E); LCD_WR_DATA8(0xF1); LCD_WR_DATA8(0x37); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x10); LCD_WR_DATA8(0x03); LCD_WR_DATA8(0x0E); LCD_WR_DATA8(0x09); LCD_WR_DATA8(0x00); LCD_WR_REG(0XE1); //Set Gamma LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x0E); LCD_WR_DATA8(0x14); LCD_WR_DATA8(0x03); LCD_WR_DATA8(0x11); LCD_WR_DATA8(0x07); LCD_WR_DATA8(0x31); LCD_WR_DATA8(0xC1); LCD_WR_DATA8(0x48); LCD_WR_DATA8(0x08); LCD_WR_DATA8(0x0F); LCD_WR_DATA8(0x0C); LCD_WR_DATA8(0x31); LCD_WR_DATA8(0x36); LCD_WR_DATA8(0x0F); LCD_WR_REG(0x2A); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0xEF); LCD_WR_REG(0x2B); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x00); LCD_WR_DATA8(0x01); LCD_WR_DATA8(0x3F); LCD_WR_REG(0x11); //Exit Sleep delayms(120); LCD_WR_REG(0x29); //Display on LCD_WR_REG(0x2c); }
void LCD_Init(void) { P3OUT|=(BIT1+BIT2+BIT3+BIT6+BIT7); P4OUT=0xFF; P2OUT=0xFF; P1OUT|=BIT2; P3DIR|=(BIT1+BIT2+BIT3+BIT6+BIT7); P4DIR=0xFF; P2DIR=0xFF; P1DIR|=BIT2; P1OUT|=BIT2; SET_LCD_CS; if(GET_LCD_CS==0) { LCD_WR_REG_DATA(0,0); LCD_ShowString(0,0," "); LCD_ShowNum(0,0,0,0); LCD_Show2Num(0,0,0,0); LCD_DrawPoint_big(0,0); LCD_DrawRectangle(0,0,0,0); Draw_Circle(0,0,0); } SET_LCD_REST; delay_ms(5); CLR_LCD_REST; delay_ms(5); SET_LCD_REST; SET_LCD_CS; SET_LCD_RD; SET_LCD_WR; delay_ms(5); CLR_LCD_CS ; //打开片选使能 LCD_WR_REG(0x00E2); //PLL multiplier, set PLL clock to 120M LCD_WR_DATA(0x002d); //N=0x36 for 6.5M, 0x23 for 10M crystal LCD_WR_DATA(0x0002); LCD_WR_DATA(0x0004); LCD_WR_REG(0x00E0); // PLL enable LCD_WR_DATA(0x0001); delay_ms(1); LCD_WR_REG(0x00E0); LCD_WR_DATA(0x0003); delay_ms(5); LCD_WR_REG(0x0001); // software reset delay_ms(5); LCD_WR_REG(0x00E6); //PLL setting for PCLK, depends on resolution LCD_WR_DATA(0x0000); LCD_WR_DATA(0x00ff); LCD_WR_DATA(0x00be); LCD_WR_REG(0x00B0); //LCD SPECIFICATION LCD_WR_DATA(0x0020); LCD_WR_DATA(0x0000); LCD_WR_DATA((HDP>>8)&0X00FF); //Set HDP LCD_WR_DATA(HDP&0X00FF); LCD_WR_DATA((VDP>>8)&0X00FF); //Set VDP LCD_WR_DATA(VDP&0X00FF); LCD_WR_DATA(0x0000); delay_ms(5); LCD_WR_REG(0x00B4); //HSYNC LCD_WR_DATA((HT>>8)&0X00FF); //Set HT LCD_WR_DATA(HT&0X00FF); LCD_WR_DATA((HPS>>8)&0X00FF); //Set HPS LCD_WR_DATA(HPS&0X00FF); LCD_WR_DATA(HPW); //Set HPW LCD_WR_DATA((LPS>>8)&0X00FF); //SetLPS LCD_WR_DATA(LPS&0X00FF); LCD_WR_DATA(0x0000); LCD_WR_REG(0x00B6); //VSYNC LCD_WR_DATA((VT>>8)&0X00FF); //Set VT LCD_WR_DATA(VT&0X00FF); LCD_WR_DATA((VPS>>8)&0X00FF); //Set VPS LCD_WR_DATA(VPS&0X00FF); LCD_WR_DATA(VPW); //Set VPW LCD_WR_DATA((FPS>>8)&0X00FF); //Set FPS LCD_WR_DATA(FPS&0X00FF); LCD_WR_REG(0x0036); //rotation LCD_WR_DATA(0x0000); LCD_WR_REG(0x00F0); //pixel data interface LCD_WR_DATA(0x0003); delay_ms(5); LCD_WR_REG(0x0029); //display on LCD_WR_REG(0x00BE); //set PWM for B/L LCD_WR_DATA(0x0006); LCD_WR_DATA(0x00f0); LCD_WR_DATA(0x0001); LCD_WR_DATA(0x00f0); LCD_WR_DATA(0x0000); LCD_WR_DATA(0x0000); LCD_WR_REG(0x00d0); LCD_WR_DATA(0x000d); //----------LCD RESET---GPIO0-------------------// LCD_WR_REG(0x00B8); LCD_WR_DATA(0x0000); //GPIO3=input, GPIO[2:0]=output LCD_WR_DATA(0x0001); //GPIO0 normal LCD_WR_REG(0x00BA); LCD_WR_DATA(0x0000); }
/* ********************************************************************************************************* * Description: Main function * Arguments : None * Returns : None ********************************************************************************************************* */ int main (void) { u8 key; u8 x0,y0,x1,y1,x2,y2; u8 r,a,b; unsigned char flag; tccolor=Blue; SystemInit(); UART0_Init(); LCD_Init (); LPC_GPIO0->FIODIR |= 0x00002C0; //P0.6 0.7 0.9 Output LPC_GPIO2->FIODIR |= 0x00000FF; //P2.13 input P2.0...P2.7 Output Touch_Init(); LCD_Color(0,0,239,239,White); Load_Drow_Dialog(); LCD_Color(279,0,40,40,White); while(1) { if(len==8) { len=0; flag=data[6]; switch(flag) { case 0x01: x0=data[0];y0=data[1];x1=data[2];y1=data[3]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawLine(x0,y0,x1,y1); break; case 0x02: x0=data[0];y0=data[1];x1=data[2];y1=data[3];x2=data[4];y2=data[5]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawTriangle(x0,y0,x1,y1,x2,y2); break; case 0x03: x0=data[0];y0=data[1];x1=data[2];y1=data[3]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawRectangle(x0,y0,x1,y1); break; case 0x04: x0=data[0];y0=data[1];r=data[2]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawCircle(x0,y0,r); break; case 0x05: x0=data[0];y0=data[1];a=data[2];b=data[3]; pencolor=colorchange(data[7]); LCD_Color(0,0,239,239,pencolor); LCD_DrawEllipse(x0,y0,a,b); } } key = KEY_Scan(); if(Pen_Point.Key_Sta==Key_Down) //Touch screen is pressed { Pen_Int_Set(0); //Closed interrupt do { Convert_Pos(); Pen_Point.Key_Sta=Key_Up; // Draw_Big_Point(Pen_Point.X0,Pen_Point.Y0); //Drawing if(Pen_Point.Y0>=240) { Load_Drow_Dialog(); switch(Pen_Point.X0/40) { case 0:LCD_Color(279,0,40,40,White);tccolor=Blue;break; case 1:LCD_Color(279,40,40,40,White);tccolor=Yellow;break; case 2:LCD_Color(279,80,40,40,White);tccolor=Green;break; case 3:LCD_Color(279,120,40,40,White);tccolor=Red;break; case 4:LCD_Color(279,160,40,40,White);tccolor=Purple;break; case 5:LCD_Color(279,200,40,40,White);tccolor=Cyan;break; } } /* else { LCD_Color(0,0,239,239,tccolor); }*/ }while(PEN==0); //While the Touch screen is pressing Pen_Int_Set(1); //Opene the interrupt } else delay1ms(1); } }