首页 > 范文大全 > 正文

S3C6410 (ARM11) 嵌入式控制系统液晶显示驱动问题研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇S3C6410 (ARM11) 嵌入式控制系统液晶显示驱动问题研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:嵌入式控制系统的设计,首先要进行人机界面设计,这就涉及到在LCD上显示汉字、英文字符和各种曲线的问题,在Linux嵌入式控制系统设计中也是如此。我们知道,无论是高级语言支持的各种显示器,还是嵌入式系统常用的LCD,它们的分辨率都是以像素为单位,一个像素就是LCD屏上的一个可以显示的最小单位,也就是常说的“点”。因此,要在LCD屏上显示一个汉字或图形就必须将汉字或图形用“点”来表示。在嵌入式控制系统人机界面设计中,采用“打点”方法来显示汉字、英文字符和各种曲线,是直接对显示内存进行操作,从而使显示速度最快、技术最先进。文章介绍作者在进行“嵌入式肿瘤光子热疗系统”项目的人机界面设计时,不用QT,绕过繁琐的Frame Buffer结构,直接采用“打点”的方法显示汉字、英文字符和各种曲线,“打点”方法可以适用各种平台的嵌入式控制系统人机界面设计。

关键词:“打点”;Frame Buffer;bpp;kernel;Makefile

中图分类号:TN141.9 文献标识码:B

Research on LCD Driver Programming in Embedded System Based on s3c6410

HOU Dian-you, LIU Xiao-guang, JI He

(College of Optical and Electronical Information Changchun University of Science and Technology, Changchun Jilin 130012, China)

Abstract:It is very important to design human-machine interface in modern embedded control system, which means displaying Chinese characters, western characters and curves on LCD, even in the system which Linux is already in application. We have known that LCDs, no matter where is it used, display with pixels. Pixel is the unit to describe LCD's resolving power. So it is necessary to convert characters and curves to pixel matrix which then displayed on LCD. In this way, we can operate the display memory directly and promote the display speed and reduce the memory consumption.In this article, the author introduced how to use this method, not QT etc. complex technology, to design LCD driver by using of a real project.

Keywords:print pixel; framebuffer; bpp; kernel; makefile

引 言

首先在Linux内核中增加一个“打点”的设备驱动程序,这样我们就可以在应用程序中调用此功能来完成显示工作,这项工作可以对S3C6410进行二次开发厂家提供的FrameBuffer设备驱动程序改造得到,也可以自己编写。

1 设备驱动程序

Linux kernel “打点”的设备驱动程序如下:

//先定义一个函数的指针,这个函数功能就是“打点”。

void (*PutPixel) (UINT32T,UINT32T,UINT32T);

//定义显示缓冲区

#define LCDFRAMEBUFFER 0x33800000 //定义显示缓冲区

//根据使用显示器类型,给函数指针赋值。

void Glib_Init(int type)

{

switch(type)

{

case MODE_STN_1BIT:

PutPixel=_PutStn1Bit;

break;

case MODE_STN_2BIT:

PutPixel=_PutStn2Bit;

break;

…L

case MODE_TFT_16BIT_800600:

PutPixel=_PutTft16Bit_800600;

break;

default:

break;

}

}

//不同显示类型、不同bpp的打点函数

void _PutStn1Bit(UINT32T x,UINT32T y,UINT32T c)

{

if(x

frameBuffer1Bit[(y)][(x)/32]=( frameBuffer1Bit[(y)][(x)/32]

& ~(0x80000000>>((x)%32)*1) ) | ( (c&0x00 000001)

}

void_PutStn2Bit (UINT32T x, UINT32T y, UINT32T c)

{

if(x

frameBuffer2Bit [(y)] [(x)/16] = (frameBuffer2Bit [(y)] [x/16]

& ~ (0xc0000000>> ((x) %16)*2)) | ((c&0x000 00003)

}

void _PutTft16Bit_800600(UINT32T x,UINT32T y,UINT32T c)

{

if(x

frameBuffer16BitTft800600 [(y)] [(x)/2] = ( frameBuffer16BitTft800600[(y)] [x/2]

& ~(0xffff0000>>((x)%2)*16)) | ((c&0x0000ffff)

}

编写一个Makefile文件和含有此驱动的kernel映像下载到RAM中调试,调试成功再将kernel映像修改为在Flash中执行。

2 应用程序

在我们的应用程序中,就可以调用kernel中的“打点”函数。

应用程序:

/* 调Glib_Init,将显示器类型和BPP传给kernel */

Glib_Init (MODE_STN_1BIT);

/* 显示一个24×24点阵汉字,依此法可以显示各种点阵汉字、点阵汉字串和点阵图案。

chn2424[]中存24×24点阵小汉字字模 */

void DrawOneChn2424(U8 x,U8 y,U8chnCODE){

U16 i,j,k,tstch;

U8 *p;

p=chn2424+72*(chnCODE);

for (i=0;i

{

for(j=0;j

{

tstch=0x80;

for (k=0;k

{

if(*(p+3*i+j)&tstch)

PutPixel (x+i,y+j*8+k);

tstch=tstch>>1;

}

}

}

}

/* 在128×64屏上显示一条实时正弦曲线,依此法可以显示各种可以用数学表达方式描述的实时曲线 */

voidShowSinWave (void)

{

unsignedint x;

double y,a,b;

for (x=0;x

{

a=((float)x/127)*2*3.14;

y=sin(a);

b=(1-y)*32;

PutPixel ((U8)x,(U8)b);

disdelay();

}

}

/*显示一个8×16 英文字符,asc816[]中存8×16点阵字模。依此可以显示国标上有的拉丁文数字、一般符号、序号、日文假名、希腊字母、英文、俄罗斯文、汉语拼音符号、汉语注音字母等*/ 。该项研究成果在深圳英培特Embesy EDUKIT-Ⅲ教学实验系统调试通过(这些字模可在《信息交换用汉字编码字符集(基本集)》GB2312-80中提取)。

void DrawOneAsc816(U8 x,U8 y,U8 charCODE){

U8 *p;

U8 i,k;

int mask[]={0x80,0x40,0x20,0x10,0x08,0x04, 0x02,0x01 };

p=asc816+charCODE*16;

for (i=0;i

{

for(k=0;k

{

if (mask[k%8]&*p)

PutPixel (x+k,y+i);

}

p++;

}

参考文献

[1] 王士元. C高级实用程序设计[M]. 北京:清华大学出版社,2000.

[2] 李维等. 液晶显示应用手册[M]. 北京:电子工业出版社,2002.

[3] T6963C控制器应用手册. 河北:冀诚电子有限公司,2000.

[4] S3C2410X 32-BIT RISC MICROPROCESSOR USER'S MANUAL.SAMSUNG ELECTRONICS,2003.

[5] HD66421 DOT MATRIX GRAPHICS LCD. HITACHI SE- MICONDUCTOR,1999.

[6] USER'S MANUAL S3C6410XRISC Microprocessor Co- nfidential Proprietary of Samsung Electronics Co., Ltd 2008.

[7] 孙俊喜. 液晶(LCD)显示原理、编程及应用[M]. 人民邮电出版社, 2008.

作者简介:侯殿有(1945-),男,籍贯吉林省长春市,毕业于哈尔滨工业大学,工学硕士,研究方向为嵌入式控制系统设计,长期在中国兵器工业第55研究所从事嵌入式控制系统科研工作,教授级高级工程师。现聘为长春理工大学光电信息学院信息工程分院院长。迄今为止获部科技进步一等奖一次,省级或其它奖励四次,光华三等奖一次。并被收入中国当代科技专家大全,参加多个国家指令性课题和横向课题,如国防科工委BQ-MFS柔性制造系统中的数控制导车,中国运载火箭研究院和中国工程物理研究院的计算机伺服控制双轮旋压机,中国兵器工业总公司的录返式数控旋压和二十多项横向课题。公开出版专著两部, “LCD原理和驱动程序设计”,已由人民邮电出版社正式出版;“ARM9 C语言程序设计标准教程”正在审稿中,现从事“嵌入式设计”等课程教学和科研工作。E-mail:。