您现在的位置:首页 > 科技成果科技成果

基于手持终端的LCD驱动电路的实现

发布时间:2015-08-05 13:14:24  来源:大电流电感厂家   查看:

  Linux操作系统为LCD等显示设备提供了帧缓冲区。环型电感帧缓冲区(Framebuffer)是Linux为显示设备提供的一个接口,是把显存抽象化后的一种设备。为LCD编写驱动程序的实质就是为帧缓冲区编写驱动程序。一体电感器

  由于帧缓冲驱动程序的实现在许多论文中有详细叙述,这里不再赘述,本文重点讨论背光设备驱动程序的实现。

  LCD背光设备的驱动程序

  LCD背光设备可看作字符设备,可以按照字符设备驱动程序的编写方法进行实现。在驱动程序里实现了LCD各种控制功能。驱动程序主要包括lcdctrl.c和lcdctrl_smdk2440.c。其中lcdctrl.c屏蔽了具体的硬件,它通过钩子函数调用lcdctrl_smdk2440.c相关函数完成各种具体操作。为了形象地说明两个文件之间的关系,这里以LCD亮度调节过程为例,说明函数的调用过程,如图4所示。

  

  lcdctrl.c中的lcdctrl_ioctl函数需根据上层应用程序的不同参数实现不同的功能,这些控制LCD的功能包括亮度调整、对比度调整、关闭LCD、开启LCD等。

  下面分别叙述两个文件的实现。

  lcdctrl.c文件

  1、定义file_operation结构体

  static st一体电感ruct file_operations lcdctrl_fops = {

  ioctl: lcdctrl_ioctl,

  open: lcdctrl_open,

  release: lcdctrl_close };

  LCD的各种控制功能在lcdctrl_ioctl函数中实现,lcdctrl_open和lcdctrl_close不实现具体功能,直接返回0值。

  2、lcdctrl_ioctl函数

  lcdctrl_ioctl函数需根据上层应用程序的不同参数实现不同的功能,这里主要说明亮度调节功能的实现。部分代码如下:

  static int lcdctrl_ioctl(struct inode * inode, struct file *filp, unsigned int cmd , unsigned long arg)

  {……

  switch(cmd)

  { ……

  case

  _LCDCTRL_IOCTL_BRIGHTNESS:

  if ((arg >=0) && (arg <= 100))

  ret = lcdctrl_set_brightness(arg);

  break; //调节LCD背光亮度

  ……

  br电感生产厂家eak;}

  return ret;}

  当应用程序传递的命令参数为LCDCTRL_IOCTL_BRIGHT塑封电感器NESS时,lcdctrl_ioctl调用lcdctrl_set_ brightness具体实现亮度调节功能。

  3、lcdctrl_set_brightness函数

  lcdctrl_set_brightness具体实现亮度调节功能。主要代码如下:

  int lcdctrl_set_brightness(int b)

  {

  brightness = b;

  return lcd_device->set_brightness(b);

  }

  可以看出,此函数调用lcd_ device->set_brightness函数,而lcd_device在初始化时已被指向与具体的硬件相关的函数。

4、初始化函数

  初始化函数主要完成初始信息的设置和设备的注册。

  lcdctrl.c_smdk2440文件

  1、lcdctrl_device结构体

  lcdctrl_device结构体定义了具体操作LCD的各函数指针,包括LCD初始化函数,LCD开启和关闭函数,亮度、对比度等设置函数。其中LCD关闭函数的本质就是将LCD背光亮度设置为0。

  static struct lcdctrl_device smdk2440_dev = {

  init: smdk2440_lcdctrl_init,

  enable: smdk2440_lcdctrl_enable,

  disable: smdk2440_lcdctrl_disable,

  set_intensity: smdk2440_lcdctrl_set_intensity,

  set_brightness: smdk2440_lcdctrl_set_brightness,

  set_contrast: smdk2440_lcdctrl_set_contrast};

  2、smdk2440_lcdctrl_set_brightnes函数

  这里只叙述亮度设置函数的实现。

  static int smdk2440_lcdctrl_set_brightness( int b)

  { ……

  TCNTB0 = 100;

  TCMPB0 = b*100/100;

  //设置TCMPB0寄存器的值

  TCON = (TCON & ~(0xf)) | ( TCON_0_AUTO | TCON_0_MAN | COUNT_0_OFF);

  TCON = (TC0805电感ON & ~(0xf)) | 0;

  TCON=(TCON & ~(0xf)) | (TCON_0_AUTO | COUNT_0_ON);}

  函数中的语句大部分是给与定时器相关的寄存器写值。其中b就是上层函数传递下来的bright值,从程序中可以看到,调节亮度本质上是通过TCMPB0寄存器写入与bright相关的值,控制PWM占空比实现亮度调节功能。

  3、lcdctrl_device_get_ops函数

  用于上层获取具体设备的钩子函数。代码如下:

  struct lcdctrl_device *lcdctrl_device_get_ops(void)

  {return &smdk2440_dev;}平面变压器厂家 | 平面电感厂家

[变压器]145W反激变压器设计详细过程145W反激变压器设计详细过程        性能要求        输入电压        176~265效率η        0.8输出电压Vo1        5V输出电流Io1        5A输出电压Vo2        12V输出电流Io2        10A工作频率f        50KHz磁芯选择        磁芯截面积        0.15*sqrt(Po/η)=2.02cm

基于ARM的嵌入式监控系统设计与实现摘要 : 介绍了一种基于ARM7 的监控系统, 详细描述了嵌入式网络视频服 务器和远程控制平台的设计与实现.通过自定义协议,系统实现了数据的可靠传输和MPEG-4 视频流图像的平滑传输, 各项指标均符

单USB口充电放电单片机怎么控制?有个产品,只有一个MICRO-USB口,可以同时充电和放电。
用单片机(MSP430G2553//3.3V)控制,现在对于充电这里的隔离控制电路有困难,请大家帮忙看看。
谢谢!!说明:1,普通5V输入充电。

CopyRight2014
大电流电感 | 大功率电感 | 扁平线圈电感 注塑加工厂