lcd1602显示屏引脚图(嵌入式干货分享)
LCD驱动
笔者最近在研究4412开发板,为了更好入门Lcd驱动及字符,专程拜访了华清远见星创客大牛李老师,如下就是李老师指点汇总,分享给大家,不喜勿喷!
lcd驱动
一、驱动
基于framebuffer,整体代码参考内核s3c-fb.c
代码初始化步骤:
1.申请fb_info
2.初始化fb_info
3.管脚设置
4.时钟设置
我是星创客
四、应用编码
1 #include <unistd.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <fcntl.h>
5 #include <string.h>
6 #include <linux/fb.h>
7 #include <sys/mman.h>
8 #include <sys/ioctl.h>
9 #include <arpa/inet.h>
10 #include <errno.h>
11
12#define MY_W 320 //图像宽
13#define MY_H 240 //图像高
14#define MAX_SIZE 1024*600*4 //lcd屏幕大小,具体要看对应的lcd手册。我的是1024*600
15
16/*字符矩阵 16*14*/
17#define C_W 40
18#define C_H 35
19
20staticchar *fbp = 0; //映射内存起始地址
21staticint fbfd = 0; //帧缓冲fd
22
23/*存放转换后的汉字字节*/
24const unsigned char cbuf[1024]=
25 {
26/*-- 文字: 我 --*/
27/*-- 宋体26; 此字体下对应的点阵为:宽x高=35x35 --*/
28/*-- 宽度不是8的倍数,现调整为:宽度x高度=40x35 --*/
290x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x38,0x00,0x00,0x00,
300x0F,0xBE,0x00,0x00,0x00,0x7F,0xFD,0xE0,0x00,0x07,0xF8,0x3C,0x78,0x00,0x3E,0x78,
310x3C,0x7C,0x00,0x00,0x78,0x3C,0x3E,0x00,0x00,0x78,0x3C,0x1C,0x00,0x00,0x78,0x3C,
320x0C,0x00,0x00,0x78,0x3C,0x06,0x00,0x00,0x78,0x3C,0x0F,0x00,0x7F,0xFF,0xFF,0xFF,
330x80,0x00,0x78,0x3C,0x00,0x80,0x00,0x78,0x1C,0x10,0x00,0x00,0x78,0x1C,0x38,0x00,
340x00,0x78,0x1C,0x3C,0x00,0x00,0x78,0x5C,0x7E,0x00,0x00,0x7F,0xDC,0x70,0x00,0x00,
350x7E,0x1C,0xF0,0x00,0x01,0xF8,0x1F,0xE0,0x00,0x1F,0xF8,0x1F,0xC0,0x00,0x7F,0x78,
360x0F,0x80,0x00,0x3C,0x78,0x0F,0x00,0x00,0x30,0x78,0x0F,0x01,0x80,0x00,0x78,0x3F,
370x81,0x80,0x00,0x78,0x7B,0xC1,0x80,0x00,0x78,0xF1,0xE1,0x80,0x00,0x7B,0xC0,0xF3,
380x80,0x00,0x7F,0x00,0x7F,0x80,0x0F,0xFC,0x00,0x3F,0x80,0x01,0xF0,0x00,0x0F,0xC0,
390x00,0xE0,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
40 };
41
42/*转换,并显示*/
43void pch(int *add,const unsigned char* buf)
44 {
45int row = 0;
46int col = 0;
47int i = 0;
48int color = 0x0;
49for(row=0;row<C_H;row )
50 {
51/*一行数据,按位转换*/
52 unsigned char tmp[C_W];
53int index = 0;
54int j = 0;
55int k = 0;
56for(k=0;k<(C_W/8);k )
57 {
58for(j=0;j<8;j )
59 {
60 tmp[index] = (buf[i] & ((0x1<<7)>>j))>0?1:0 ;
61 index ;
62 }
63 i ;
64 j = 0;
65 }
66
67/*一行数据,按位显示*/
68for(col=0;col<C_W;col )
69 {
70if(tmp[col]&1)
71 {
72 color = 0xffff0000; //显示成红色,这里需要什么颜色自己设置(可以自行百度RGB颜色)
73 printf("1");
74 }
75else
76 {
77 color = 0x0; //显示成黑色,背景色
78 printf("0");
79 }
80 add[row*1024 col] = color;
81 }
82 printf("\n\n");
83 }
84 }
85
86/*清整屏幕,全部置为黑色*/
87void clearfb(void)
88 {
89 memset(fbp,0,MAX_SIZE); //显示成黑色,背景色
90 }
91
92int main()
93 {
94int i;
95 fbfd = open("/dev/fb0", O_RDWR);
96 fbp = (char *)mmap(0, MAX_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fbfd, 0);
97if (fbp == NULL)
98 {
99 printf("Error: failed to map framebuffer device to memory.\n");
100return -1;
101 }
102
103int *add;
104while(1)
105 {
106 add = (int *)fbp 1024*3 100; /*第三行,偏移100*/
107 clearfb();
108 pch(add,cbuf);
109 sleep(2);
110 }
111
112 munmap((void *)add,1024*600*4);
113return0;
114 }
显示效果:
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com