主题 : LCD+nand flash+UART驱动,支持显示BMP图片,显示汉字,nand flash随机读写 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 27461
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
贡献值: 0 点
综合积分: 20 分
注册时间: 2010-08-26
最后登录: 2018-07-15
楼主  发表于: 2010-12-28 16:07

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

无操作系统下开发的LCD液晶屏驱动+nand flash驱动+UART串口驱动
以上驱动程序均在Keil MDK-ARM以及ADS1.2下编译成功,并在S3C2440开发板上测试通过


当然我只是复制、粘贴高手写的代码,自己动手写的不多,只是我把函数接口设计的更加人性化了,方便用户调用。

比如要在LCD上显示"东华大学主页:http://www.dhu.edu.cn/",只要下面一句废话就可以了:
LCD_Print("东华大学主页:http://www.dhu.edu.cn/");
还有显示BMP格式图片用LCD_Paint_BMP()函数,先随便找张BMP图片,再转换成C语言数组。
将文件转换成C语言数组推荐一个小软件: [attachment=1751]
还有如果你想显示楷体、黑体等汉字,或者想显示很大很大的汉字,可以使用LCD_Display_Character()函数,当然又需要用到一个高高高……手写的软件: [attachment=1752]
先用这个软件生成字符点阵数组,然后就可以了。

还有用户可以先把图片啊,字库啊什么的存在nand flash里,这样编译后生成的可执行文件就不会太大,而且不占用内存资源。
读Flash:Flash_Read(device, buffer, start_address, number);
写Flash:Flash_Write(device, buffer, start_address, number);

下面是测试函数:
复制代码
  1. void Main(void)
  2. {
  3.         LCD_DEVICE * device = &LCD_Device;
  4.         ML_U32 i;
  5.         char info[] = "MultiSilicon Link v1_2_8";
  6.         char string[] = "0123456789";
  7.         char buffer[512] = "";
  8.         Board_Init();
  9.         LCD_Init_Device();
  10.         while(1)
  11.         {       
  12.                 //+ LCD驱动测试
  13.                 //# 在(0, 0)坐标处画BMP格式图片(485 * 278像素)
  14.                 //^ 图片内容为东华大学图书馆
  15.                 LCD_Paint_BMP(0, 0, BMP_Library);
  16.                 //# 画实心矩形{(40, 40), (50, 50)}
  17.                 LCD_Draw_Rectangle(40, 40, 50, 50, RGB565_RED, 1);
  18.                 //# 画空心矩形{(42, 42), (48, 48)}
  19.                 LCD_Draw_Rectangle(42, 42, 48, 48, RGB565_WHITE, 0);
  20.                 //# 画直线{(42, 42), (48, 48)}
  21.                 LCD_Draw_Line(42, 42, 48, 48, RGB565_WHITE);
  22.                 //# 画直线{(42, 48), (48, 42)}
  23.                 LCD_Draw_Line(42, 48, 48, 42, RGB565_WHITE);
  24.                 //# 在(5, 150)坐标处画BMP格式图片(196 * 69像素)
  25.                 //^ 图片内容为“东华大学”
  26.                 LCD_Paint_BMP(5, 150, BMP_Logo);
  27.                 //# 显示中英文字符串
  28.                 //^ 注意:因为中文字库比较大
  29.                 //^ 所以使用本函数,编译后生成的可执行文件会比较大
  30.                 //^ 如果资源有限,可以使用LCD_Print_ASC()函数
  31.                 LCD_Print("东华大学");
  32.                 //# 显示英文字符串
  33.                 LCD_Print_ASC("\nDONGHUA UNIVERSITY");
  34.                 //# 换行
  35.                 LCD_New_Line();
  36.                 //+ 显示60*60字符点阵
  37.                 //# 设置字符点阵的宽度
  38.                 device->font.width = 60;
  39.                 //# 设置字符点阵的高度
  40.                 device->font.height = 60;
  41.                 //# 不显示背景颜色
  42.                 device->font.display_background_color = ML_FALSE;
  43.                 //+ 依次显示每个字符
  44.                 //^ 字符内容为“爱我东华”
  45.                 for(i = 0; i < 4; i++)
  46.                 {
  47.                         LCD_Display_Character(&Array[i * 30][16]);
  48.                 }
  49.                
  50.                 //+ nand flash驱动测试
  51.                 //# 初始化设备,该函数会调用_Flash_Init_device1()函数对设备进行初始化
  52.                 Flash_Init_Device(&Flash_Device);       
  53.                 //# 创建重定向表,如果Flash存在坏块,这一步是必要的
  54.                 Flash_Creat_Redirect_Table(&Flash_Device, 1);
  55.                 //# 在0x123456地址处写入字符串info
  56.                 Flash_Write(&Flash_Device, info, 0x123456, sizeof(info));
  57.                 //# 在0x234567地址处写入字符串string
  58.                 Flash_Write(&Flash_Device, string, 0x234567, sizeof(string));
  59.                 //# 在0x123456地址处读入sizeof(info)个字节并存入buffer
  60.                 Flash_Read(&Flash_Device, buffer, 0x123456, sizeof(info));
  61.                 UART_Printf("\n%s", buffer);
  62.                 //# 在0x234567 + 3地址处读入sizeof(string)个字节并存入buffer
  63.                 Flash_Read(&Flash_Device, buffer, 0x234567 + 3, sizeof(string));
  64.                 UART_Printf("\n%s", buffer);
  65.                 while(1);       
  66.         }
  67. }


下载源代码(ADS1.2编译,针对S3C2440开发板):
[attachment=1753]
下载源代码(Keil MDK-ARM编译,针对S3C2440开发板):
[attachment=1754]
下载整个项目(在S3C2440开发板上测试通过,但不是mini2440开发板):
[attachment=1755]

移植说明:
下载源代码,将Include文件夹下的全部文件(*.a, *.h)添加到工程,接下来测试移植是否成功。
先声明外部函数:
extern void UART_Test(void);
extern void LCD_Test(void);
在主函数中添加代码(添加到硬件初始化代码之后):
UART_Test();
LCD_Test();
编译,测试

说明:
nand flash驱动目前只兼容K9F1208以及K9F2G08芯片,用户在调用驱动函数前必须先完成硬件的初始化。为了方便移植,部分硬件无关代码以库的形式提供。

如有疑问请留言
[ 此帖被uyrfdcv在2010-12-28 16:45重新编辑 ]
附件设置隐藏,需要回复后才能看到
级别: 新手上路
UID: 28594
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
贡献值: 0 点
综合积分: 62 分
注册时间: 2010-09-13
最后登录: 2016-04-08
1楼  发表于: 2010-12-28 16:10
好东东,谢谢分享
级别: 骑士
UID: 9169
精华: 0
发帖: 249
金钱: 1330 两
威望: 299 点
贡献值: 0 点
综合积分: 498 分
注册时间: 2009-09-19
最后登录: 2017-08-14
2楼  发表于: 2010-12-30 15:02

 回 楼主(uyrfdcv) 的帖子

学习一下啊。
踏浪而行
级别: 新手上路
UID: 29569
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2010-09-30
最后登录: 2011-03-03
3楼  发表于: 2011-01-10 20:27

 回 楼主(uyrfdcv) 的帖子

TKS
级别: 新手上路
UID: 1743
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2008-09-24
最后登录: 2017-04-03
4楼  发表于: 2011-01-11 08:22
一直这研究NANDFLASH
共同学习    共同进步
级别: 侠客
UID: 36048
精华: 0
发帖: 56
金钱: 280 两
威望: 56 点
贡献值: 0 点
综合积分: 112 分
注册时间: 2011-01-11
最后登录: 2015-06-18
5楼  发表于: 2011-01-11 20:32
好东西  
级别: 新手上路
UID: 32923
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
贡献值: 0 点
综合积分: 8 分
注册时间: 2010-11-23
最后登录: 2011-06-25
6楼  发表于: 2011-01-12 10:56

 回 楼主(uyrfdcv) 的帖子

好东西,学习一下,谢谢分享哦
级别: 新手上路
UID: 32232
精华: 0
发帖: 14
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 28 分
注册时间: 2010-11-12
最后登录: 2011-07-10
7楼  发表于: 2011-01-12 17:58
hhhhhhhhhhhhhhhhhhhhhhhhhh
级别: 新手上路
UID: 36185
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2011-01-12
最后登录: 2017-09-13
8楼  发表于: 2011-01-12 22:43
收藏了
级别: 侠客
UID: 23703
精华: 0
发帖: 84
金钱: 425 两
威望: 85 点
贡献值: 0 点
综合积分: 168 分
注册时间: 2010-06-24
最后登录: 2018-12-25
9楼  发表于: 2011-01-14 10:47
南无阿弥陀佛