|
初次使用RT-GUI和RT-THREAD操作系统,RT-GUI测试碰到一个特殊问题请教,所有的控件,标题和控制本身显示之时分离,控件绘制之时标题显示正常,但控制本身从右向左绘制,文字从左向右绘制(正确,有图),请各位指教!
照片照的不清楚,照了好几张都是这样!
测试时的图片-RT-GUI (原文件名:1.JPG)
下面是一张示例图片,最后一个控件是文本框,要显示的文字是textbox,可以清楚的看到,控制从右向左控制,到最左边之后,折到最继续绘制,一直到指定的大小。第一张是一个按纽,情况相同,第二个是进度条,情况也是一样,当进度条更新的时候,先从右向左填充蓝色,到最左之后,折到最右继续显示,一直到指定的大小。
说明问题的示例图片 (原文件名:2.JPG)
测试之时使用的是英蓓特公司的103ZE的开发板,320*240屏的驱动芯片是ILI9325。
各位分析一下:可能是因为驱动层的问题(ILI9325)还是我程序的问题。
代码如下:
void ili9325_Initializtion(void)
{
u32 i=0;
//hardware initialization
LCD_CtrlLinesConfig();
LCD_FSMCConfig();
Delay(5);
LCD_WriteReg(R227, 0x3008); // Set internal timing
LCD_WriteReg(R231, 0x0012); // Set internal timing
LCD_WriteReg(R239, 0x1231); // Set internal timing
LCD_WriteReg(R1 , 0x0100); // set SS and SM bit
LCD_WriteReg(R2 , 0x0700); // set 1 line inversion
/* [5:4]-ID~ID0 [3]-AM-1垂直-0水平 */
LCD_WriteReg(R3,(1<<12)|(1<<5)|(0<<4) | (1<<3) );
LCD_WriteReg(R4 , 0x0000); // Resize register
LCD_WriteReg(R8 , 0x0207); // set the back porch and front porch
LCD_WriteReg(R9 , 0x0000); // set non-display area refresh cycle ISC[3:0]
LCD_WriteReg(R10 , 0x0000); // FMARK function
//LCD_WriteReg(R12 , 0x0001); // RGB interface setting
LCD_WriteReg(R13 , 0x0000); // Frame marker Position
LCD_WriteReg(R15 , 0x0000); // RGB interface polarity
/**************Power On sequence ****************/
LCD_WriteReg(R16 , 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_WriteReg(R17 , 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
LCD_WriteReg(R18 , 0x0000); // VREG1OUT voltage
LCD_WriteReg(R19 , 0x0000); // VDV[4:0] for VCOM amplitude
Delay(20); // Delay 200 MS , Dis-charge capacitor power voltage
LCD_WriteReg(R16 , 0x1790); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_WriteReg(R17 , 0x0227); // R11H=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]
Delay(5); // Delay 50ms
LCD_WriteReg(R18 , 0x009c); // External reference voltage= Vci;
Delay(5); // Delay 50ms
LCD_WriteReg(R19 , 0x1900); // R13H=1D00 when R12H=009D;VDV[4:0] for VCOM amplitude
LCD_WriteReg(R41 , 0x0023); // R29H=0013 when R12H=009D;VCM[5:0] for VCOMH
LCD_WriteReg(R43 , 0x000e); // Frame Rate = 96Hz
Delay(5); // Delay 50ms
LCD_WriteReg(R32 , 0x0000); // GRAM horizontal Address
LCD_WriteReg(R33 , 0x0000); // GRAM Vertical Address
/* ----------- Adjust the Gamma Curve ---------- */
LCD_WriteReg(R48 , 0x0007);
LCD_WriteReg(R49 , 0x0707);
LCD_WriteReg(R50 , 0x0006);
LCD_WriteReg(R53 , 0x0704);
LCD_WriteReg(R54 , 0x1F04);
LCD_WriteReg(R55 , 0x0004);
LCD_WriteReg(R56 , 0x0000);
LCD_WriteReg(R57 , 0x0706);
LCD_WriteReg(R60 , 0x0701);
LCD_WriteReg(R61 , 0x000F);
/* ------------------ Set GRAM area --------------- */
LCD_WriteReg(R80 , 0x0000); // Horizontal GRAM Start Address
LCD_WriteReg(R81 , 0x00ef); // Horizontal GRAM End Address
LCD_WriteReg(R82 , 0x0000); // Vertical GRAM Start Address
LCD_WriteReg(R83 , 0x013f); // Vertical GRAM End Address
LCD_WriteReg(R96 , 0xa700); // Gate Scan Line
LCD_WriteReg(R97 , 0x0001); // NDL,VLE, REV
LCD_WriteReg(R106, 0x0000); // set scrolling line
/* -------------- Partial Display Control --------- */
LCD_WriteReg(R128, 0x0000);
LCD_WriteReg(R129, 0x0000);
LCD_WriteReg(R130, 0x0000);
LCD_WriteReg(R131, 0x0000);
LCD_WriteReg(R132, 0x0000);
LCD_WriteReg(R133, 0x0000);
/* -------------- Panel Control ------------------- */
LCD_WriteReg(R144, 0x0010);
LCD_WriteReg(R146, 0x0600);
LCD_WriteReg(R147, 0x0003);
LCD_WriteReg(R149, 0x0110);
LCD_WriteReg(R151, 0x0000);
LCD_WriteReg(R152, 0x0000);
LCD_WriteReg(R7 , 0x0133); // 262K color and display ON
LCD_WriteReg(R32 , 0x0000); // GRAM horizontal Address
LCD_WriteReg(R33 , 0x0000); // GRAM Vertical Address
Delay(5);
ili9325_Clear(White);
}
上述是ILI9325部分的程序;
下面是RT-GUI部分:
static rtgui_progressbar_t* hbar;
static rtgui_timer_t *bar_timer=RT_NULL;
static char* radio_item[2]={"one","two"};
static rt_bool_t benchmain_evetn_handler(struct rtgui_widget* widget, struct rtgui_event* event)
{
//处理benchmain面板中发生的事件,暂时不用,直接用默认处理
return rtgui_view_event_handler(widget, event);
}
static rt_bool_t main_view_event_handler(struct rtgui_widget* widget, struct rtgui_event* event)
{
//处理benchmain面板中发生的事件,暂时不用,直接用默认处理
return rtgui_view_event_handler(widget, event);
}
void progressbar_timeout(struct rtgui_timer* timer,void* parameter)
{
static rt_uint32_t value=0;
value++;
if(value==100)
value=0;
rtgui_progressbar_set_value(hbar,value);
}
static void info_entry(void* parameter)
{
//UI依赖于一定的线程环境,它依赖于一个消息队列,
//这个消息队列会收到来自GUI SERVER的请求信息
rt_mq_t mq;
//工作台
struct rtgui_workbench* main_workbench;
//
struct rtgui_view* main_view;
rtgui_checkbox_t *checkbox;
rtgui_button_t* button;
rtgui_label_t* label;
rtgui_radiobox_t* radiobox;
rtgui_slider_t* slider;
rtgui_textbox_t* textbox;
//
rtgui_font_t* font;
//
rtgui_rect_t rect;
//创建一个消息队列
mq = rt_mq_create("qInfo",
32,
8,
RT_IPC_FLAG_FIFO);
//注册消息对列mq到当前线程上
rtgui_thread_register(rt_thread_self(), mq);
//创建工作台 在main面板区域
main_workbench = rtgui_workbench_create("main", "benchmain");
if (main_workbench == RT_NULL) return;
//rtgui_widget_set_event_handler(RTGUI_WIDGET(main_workbench),benchmain_evetn_handler);
//下面在mainbench上创建另一个视图
main_view=rtgui_view_create("mainview");
RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(main_view))=white;
rtgui_widget_set_event_handler(RTGUI_WIDGET(main_view),main_view_event_handler);
rtgui_workbench_add_view(main_workbench,main_view);
//创建checkbox
//获取视图的区域
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=5;
rect.x2=rect.x1+100;
rect.y1+=5;
rect.y2=rect.y1+20;
checkbox=rtgui_checkbox_create("checkbox");
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox))=red;
rtgui_widget_set_rect(RTGUI_WIDGET(checkbox),&rect);
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(checkbox));
//创建按钮
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=50;
rect.x2=rect.x1+80;
rect.y1+=5+25;
rect.y2=rect.y1+20;
button=rtgui_button_create("red");
RTGUI_WIDGET(button)->align = RTGUI_ALIGN_CENTER_VERTICAL;
rtgui_widget_set_rect(RTGUI_WIDGET(button),&rect);
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button))=red;
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(button));
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=100;
rect.x2=rect.x1+50;
rect.y1+=5+25+25;
rect.y2=rect.y1+20;
button=rtgui_button_create("blue");
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button))=blue;
rtgui_widget_set_rect(RTGUI_WIDGET(button),&rect);
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(button));
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=5;
rect.x2=rect.x1+40;
rect.y1+=5+25+25+25;
rect.y2=rect.y1+20;
button=rtgui_button_create("12 font");
font=rtgui_font_refer("asc",12);
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button))=red;
RTGUI_WIDGET_FONT(RTGUI_WIDGET(button))=font;
rtgui_widget_set_rect(RTGUI_WIDGET(button),&rect);
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(button));
//创建label
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=5;
rect.x2=rect.x1+100;
rect.y1+=5+25+25+25+25;
rect.y2=rect.y1+20;
label=rtgui_label_create("blue left");
RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label))=RTGUI_ALIGN_LEFT;
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label))=blue;
rtgui_widget_set_rect(RTGUI_WIDGET(label),&rect);
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(label));
//create a progressbar
rect.y1+=20;
rect.y2=rect.y1+18;
hbar=rtgui_progressbar_create(RTGUI_HORIZONTAL,100,&rect);
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(hbar));
bar_timer=rtgui_timer_create(50,RT_TIMER_FLAG_PERIODIC,progressbar_timeout,RT_NULL);
rtgui_timer_start(bar_timer);
//create two raidobox
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=5;
rect.x2=rect.x1+40;
rect.y1+=5+25+25+25+25+25;
rect.y2=rect.y1+20;
radiobox=rtgui_radiobox_create("Radio box",RTGUI_VERTICAL,radio_item,2);
rtgui_radiobox_set_selection(radiobox,0);
//crate a slider
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=5;
rect.x2=rect.x1+40;
rect.y1+=5+25+25+25+25+25+25*2;
rect.y2=rect.y1+20;
slider=rtgui_slider_create(0,100,RTGUI_HORIZONTAL);
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(slider));
rtgui_widget_set_rect(RTGUI_WIDGET(slider),&rect);
//create a textbox
//crate a slider
rtgui_widget_get_rect(RTGUI_WIDGET(main_view),&rect);
rect.x1+=5;
rect.x2=rect.x1+120;
rect.y1+=5+25+25+25+25+25+25*3;
rect.y2=rect.y1+20;
textbox=rtgui_textbox_create("textbox");
rtgui_widget_set_rect(RTGUI_WIDGET(textbox),&rect);
rtgui_container_add_child(RTGUI_CONTAINER(main_view),RTGUI_WIDGET(textbox));
//显示次视图
rtgui_view_show(main_view, RT_FALSE);
//rtgui_view_show(()checkbox,RT_FALSE);
//执行窗口的事件循环
rtgui_workbench_event_loop(main_workbench);
//去注册当前线程
rtgui_thread_deregister(rt_thread_self());
//删除相应的消息队列
rt_mq_delete(mq);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|