lcd1602显示屏引脚图(嵌入式干货分享)

lcd1602显示屏引脚图(嵌入式干货分享)(1)

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 }

显示效果:

lcd1602显示屏引脚图(嵌入式干货分享)(2)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页