uyrfdcv 发表于 2010-12-24 18:25:44

LCD驱动+nand flash驱动,显示BMP图片,显示汉字,nand flash随机读写

花了好多好多天终于把液晶屏驱动写完了,呵呵正好赶在平安夜之前,明天开开心心过圣诞节。

当然写这些东西我只是复制、粘贴高手写的液晶屏驱动,自己动手写的不多,只是我把函数接口设计的更加人性化了,方便用户调用。

用户只需要自己定义画点的函数,就可以方便地调用所有驱动函数:
比较有特色的是显示BMP图片,显示汉字,nand flash随机读写:

比如要在LCD上显示“Merry 圣诞节”,只要下面一句废话就可以了:
LCD_Print("Merry 圣诞节");
还有显示BMP格式图片用LCD_Paint_BMP()函数,先要去随便找张BMP图片,再转换成C语言数组。
将文件转换成C语言数组推荐一个小软件:
还有如果你想显示楷体、黑体等汉字,或者想显示很大很大的汉字,可以使用LCD_Display_Character()函数,当然又需要用到一个高高高……手写的软件:
先用这个软件生成自定义字符点阵数组,然后就可以了。
很不爽的是这个论坛好像不能上传图片,不然我就传几张说明图片上去了。

还有用户可以先把图片存在nand flash里,这样编译后的可执行文件就不会太大,
函数调用也很简单:Flash_Write(device, buffer, start_address, number);

下载源代码:
下面是一段测试程序:void Main(void)
{
      LCD_DEVICE * device = &LCD_Device;
      ML_U32 i;
      char info[] = "MultiSilicon Link v1_2_8";
      char string[] = "0123456789";
      char buffer = "";
      Board_Init();
      LCD_Init_Device();
      while(1)
      {      
                //+ LCD驱动测试
                //# 在(0, 0)坐标处画BMP格式图片(485 * 278像素)
                //^ 图片内容为东华大学图书馆
                LCD_Paint_BMP(0, 0, BMP_Library);
                //# 画实心矩形{(40, 40), (50, 50)}
                LCD_Draw_Rectangle(40, 40, 50, 50, RGB565_RED, 1);
                //# 画空心矩形{(42, 42), (48, 48)}
                LCD_Draw_Rectangle(42, 42, 48, 48, RGB565_WHITE, 0);
                //# 画直线{(42, 42), (48, 48)}
                LCD_Draw_Line(42, 42, 48, 48, RGB565_WHITE);
                //# 画直线{(42, 48), (48, 42)}
                LCD_Draw_Line(42, 48, 48, 42, RGB565_WHITE);
                //# 在(5, 150)坐标处画BMP格式图片(196 * 69像素)
                //^ 图片内容为“东华大学”
                LCD_Paint_BMP(5, 150, BMP_Logo);
                //# 显示中英文字符串
                //^ 注意:因为中文字库比较大
                //^ 所以使用本函数,编译后生成的可执行文件会比较大
                //^ 如果资源有限,可以使用LCD_Print_ASC()函数
                LCD_Print("东华大学");
                //# 显示英文字符串
                LCD_Print_ASC("\nDONGHUA UNIVERSITY");
                //# 换行
                LCD_New_Line();
                //+ 显示60*60字符点阵
                //# 设置字符点阵的宽度
                device->font.width = 60;
                //# 设置字符点阵的高度
                device->font.height = 60;
                //# 不显示背景颜色
                device->font.display_background_color = ML_FALSE;
                //+ 依次显示每个字符
                //^ 字符内容为“爱我东华”
                for(i = 0; i < 4; i++)
                {
                        LCD_Display_Character(&Array);
                }
               
                //+ nand flash驱动测试
                //# 初始化设备,该函数会调用_Flash_Init_device1()函数对设备进行初始化
                Flash_Init_Device(&Flash_Device);      
                //# 创建重定向表,如果Flash存在坏块,这一步是必要的
                Flash_Creat_Redirect_Table(&Flash_Device, 1);
                //# 在0x123456地址处写入字符串info
                Flash_Write(&Flash_Device, info, 0x123456, sizeof(info));
                //# 在0x234567地址处写入字符串string
                Flash_Write(&Flash_Device, string, 0x234567, sizeof(string));
                //# 在0x123456地址处读入sizeof(info)个字节并存入buffer
                Flash_Read(&Flash_Device, buffer, 0x123456, sizeof(info));
                Uart_Printf("\n%s", buffer);
                //# 在0x234567 + 3地址处读入sizeof(string)个字节并存入buffer
                Flash_Read(&Flash_Device, buffer, 0x234567 + 3, sizeof(string));
                Uart_Printf("\n%s", buffer);
                while(1);      
      }
}读者请先下载可执行文件进行测试,再下载源代码,兼容64M和256M nand flash TQ2440开发板
下载可执行镜像(针对东华3.5寸LCD):
下载可执行镜像(针对东华4.3寸LCD):

对于其它型号LCD,只需修改LCD_TFT.h头文件,将
#define LCD_Type                LCDW43
这句话改成什么什么就可以了

原文链接,转载请注明出处:
http://www.cnblogs.com/multisili ... /12/23/1914721.html

nuckzjt 发表于 2010-12-25 10:03:10

支持楼主,下载下来看看,谢谢

天嵌_support1 发表于 2010-12-25 10:13:00

支持支持
页: [1]
查看完整版本: LCD驱动+nand flash驱动,显示BMP图片,显示汉字,nand flash随机读写