打印

【PSoC@4学习】+之12864串行显示

[复制链接]
3496|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nwx8899|  楼主 | 2014-6-20 21:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【PSoC@4学习】之12864串行显示
1、新建工程,

由于使用串行方式,只是使用了2个数字输出IO,

均为输


2、双击设置属性

注意这里不能勾选HW那一项,只有与内部的组建相连接时才勾选
3、配置引脚:SCK-->P0.0   SID-->p0.1

4、编译后自动生成几个文件夹

打开Pin_SDA文件夹 有写函数、读函数、设置驱动模式、读寄存器的值、等Pin_SDA函数

5、编写主函数,等h文件
结果如图所示(由于CY8CKIT引脚以排母的方式引出的不好接线所以12864通过51最小系统提供5V电压,CY8CKIT只用了P0.0、P0.1两个引脚)





附录1、硬件连接 12864 CS---VCC   PSB---GND   SCLK---P0.0   SID---P0.1  
附录2、main.c文件如下
#include <device.h>
#include <lcd12864.h>

void main()
{
    /* Place your initialization/startup code here (e.g. MyInst_Start()) */

    /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */
    for(;;)
    {
        /* Place your application code here. */
    CyDelay(10);
    lcd_init();
    lcd_clear();
    Lcd_DisplayString(0,0,&dis1[0]);
    Lcd_DisplayString(1,0,&dis2[0]);
    Lcd_DisplayString(2,0,&dis3[0]);
    Lcd_DisplayString(3,0,&dis4[0]);
    for(;;);
    }
}


附录2lcd12864.h文件如下
#include <device.h>
#include <wchar.h>
#define uint  unsigned int
#define uchar unsigned char
uchar dis1[]={"@www.21ic.com!!!"};
uchar dis2[]={"Cypress PSoC4BBS"};
uchar dis3[]={"@21XIAO PAO TANG"};
uchar dis4[]={"14.6.3-2014.6.30"};
  /**************************************************************************************
    函数名称:   void lcd_wbyte(uchar i_data)
    函数功能:   底层向lcd写1个字节
    入口参数:   传送的数据
    出口参数:   无
    返回值:     无
    其他:         
**************************************************************************************/

void lcd_wbyte(uchar i_data)
{
   uchar i;
   for(i=0;i<8;i++)
   {
     if(i_data&0x80)
        Pin_SDA_Write(1);
     else
       Pin_SDA_Write(0);
       Pin_SCK_Write(0);
       Pin_SCK_Write(1);
       i_data=i_data<<1;
   }
   CyDelay(2);
}
/**************************************************************************************
    函数名称:   void lcd_data(uchar data,uchar cmd)
    函数功能:   向lcd写命令或数据 cmd=0时写命令 cmd=1时写数据
    入口参数:   命令数据
    出口参数:   无
    返回值:     无
    其他:         
**************************************************************************************/
void lcd_data(uchar data,uchar cmd)
{
   uchar i_data;
   if(cmd==0)
   i_data=0xf8;
   else
   i_data=0xfa;
   Pin_SCK_Write(0);
   lcd_wbyte(i_data);
   i_data=data;
   i_data&=0xf0;
   lcd_wbyte(i_data);
   i_data=data;
   i_data<<=4;
   i_data&=0xf0;
   lcd_wbyte(i_data);   
}

/**************************************************************************************
    函数名称:   void lcd_init()
    函数功能:   lcd初始化
    入口参数:   无
    出口参数:   无
    返回值:     无
    其他:         
**************************************************************************************/
void lcd_init()
{
  lcd_data(0x30,0);        //基本功能设置
  CyDelay(30);
  lcd_data(0x02,0);       //清DDRM
  CyDelay(30);
  lcd_data(0x0c,0);       //开显示,不显示光标
  CyDelay(30);
  lcd_data(0x01,0);       //清屏
  CyDelay(30);
}
/**************************************************************************************
    函数名称:   void lcd_pos(uchar x,uchar y)
    函数功能:   lcd显示位置
    入口参数:   x,y
    出口参数:   无
    返回值:     无
    其他:         
**************************************************************************************/
void lcd_pos(uchar x,uchar y)
{
switch(x)
  {
    case 0:  
     lcd_data(0x80+y,0);   break;
    case 1:  
      lcd_data(0x90+y,0);  break;
    case 2:  
      lcd_data(0x88+y,0);  break;
    case 3:  
      lcd_data(0x98+y,0);  break;  
   }
}
/*************************************************************************************
    函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar string)
    函数功能:   写入一个字符
    入口参数:   x,y,string
    出口参数:   无
    返回值:     无
    其他:         
*************************************************************************************/
void Lcd_DisplayOneChar(uchar x,uchar y,uchar string)
{
        lcd_pos( x, y);
          lcd_data(string,1);
}
/*************************************************************************************
    函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar *string)
    函数功能:   写入一个字符串
    入口参数:   x,y,*string
    出口参数:   无
    返回值:     无
    其他:         
*************************************************************************************/
void Lcd_DisplayString(uchar x,uchar y,uchar *string)
{
          uchar i;
          lcd_pos( x, y);
    for(i=0;string!='\0';i++)
    lcd_data(string,1);       
}
       

/*************************************************************************************
    函数名称:void Lcd_DisplayString(uchar x,uchar y,uchar num)
    函数功能:   显示三位数值(占空比或者转速)
    入口参数:   x行,y列,num占空比或者转速
    出口参数:   无
    返回值:     无
    其他:         
*************************************************************************************/
void Lcd_DisplayNUM(uchar x,uchar y,uchar num)
{            
     uchar bai,shi,ge;
         bai=num/100;
     shi=num%100/10;
         ge=num%10;
     lcd_pos(x,y);
     lcd_data(bai+0x30,1);
           lcd_data(shi+0x30,1);
            lcd_data(ge+0x30,1);
}
/**************************************************************************************
    函数名称:   void lcd_clear(void)
    函数功能:   将LCD中RAM清空,屏幕显示为空
    入口参数:   无
    出口参数:   无
    返回值:     无
    其他:         
**************************************************************************************/
void lcd_clear(void)
{
    uchar x,y;
    for(x=0;x<4;x++)
    {
       for(y=0;y<8;y++)
       {
         lcd_pos(x,y);
         lcd_data(0,0);
       }
    }
}


3.jpg (1.34 MB )

3.jpg
沙发
jinpaidianzi| | 2014-6-21 23:28 | 只看该作者
发现大家都爱拿12864进行设计呀

使用特权

评论回复
板凳
teabottle| | 2014-6-21 23:48 | 只看该作者
从前也这样练过 不过用的其他单片机

使用特权

评论回复
地板
wangjinlili| | 2014-6-22 00:11 | 只看该作者
也做过 支持一下

使用特权

评论回复
5
meishizhaoshi| | 2014-6-22 00:20 | 只看该作者
同样做过的握爪

使用特权

评论回复
6
nwx8899|  楼主 | 2014-6-22 09:35 | 只看该作者
meishizhaoshi 发表于 2014-6-22 00:20
同样做过的握爪

前辈吗
还有个问题:就是串行方式 如何正确显示 两个字节的汉子
现在是:只可以显示一个字节的数字、字符
请指教

使用特权

评论回复
7
happygirlwz| | 2014-6-23 21:38 | 只看该作者
lz做的不错,支持一下。

使用特权

评论回复
8
happygirlwz| | 2014-6-23 21:39 | 只看该作者
jinpaidianzi 发表于 2014-6-21 23:28
发现大家都爱拿12864进行设计呀

嘿嘿,应该是12864用起来比较快吧!

使用特权

评论回复
9
nwx8899|  楼主 | 2014-6-23 23:21 | 只看该作者
teabottle 发表于 2014-6-21 23:48
从前也这样练过 不过用的其他单片机

还有个问题:就是串行方式 如何正确显示 两个字节的汉子
现在是:只可以显示一个字节的数字、字符
请指教

使用特权

评论回复
10
nwx8899|  楼主 | 2014-6-23 23:22 | 只看该作者
wangjinlili 发表于 2014-6-22 00:11
也做过 支持一下

还有个问题:就是串行方式 如何正确显示 两个字节的汉子
现在是:只可以显示一个字节的数字、字符
请指教

使用特权

评论回复
11
sierraeabz| | 2014-8-15 22:25 | 只看该作者
線路簡單,準備try,try.

使用特权

评论回复
12
kk5290122| | 2014-8-18 22:58 | 只看该作者
跟我之前分享的异曲同工呀……

使用特权

评论回复
13
u880| | 2014-8-19 08:14 | 只看该作者
不错不错 好详细

使用特权

评论回复
14
huigoushang| | 2014-8-19 08:20 | 只看该作者
一步一步的好详细

使用特权

评论回复
15
G21372| | 2014-8-19 08:22 | 只看该作者
不错的分享 值得学习

使用特权

评论回复
16
yangguangaisha| | 2014-8-19 08:33 | 只看该作者
好详细 很强大 楼主给力

使用特权

评论回复
17
gexingyouxian| | 2014-8-19 08:33 | 只看该作者
学习一下 多谢楼主

使用特权

评论回复
18
jinpaidianzi| | 2014-8-22 08:08 | 只看该作者
楼主威武 必须支持

使用特权

评论回复
19
teabottle| | 2014-8-22 08:09 | 只看该作者
牛人啊  向楼主学习

使用特权

评论回复
20
wangjinlili| | 2014-8-22 08:13 | 只看该作者
有1206的吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名: 宁静致远

61

主题

805

帖子

2

粉丝