
基于手持终端的LCD驱动电路的实现
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输入充电。
目