
前面编写了s3c2440_lcd_,以后我们只需往里面传入参数即可控制LCD控制器,对于我们的4.3寸LCD,配合LCD手册时序的介绍,相关的设置如下:

defineLCD_CONTROLLER_NUM10staticp_lcd_controllerp_array_lcd_controller[LCD_CONTROLLER_NUM];staticp_lcd_controllerg_p_lcd_controller_selected;intregister_lcd_controller(p_lcd_controllerplcdcon){inti;for(i=0;iLCD_CONTROLLER_NUM;i++){if(!p_array_lcd_controller[i]){p_array_lcd_controller[i]=plcdcon;returni;}}return-1;}intselect_lcd_controller(char*name){inti;for(i=0;iLCD_CONTROLLER_NUM;i++){if(p_array_lcd_controller[i]!strcmp(p_array_lcd_controller[i]-name,name)){g_p_lcd_controller_selected=p_array_lcd_controller[i];returni;}}return-1;}/*向上:接收不同LCD的参数*向下:使用这些参数设置对应的LCD控制器*/intlcd_controller_init(p_lcd_paramsplcdparams){/*调用所选择的LCD控制器的初始化函数*/if(g_p_lcd_controller_selected){g_p_lcd_controller_selected-init(plcdparams);return0;}return-1;}voidlcd_contoller_add(void){s3c2440_lcd_contoller_add();}同时,在s3c2440_lcd_里注册控制器:voids3c2440_lcd_contoller_add(void){register_lcd_controller(s3c2440_lcd_controller);}这样,s3c2440_lcd_里的register_lcd_controller()将自己放在p_array_lcd_controller[]这个数组,然后上层的lcd_调用select_lcd_controller()传入要选择的LCD控制器,然后在数组里面找到名字名字匹配的LCD控制器进行相应的初始化。
同理,也通过去管理lcd_4.3.c,思路如下:
a.有一个数组存放各类lcd的参数;
b.有一个register_led给下面的lcd程序来设置数组;
c.有一个select_lcd,供上层选择某款LCD;
参考前面的lcd_编辑lcd_如下:
#defineLCD_NUM10staticp_lcd_paramsp_array_lcd[LCD_NUM];staticp_lcd_paramsg_p_lcd_selected;intregister_lcd(p_lcd_paramsplcd){inti;for(i=0;iLCD_NUM;i++){if(!p_array_lcd[i]){p_array_lcd[i]=plcd;returni;}}return-1;}intselect_lcd(char*name){inti;for(i=0;iLCD_NUM;i++){if(p_array_lcd[i]!strcmp(p_array_lcd[i]-name,name)){g_p_lcd_selected=p_array_lcd[i];returni;}}return-1;}在lcd_4.3.c里面把lcd参数注册进去:
voidlcd_4_3_add(void){register_lcd(lcd_4_3_params);}以后只需要在里面选择某款lcd和某款lcd控制器即可,底层的只管添加种类即可。
在里面添加初始化函数如下:
intlcd_init(void){/*注册LCD*/lcd_4_3_add();/*注册LCD控制器*/lcd_contoller_add();/*选择某款LCD*/select_lcd("lcd_4.3");/*选择某款LCD控制器*/select_lcd_controller("s3c2440");/*使用LCD的参数,初始化LCD控制器*/lcd_controller_init(g_p_lcd_selected);}上一篇:LCD原理详解及裸机程序分析——第005节_LCD控制器编程
下一篇:LCD原理详解及裸机程序分析——第007节_LCD编程简单测试