单片机学习——LCD12864串口显示

来源:互联网 发布:东方财富软件使用 编辑:程序博客网 时间:2024/06/08 20:06

一、引脚图


二、串行时序图

R/W  1/0    读/写

RS    1/0    数据/命令(注意:这是数据,不是并行那个端口为:RS    1/0    命令/数据

/********************************************************************
写命令
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);// 告诉显示屏要写命令
sendbyte(cmdcode & 0xf0);//发高四位  xxxx0000
sendbyte((cmdcode << 4) & 0xf0);//发低四位  xxxx0000
delay(2);//200us左右
}
/********************************************************************
写数据
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}

/********************************************************************
根据时序图发数据
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;   //第5个引脚R/W
}
else 
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}

三、初始化LCD

void lcdinit()
{  
RST = 0;                 //复位
delay(100);
RST = 1;
delay(20000);
write_com(0x30);    //基本指令操作

//lcd_wcmd(0x34);   //扩展指令操作

delay(50);
write_com(0x0c);    //显示开  关光标
delay(50);
}

四、显示函数

1、显示普通字符和汉字   write_com(0x30);    //基本指令操作

void hzkdis(unsigned char code *s)
{  
while(*s > 0)

write_data(*s);
s++;
delay(50);
}
}

void Test()
{  
write_com(0x03);//光标置原点
delay(50);    
write_com(0x81);//汉字显示坐标,第一行(总4行),第二个汉字位置(总8列)
hzkdis("1234567");
}


2、显示图片



/*******************************************
整屏显示图片

unsigned char code tu_fill[]={};
********************************************/
void Fill_dis(const uchar *ptr)
{
uchar i,j,k;
//wela=0;
//dula=0; 
lcd_wcmd(0x34);        //拓展命令
i = 0x80;            
for(j = 0;j < 32;j++)
{
        lcd_wcmd(0x80+j);//写Y轴
        lcd_wcmd(0x80);//写X轴,第一大行,0~7

for(k = 0;k < 16;k++)//一个字节8*16=128
{
     lcd_wdat(*ptr++);
  }
}
i = 0x80;
  for(j = 0;j < 32;j++)
{
          lcd_wcmd(0x80+j);
          lcd_wcmd(0x88);   //写X轴,第二大行,8-15
  for(k = 0;k < 16;k++)
  {
        lcd_wdat(*ptr++);
   
}  
    lcd_wcmd(0x36);        //打开绘图显示
lcd_wcmd(0x30);        //返回基本命令
}

3、取模软件设置




原创粉丝点击