zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    SQL Server 存储过程
    FindControl的详细介绍
    Transaction-SQL 游标
    硬盘安装工具nt6 hdd installer无法卸载的问题
    Some question about Source Tree
    java 简单加密
    java 多态与多重继承
    构造方法和方法的重载
    64位WIN7上安装11G R2 ,PLSQL的配置方法
    语录(排名不分先后)
  • 原文地址:https://www.cnblogs.com/-glb/p/11371373.html
Copyright © 2011-2022 走看看