当前位置:首页 > 单片机 > 单片机
[导读]显示自定义字符  步骤如下:    1. 先将自定义字符写入CGRAM ; 2. 再将CGRAM中的自定义字符送到DDRAM中显示  很简单的:看好了  查看LCD1602 的CGROM 字符代码表,可以发现 从00000000B~00000111B(00H~

显示自定义字符

  步骤如下:
    1. 先将自定义字符写入CGRAM ; 2. 再将CGRAM中的自定义字符送到DDRAM中显示
  很简单的:看好了
  查看LCD1602 的CGROM 字符代码表,可以发现 从00000000B~00000111B(00H~07H)地址的内容是没有定义的,它是留给用户自己定义的,用户可以通过先定义LCD1602的CGRAM中的内容,然后就可以同调用CGROM字符一样来调用自定义好的字符(这里提示一下,自定义的字符最多可写8个),那么如何设定CGRAM中的内容呢?

  首先我们要把所要编写的字符对应于5X8点阵的“字模”提取出来,我们可以通过相关的软件来提取,也可以手工提取。说白了也就是将点阵的某一行中有显示的点用1表示,无显示的点用0表示,以此形成该行对应的字模数据。
设定CGRAM的内容,要一行一行的设定,每一行对应一个CGRAM,5X8点阵,每行5点,共8行,因此要将8行的字模数据都写入CGRAM。写好后,就可像调
用CGROM字符一样来来调用它了。
定义一行的内容,分两步:
1. 设定行地址(CGRAM地址):
用到的命令如下:
          RS R/W DB7 DB6DB5 DB4 DB3DB2 DB1 DB0
           0 0 0 1 DATA
其中:DB5,DB4,DB3为字符号,也就是你将来要显示该字符时要用到的字符地址。
DB2,DB1,DB0为行号。
2. 设定CGRAM数据(内容)指令码如下:
          RS R/WDB7 DB6 DB5DB4 DB3 DB2 DB1 DB0
          1 0 DATA
其中:DB4,DB3,DB2,DB1,DB0对应于每行5点的字模数据。
DB7,DB6,DB5可为任何数据,一般取“000”。

1 #include //调用头文件,可以去PICC18软件下去查找PIC18FXX2.H

2 __CONFIG(1,XT) ; //晶振为外部4M

3 __CONFIG(2,WDTDIS) ; //看门狗关闭

4 __CONFIG(4,LVPDIS) ; //禁止低电压编程

5

6 #define RSPIN RB5 //Data or Instrument Select

7 #define RWPIN RB4 //Write or Read

8 #define EPIN RB3 //6800 mode Enable single

9 unsigned char table[]="LCD check ok"; //要显示的内容1放入数组tablel

10

11 //此函数定义八个字符分别写入CGRAM的八个地址

12 unsigned char pic[]={

13 0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,

14 0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,

15 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,

16 0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,

17 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,

18 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,

19 0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,

20 0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00

21

22 };

23 ///---------------------------------------

24 //名称: 延时函数

25 //-----------------------------------------

26 void delay(unsigned int t)

27 {

28 unsigned int i,j;

29 for(i=0;i

30 {

31 for(j=0;j<10;j++);

32 }

33 }

34

35 //---------------------------------------

36 //名称: 1602忙检测函数

37 //-----------------------------------------

38 void lcd_wait_busy(void)

39 {

40 TRISD7=1; //为读状态做准备

41 RSPIN=0; //选择指令寄存器

42 RWPIN=1; //选择读

43 EPIN=1; //使能线电平变化

44 while(RD7==1); //读忙状态,不忙时退出

45 EPIN=0; //恢复使能线电平

46 TRISD7=0;

47 }

48 //---------------------------------------

49 //名称: 1602写命令函数

50 //-----------------------------------------

51 void lcd_write_com(unsigned char combuf)

52 {

53 RSPIN=0; //选择指令寄存器

54 RWPIN=0; //选择写

55 PORTD=combuf; //把命令字送入RD

56 EPIN=1; //使能线电平变化,命令送入1602的8位数据口

57 asm("NOP");

58 EPIN=0; //恢复使能线电平

59 }

60 //---------------------------------------

61 //名称: 1602写命令函数(带忙检测)

62 //-----------------------------------------

63 void lcd_write_com_busy(unsigned char combuf)

64 {

65 lcd_wait_busy(); //调用忙检测函数

66 lcd_write_com(combuf); //调用写命令函数

67 }

68 //---------------------------------------

69 //名称: 1602写数据函数(带忙检测)

70 //-----------------------------------------

71 void lcd_write_data(unsigned char databuf)

72 {

73 lcd_wait_busy(); //调用忙检测函数

74 RSPIN=1; //选择数据寄存器

75 RWPIN=0; //选择写

76 PORTD=databuf; //把数据字送入P2

77 EPIN=1; //使能线电平变化,命令送入1602的8位数据口

78 asm("NOP");

79 EPIN=0; //恢复使能线电平

80 }

81 //---------------------------------------

82 //名称: 1602显示地址写函数

83 //-----------------------------------------

84 void lcd_write_address(unsigned char x,unsigned char y)

85 {

86 x&=0x0f; //列地址限制在0-15

87 y&=0x01; //行地址限制在0-1

88 if(y==0x00)

89 lcd_write_com_busy(x|0x80); //第一行的列地址写入

90 else

91 lcd_write_com_busy((x+0x40)|0x80); //第二行的列地址写入

92 }

93 //---------------------------------------

94 //名称: 1602初始化函数

95 //-----------------------------------------

96 void lcdreset(void)

97 {

98 lcd_write_com_busy(0x38); //8位数据,双列,5*7字形

99 lcd_write_com_busy(0x08); //显示功能关,无光标

100 lcd_write_com_busy(0x01); //清屏指令

101 lcd_write_com_busy(0x06); //写入新的数据后,光标右移,显示屏不移动

102 lcd_write_com_busy(0x0c); //显示功能开,无光标,

103 }

104 //---------------------------------------

105 //名称: 指定地址写入函数

106 //-----------------------------------------

107 void lcd_write_char(unsigned char x,unsigned char y,unsigned char buf)

108 {

109 lcd_write_address(x,y);

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭