sky-Hawk where 发表于 2012-11-3 13:54:41

【PSoC3心得】1602液晶屏显示

   什么也不说,先上图了。

在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也讲得很详细。
下面是我的主函数:#include <device.h>

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

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

       
        LCD_Char_1_Position(0,6) ;                                                                //Row = 0,Col = 6
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_0) ;                                //写第一个自定义字符,LCD_Char_1_CUSTOM_0为第一个自定义字符指针,见头文件LCD_Char_1.h
        LCD_Char_1_Position(0,7) ;
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_1) ;
        LCD_Char_1_Position(0,8) ;
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_2) ;
        LCD_Char_1_Position(0,9) ;
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_3) ;
        LCD_Char_1_Position(1,6) ;
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_4) ;
        LCD_Char_1_Position(1,7) ;
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_5) ;
        LCD_Char_1_Position(1,8) ;
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_6) ;
        LCD_Char_1_Position(1,9) ;
        LCD_Char_1_PutChar(LCD_Char_1_CUSTOM_7) ;
       
    LCD_Char_1_Position(1,1) ;
        LCD_Char_1_PrintString("ming");
        LCD_Char_1_Position(1,11) ;
        LCD_Char_1_PrintString("1006");
       
        while(1);
}
下面是整个PSoC工程

还有我用IO口模拟的PSoC工程

附带Character LCD datasheet,大家可以先了解下这个IP核

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



sky-Hawk where 发表于 2012-11-16 10:38:49

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

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

sky-Hawk where 发表于 2012-11-5 22:26:20

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

sky-Hawk where 发表于 2012-11-16 10:28:11

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

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

sky-Hawk where 发表于 2012-11-16 10:51:56

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

e文有什么难得

sky-Hawk where 发表于 2012-11-16 10:56:49

goodmike 发表于 2012-11-16 10:51 static/image/common/back.gif
e文有什么难得

{:3_42:}

sky-Hawk where 发表于 2012-11-16 11:03:14

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

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

sky-Hawk where 发表于 2012-11-19 17:28:49

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

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

sky-Hawk where 发表于 2012-11-19 22:04:02

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

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

tao475824827 发表于 2013-4-22 21:50:22

你的3管脚 大概多少伏啊?我的对比度很低啊,从零调到5V都不是很清楚
页: [1] 2
查看完整版本: 【PSoC3心得】1602液晶屏显示