基于S3C2440A終端LCD驅動(dòng)電路的設計與實(shí)現
初始化函數主要完成初始信息的設置和設備的注冊。
lcdctrl.c_smdk2440文件
1、lcdctrl_device結構體
lcdctrl_device結構體定義了具體操作LCD的各函數指針,包括LCD初始化函數,LCD開(kāi)啟和關(guān)閉函數,亮度、對比度等設置函數。其中LCD關(guān)閉函數的本質(zhì)就是將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函數
這里只敘述亮度設置函數的實(shí)現。
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 = (TCON ~(0xf)) | 0;
TCON=(TCON ~(0xf)) | (TCON_0_AUTO | COUNT_0_ON);}
函數中的語(yǔ)句大部分是給與定時(shí)器相關(guān)的寄存器寫(xiě)值。其中b就是上層函數傳遞下來(lái)的bright值,從程序中可以看到,調節亮度本質(zhì)上是通過(guò)TCMPB0寄存器寫(xiě)入與bright相關(guān)的值,控制PWM占空比實(shí)現亮度調節功能。
3、LCDctrl_device_get_ops函數
用于上層獲取具體設備的鉤子函數。代碼如下:
struct lcdctrl_device *lcdctrl_device_get_ops(void)
{return smdk2440_dev;}
此函數被lcdctrl.c初始化時(shí)調用,將設備指向smdk2440_dev。
至此,驅動(dòng)程序設計完成,為了更好地實(shí)現LCD的管理,需要在上層的Qtopia應用程序中提供人機操作的界面。
Qtopia應用程序
Qtopia應用程序提供人機操作界面并調用底層驅動(dòng)程序完成LCD控制功能,這里,仍然以亮度調節為例敘述應用程序工作過(guò)程。
主要完成功能:
1、應用程序完成人機操作的界面,為使用人員提供友好界面;
2、讀取亮度值,并將其存入變量bright中;
3、打開(kāi)設備文件:fd=open(/dev/devname,O_RDONLY);
4、調用底層的驅動(dòng)程序,通過(guò)底層的驅動(dòng)程序將LCD背光亮度調整為指定值。
ioctl(fd, _BACKLIGHT_ IOCTL_BRIGHT, bright)。
ioctl函數調用驅動(dòng)程序完成亮度的調節。
結語(yǔ)
經(jīng)測試,設計完成的LCD能很好地完成圖形的顯示,終端電源管理界面中包含了LCD亮度調節功能。
LCD驅動(dòng)電路的設計是手持終端產(chǎn)品的重要組成部分。本文設計并實(shí)現了基于S3C2440A的手持終端LCD驅動(dòng)電路。通過(guò)圖形管理界面能夠方便地管理LCD,達到節約能量、延長(cháng)手持終端工作時(shí)間的目的。
DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY
評論