LCD编程_简单测试

Posted -glb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LCD编程_简单测试相关的知识,希望对你有一定的参考价值。

首先,需要编写一个led_test.c的文件,依据代码框架,在led_test.c中我们能够看到的只是led.c。我们是看不到led_controller.c的。比如说,在led_test.c中,需要使用led_controller.c中的函数,需要在led.c中对led_controller.c中的函数进行封装。

怎样去使用lcd呢,框图如下:

技术图片

 

秉承上述的思想,于是就有了下面的代码。

led_test.c

 1 void lcd_test(void)
 2 
 3     unsigned int fb_base;
 4     int xres, yres, bpp;
 5     int x, y;
 6     unsigned short *p;
 7     unsigned int *p2;
 8         
 9     /* 初始化LCD */
10     lcd_init();
11 
12     /* 使能LCD */
13     lcd_enable();
14 
15     /* 获得LCD的参数: fb_base, xres, yres, bpp */
16     get_lcd_params(&fb_base, &xres, &yres, &bpp);
17     
18     /* 往framebuffer中写数据 */
19     if (bpp == 16)
20     
21         /* 让LCD输出整屏的红色 */
22 
23         /* 565: 0xf800 */
24 
25         p = (unsigned short *)fb_base;
26         for (x = 0; x < xres; x++)
27             for (y = 0; y < yres; y++)
28                 *p++ = 0xf800;
29 
30         /* green */
31         p = (unsigned short *)fb_base;
32         for (x = 0; x < xres; x++)
33             for (y = 0; y < yres; y++)
34                 *p++ = 0x7e0;
35 
36         /* blue */
37         p = (unsigned short *)fb_base;
38         for (x = 0; x < xres; x++)
39             for (y = 0; y < yres; y++)
40                 *p++ = 0x1f;
41             
42     66 

led.c

 1 #include "lcd.h"
 2 #include "lcd_controller.h"
 3 
 4 #define LCD_NUM 10
 5 
 6 static p_lcd_params p_array_lcd[LCD_NUM];
 7 static p_lcd_params g_p_lcd_selected;
 8 
 9 int register_lcd(p_lcd_params plcd)
10 
11     int i;
12     for (i = 0; i < LCD_NUM; i++)
13     
14         if (!p_array_lcd[i])
15         
16             p_array_lcd[i] = plcd;
17             return i;
18         
19     
20     return -1;        
21 
22 
23 int select_lcd(char *name)
24 
25     int i;
26     for (i = 0; i < LCD_NUM; i++)
27     
28         if (p_array_lcd[i] && !strcmp(p_array_lcd[i]->name, name))
29         
30             g_p_lcd_selected = p_array_lcd[i];
31             return i;
32         
33     
34     return -1;        
35 
36 
37 void get_lcd_params(unsigned int *fb_base, int *xres, int *yres, int *bpp)
38 
39     *fb_base = g_p_lcd_selected->fb_base;
40     *xres = g_p_lcd_selected->xres;
41     *yres = g_p_lcd_selected->yres;
42     *bpp = g_p_lcd_selected->bpp;
43 
44 
45 void lcd_enable(void)
46 
47     lcd_controller_enable();
48 
49 
50 void lcd_disable(void)
51 
52     lcd_controller_disable();
53 
54 
55 int lcd_init(void)
56 
57     /* 注册LCD */
58     lcd_4_3_add();
59 
60     /* 注册LCD控制器 */
61     lcd_contoller_add();
62     
63     /* 选择某款LCD */
64     select_lcd("lcd_4.3");
65 
66     /* 选择某款LCD控制器 */
67     select_lcd_controller("s3c2440");
68 
69     /* 使用LCD的参数, 初始化LCD控制器 */
70     lcd_controller_init(g_p_lcd_selected);
71 

lcd_controller.c

 1 #include "lcd_controller.h"
 2 
 3 #define LCD_CONTROLLER_NUM 10
 4 
 5 static p_lcd_controller p_array_lcd_controller[LCD_CONTROLLER_NUM];
 6 static p_lcd_controller g_p_lcd_controller_selected;
 7 
 8 int register_lcd_controller(p_lcd_controller plcdcon)
 9 
10     int i;
11     for (i = 0; i < LCD_CONTROLLER_NUM; i++)
12     
13         if (!p_array_lcd_controller[i])
14         
15             p_array_lcd_controller[i] = plcdcon;
16             return i;
17         
18     
19     return -1;        
20 
21 
22 int select_lcd_controller(char *name)
23 
24     int i;
25     for (i = 0; i < LCD_CONTROLLER_NUM; i++)
26     
27         if (p_array_lcd_controller[i] && !strcmp(p_array_lcd_controller[i]->name, name))
28         
29             g_p_lcd_controller_selected = p_array_lcd_controller[i];
30             return i;
31         
32     
33     return -1;        
34 
35 
36 
37 /* 向上: 接收不同LCD的参数
38  * 向下: 使用这些参数设置对应的LCD控制器
39  */
40 
41 int lcd_controller_init(p_lcd_params plcdparams)
42 
43     /* 调用所选择的LCD控制器的初始化函数 */
44     if (g_p_lcd_controller_selected)
45     
46         g_p_lcd_controller_selected->init(plcdparams);
47         return 0;
48     
49     return -1;
50 
51 
52 void lcd_controller_enable(void)
53 
54     if (g_p_lcd_controller_selected)
55     
56         g_p_lcd_controller_selected->enable();
57     
58 
59 
60 void lcd_controller_disable(void)
61 
62     if (g_p_lcd_controller_selected)
63     
64         g_p_lcd_controller_selected->disable();
65     
66 
67 
68 
69 void lcd_contoller_add(void)
70 
71     s3c2440_lcd_contoller_add();
72 

 

以上是关于LCD编程_简单测试的主要内容,如果未能解决你的问题,请参考以下文章

编程\_LCD驱动程序框架\_使用设备树

15_LCD编程

u-boot命令行调试LCD简单记录

编程\_配置LCD控制器\_基于IMX6ULL

编程\_配置LCD控制器之寄存器操作\_基于IMX6ULL

LCD编程_使用调色板