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

[复制链接]
 楼主| 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);
       }
    }
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
jinpaidianzi 发表于 2014-6-21 23:28 | 显示全部楼层
发现大家都爱拿12864进行设计呀
teabottle 发表于 2014-6-21 23:48 | 显示全部楼层
从前也这样练过 不过用的其他单片机
wangjinlili 发表于 2014-6-22 00:11 | 显示全部楼层
也做过 支持一下
meishizhaoshi 发表于 2014-6-22 00:20 | 显示全部楼层
同样做过的握爪
 楼主| nwx8899 发表于 2014-6-22 09:35 | 显示全部楼层
meishizhaoshi 发表于 2014-6-22 00:20
同样做过的握爪

前辈吗
还有个问题:就是串行方式 如何正确显示 两个字节的汉子
现在是:只可以显示一个字节的数字、字符
请指教
happygirlwz 发表于 2014-6-23 21:38 | 显示全部楼层
lz做的不错,支持一下。
happygirlwz 发表于 2014-6-23 21:39 | 显示全部楼层
jinpaidianzi 发表于 2014-6-21 23:28
发现大家都爱拿12864进行设计呀

嘿嘿,应该是12864用起来比较快吧!
 楼主| nwx8899 发表于 2014-6-23 23:21 | 显示全部楼层
teabottle 发表于 2014-6-21 23:48
从前也这样练过 不过用的其他单片机

还有个问题:就是串行方式 如何正确显示 两个字节的汉子
现在是:只可以显示一个字节的数字、字符
请指教
 楼主| nwx8899 发表于 2014-6-23 23:22 | 显示全部楼层
wangjinlili 发表于 2014-6-22 00:11
也做过 支持一下

还有个问题:就是串行方式 如何正确显示 两个字节的汉子
现在是:只可以显示一个字节的数字、字符
请指教
sierraeabz 发表于 2014-8-15 22:25 | 显示全部楼层
線路簡單,準備try,try.
kk5290122 发表于 2014-8-18 22:58 | 显示全部楼层
跟我之前分享的异曲同工呀……
u880 发表于 2014-8-19 08:14 | 显示全部楼层
不错不错 好详细
huigoushang 发表于 2014-8-19 08:20 | 显示全部楼层
一步一步的好详细
G21372 发表于 2014-8-19 08:22 | 显示全部楼层
不错的分享 值得学习
yangguangaisha 发表于 2014-8-19 08:33 | 显示全部楼层
好详细 很强大 楼主给力
gexingyouxian 发表于 2014-8-19 08:33 | 显示全部楼层
学习一下 多谢楼主
jinpaidianzi 发表于 2014-8-22 08:08 | 显示全部楼层
楼主威武 必须支持
teabottle 发表于 2014-8-22 08:09 | 显示全部楼层
牛人啊  向楼主学习
wangjinlili 发表于 2014-8-22 08:13 | 显示全部楼层
有1206的吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名: 宁静致远

61

主题

811

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名: 宁静致远

61

主题

811

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部