【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);
}
}
}
|
|