1赞

11回答

1收藏

[原创] 【PSoC3心得】1602液晶屏显示

 

英飞凌 英飞凌 10501 人阅读 | 11 人回复 | 2012-11-03

   什么也不说,先上图了。

  在PSoC上驱动1602是一件很简单的事情,因为PSoC自带多种液晶显示IP核。在PSoC Creator的器件库栏里可以看到自带的IP核如下:

  器件库中的character LCD就是用来驱动1602的,点击右下角的datasheet可以看到关于这个IP核的详细介绍。这个IP核适用于所有采用HD44780做控制芯片的LCD,包括常见的1602。
  拖动character LCD到原理图后双击器件可进行配置。配置界面如下:

  LCD Custom Character Set可以进行用户自定义配置,选择None表示无用户自定义配置;选择Vertical Bargraph或Horizon Bargraph,系统或自动帮你生成纵向或横向线条(宽度不一的8种),这些线条可以用来在1602上显示;选择User Defined你可以通过右边的编辑框来编辑自己想要添加到1602的自定义字符。1602支持8个自定义字符,点击右边8个小编辑表后,你可以用鼠标编辑左边的放大图输入自己的字符。(你还可以通过自动生成的API函数来建立这些自定义字符,具体可以看datasheet)。
  配置好之后,通过看datasheet你可以知道引脚的映射关系。Character LCD只需要7个引脚就可以驱动1602,包括E,RS,R/W,DB4-DB7(即四线制驱动),此外要注意Character LCD的引脚不能跨端口,即7个引脚必须在同一个端口上。
   相应的引脚连接如图:

  这是我的引脚配置:

  编译之后,系统会自动生成API函数和字库。为了使用之前自定义的字符必须在main.c里添加extern uint8 const CYCODE LCD_Char_1_customFonts[],这是保存自定义字符点阵信息的数组,在LCD_Char_1_CustChars.c里可以看到这个数组的定义。其他具体的使用方法可见我主函数的注释,datasheet也讲得很详细。
  下面是我的主函数:
  1. #include <device.h>

  2. extern uint8 const CYCODE LCD_Char_1_customFonts[];         //自定义字符点阵数组

  3. void main()
  4. {
  5.         LCD_Char_1_Start();                                      //初始化1602
  6.         LCD_Char_1_LoadCustomFonts(LCD_Char_1_customFonts) ;        //加载自定义字符(没自定义字符时可不加这句)

  7.        
  8.         LCD_Char_1_Position(0,6) ;                                                                //Row = 0,Col = 6
  9.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_0) ;                                //写第一个自定义字符,LCD_Char_1_CUSTOM_0为第一个自定义字符指针,见头文件LCD_Char_1.h
  10.         LCD_Char_1_Position(0,7) ;
  11.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_1) ;
  12.         LCD_Char_1_Position(0,8) ;
  13.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_2) ;
  14.         LCD_Char_1_Position(0,9) ;
  15.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_3) ;
  16.         LCD_Char_1_Position(1,6) ;
  17.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_4) ;
  18.         LCD_Char_1_Position(1,7) ;
  19.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_5) ;
  20.         LCD_Char_1_Position(1,8) ;
  21.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_6) ;
  22.         LCD_Char_1_Position(1,9) ;
  23.         LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_7) ;
  24.        
  25.     LCD_Char_1_Position(1,1) ;
  26.         LCD_Char_1_PrintString("ming");
  27.         LCD_Char_1_Position(1,11) ;
  28.         LCD_Char_1_PrintString("1006");
  29.        
  30.         while(1);
  31. }
复制代码
下面是整个PSoC工程
LCD1602.zip (1.48 MB, 下载次数: 77)

  还有我用IO口模拟的PSoC工程
LCD_1602_4Wire.zip (1.77 MB, 下载次数: 57)

  附带Character LCD datasheet,大家可以先了解下这个IP核
CharLCD_v1_50.pdf (251.79 KB, 下载次数: 47)

PS:这个实验做了好几天一直出问题,本来以为是电平问题,后来先用模拟的方法发现3.3V也可以驱动1602(尽管VCC电压是5V),才确定电平和硬件都没问题。今天终于发现问题所在,是自动生成的API函数的读忙函数有问题,我修改了读忙的API函数,用延时函数代替后就可以正常驱动1602了。至于为什么会有问题,目前还不知道,希望知道的人指点一下



分享到:
回复

使用道具 举报

回答|共 11 个

倒序浏览

推荐

ming1006

发表于 2012-11-16 10:38:49 | 只看该作者

ht868788 发表于 2012-11-16 10:35
何宾老师的,恩,这个我也有,现在感觉需要例程来做实验去熟悉每个模块,要不纯粹看书的话理解不够,我感 ...

是啊,不过e文的datasheet看起来还是有点压力,看着好慢
板凳

ming1006

发表于 2012-11-5 22:26:20 | 只看该作者

PSoC版块这几天好冷清啊,怎么就觉得剩我一人了
地板

ming1006

发表于 2012-11-16 10:28:11 | 只看该作者

ht868788 发表于 2012-11-16 10:23
楼主的自定义字符没试过,可以参考下---不知道楼主现在用的是什么实验教程,我知道的有月之骑士的《分享pso ...

呵呵,谢谢你的资料啊,这个还没有,我手上有一本8051片上可编程系统,自定义字符可以参照character LCD IP核的datasheet
5#

goodmike_3000979

发表于 2012-11-16 10:51:56 | 只看该作者

ming1006 发表于 2012-11-16 10:38
是啊,不过e文的datasheet看起来还是有点压力,看着好慢

e文有什么难得
6#

ming1006

发表于 2012-11-16 10:56:49 | 只看该作者

goodmike 发表于 2012-11-16 10:51
e文有什么难得

7#

ming1006

发表于 2012-11-16 11:03:14 | 只看该作者

ht868788 发表于 2012-11-16 10:58
确实啊,不过已经有中文版的creator组件datasheet出来了,官网上有的,现在就是差一些中文应用笔记 ...

呵呵,有空去官网看看,很少去过
8#

kk5290122

发表于 2012-11-19 17:28:49 | 只看该作者

ming1006 发表于 2012-11-5 22:26
PSoC版块这几天好冷清啊,怎么就觉得剩我一人了

是哦……你现在貌似是这个板块最活跃的人喽……
9#

ming1006

发表于 2012-11-19 22:04:02 | 只看该作者

kk5290122 发表于 2012-11-19 17:28
是哦……你现在貌似是这个板块最活跃的人喽……

要更多人活跃,论坛才会真的活跃起来
10#

tao475824827

发表于 2013-4-22 21:50:22 | 只看该作者

你的3管脚 大概多少伏啊?我的对比度很低啊,从零调到5V都不是很清楚
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条