LCD电子书项目(一)
自己已经做了很多项目了,但是很少总结,这样的学习效果不是很好,自己总结能够让自己更加充分的去理解源代码。今天趁放假时间来把电子书项目总结一下。设计思路:LCD作为电子书显示器,触摸屏或者终端stdin作为按键输入设备,控制翻页。整个项目源码下载地址:点击这里!做这个项目首先得让自己开发板能够跑起Linux操作系统,然后写LCD驱动和触摸屏驱动。这个可以参考我写的驱动代码,基本上符合
自己已经做了很多项目了,但是很少总结,这样的学习效果不是很好,自己总结能够让自己更加充分的去理解源代码。今天趁放假时间来把电子书项目总结一下。设计思路:LCD作为电子书显示器,触摸屏或者终端stdin作为按键输入设备,控制翻页。
整个项目源码下载地址:点击这里!
做这个项目首先得让自己开发板能够跑起Linux操作系统,然后写LCD驱动和触摸屏驱动。这个可以参考我写的驱动代码,基本上符合所以得LCD和触摸屏,变化最多也只是电路的接线不一样。
LCD驱动程序参考:http://blog.csdn.net/qq_21792169/article/details/50427961
触摸屏驱动程序参考:http://blog.csdn.net/qq_21792169/article/details/48750695
多文件夹编写Makefile参考:http://blog.csdn.net/qq_21792169/article/details/50448639
和硬件相关的代码也只有LCD和触摸屏了,其他代码适合所有的开发板。
下面开始从零讲解代码:
我们已面对象思想来编写程序,模块化编程方便我们查找代码,修改代码,可移植性强,我们把各个模块都放进自己相似类型的链表中,方便统一管理。下面我们开始讲解代码,从显示LCD开始讲解代码。
先看下工程目录结构:
include头文件目录:
display /* LCD显示部分的代码 */
draw /* 文本在LCD上显示操作函数 */
encoding /* 解码,支持utf-8 utf-16be utf-16le ascii.c */
fonts /* 对字体的操作,矢量字体,ascii gbk字体 */
input /* 输入操作,触摸屏,标准输入stdin */
include /* 所用到的头文件目录 */
si /* sourceInsight工程目录 */
主函数是main.c
编译用到的是Makefile和Makefile.build /* 多文件夹编写Makefile:点击这里! ,根据Makefile可以清楚看待各个目录下的文件,所用到的库,*/
Makefile文件如下:
<span style="font-size:18px;">CROSS_COMPILE = arm-linux-
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
export AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMP
CFLAGS := -Wall -O2 -g
CFLAGS += -I $(shell pwd)/include
LDFLAGS := -lm -lfreetype -lts -lpthread
export CFLAGS LDFLAGS
TOPDIR := $(shell pwd)
export TOPDIR
TARGET := show_file
obj-y += main.o
obj-y += display/
obj-y += draw/
obj-y += encoding/
obj-y += fonts/
obj-y += input/
all :
make -C ./ -f $(TOPDIR)/Makefile.build
$(CC) $(LDFLAGS) -o $(TARGET) built-in.o
clean:
rm -f $(shell find -name "*.o")
rm -f $(TARGET)
distclean:
rm -f $(shell find -name "*.o")
rm -f $(shell find -name "*.d")
rm -f $(TARGET)
</span>
Makefile.build
<span style="font-size:18px;">PHONY := __build
__build:
obj-y :=
subdir-y :=
include Makefile
# obj-y := a.o b.o c/ d/
# $(filter %/, $(obj-y)) : c/ d/
# __subdir-y : c d
# subdir-y : c d
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
subdir-y += $(__subdir-y)
# c/built-in.o d/built-in.o
subdir_objs := $(foreach f,$(subdir-y),$(f)/built-in.o)
# a.o b.o
cur_objs := $(filter-out %/, $(obj-y))
dep_files := $(foreach f,$(cur_objs),.$(f).d)
dep_files := $(wildcard $(dep_files))
ifneq ($(dep_files),)
include $(dep_files)
endif
PHONY += $(subdir-y)
__build : $(subdir-y) built-in.o
$(subdir-y):
make -C $@ -f $(TOPDIR)/Makefile.build
built-in.o : $(cur_objs) $(subdir_objs)
$(LD) -r -o $@ $^
dep_file = .$@.d
%.o : %.c
$(CC) $(CFLAGS) -Wp,-MD,$(dep_file) -c -o $@ $<
.PHONY : $(PHONY)</span>
config.h /* 配置文件,整个工程所用到的配置文件,我们放在include目录下 */
<span style="font-size:18px;">#ifndef _CONFIG_H
#define _CONFIG_H
#include <stdio.h>
#define FB_DEVICE_NAME "/dev/fb0"
#define COLOR_BACKGROUND 0xE7DBB5 /* 泛黄的纸 */
#define COLOR_FOREGROUND 0x514438 /* 褐色字体 */
#define DBG_PRINTF(...)
//#define DBG_PRINTF printf
#endif /* _CONFIG_H */
</span>
框架结构就讲解完毕,下篇文章重点讲解各个模块,框架是固定的,记住模板就行。
更多推荐
所有评论(0)