电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2769|回复: 1
收起左侧

单片机C语言实例-375-12864液晶(带字库)

[复制链接]
发表于 2022-4-7 10:25:08 | 显示全部楼层 |阅读模式
单片机C语言实例-375-12864液晶(带字库)

/*
12864LCD (ST7920)驱动程序
马文垒     2004/12/27

*/

#include <REGx51.H>
  //引脚定义
#define CS    P2_0        //片选 高电平有效 单片LCD使用时可固定高电平
#define SID   P2_1        //数据
#define SCLK  P2_2        //时钟
#define PSB   P2_3        //低电平时表示用串口驱动,可固定低电平
#define RESET P2_4        //LCD复位,LCD模块自带复位电路。可不接

void write(bit start, unsigned char ddata);
void sendbyte(unsigned char bbyte);
void delaynms(unsigned int di);
void lcdinit(void);
void lcdtest(void);
void lcdcls(void);

unsigned char code ma[] ={"  汉字显示LCD   "};
unsigned char code ma2[]={"自带字库图文混排"};
unsigned char code ma3[]={"控制IC:ST7920  "};
unsigned char code ma4[]={"功能强大使用方便"};

void lcdinit(void)        //初始化LCD
{
  delaynms(10); //启动等待,等LCM讲入工作状态
  PSB=0; ;            //串口驱动模式
  RESET=0; delaynms(1); RESET=1; // 复位LCD
  CS=1;
  write(0,0x30);  //8 位介面,基本指令集
  write(0,0x0c);  //显示打开,光标关,反白关
  write(0,0x01);  //清屏,将DDRAM的地址计数器归零  
}

void write(bit start, unsigned char ddata) //写指令或数据
{
  unsigned char start_data,Hdata,Ldata;
  if(start==0) start_data=0xf8;         //写指令
    else       start_data=0xfa;  //写数据

  Hdata=ddata&0xf0;                  //取高四位
  Ldata=(ddata<<4)&0xf0;  //取低四位
  sendbyte(start_data);          //发送起始信号
  delaynms(5); //延时是必须的
  sendbyte(Hdata);              //发送高四位
  delaynms(1);  //延时是必须的
  sendbyte(Ldata);                  //发送低四位
  delaynms(1);  //延时是必须的
}

void sendbyte(unsigned char bbyte) //发送一个字节
{
unsigned char i;
for(i=0;i<8;i++)
   {
   SID=bbyte&0x80; //取出最高位
   SCLK=1;
   SCLK=0;
   bbyte<<=1; //左移
   }  
}

void delaynms(unsigned int di) //延时
{
unsigned int da,db;
for(da=0;da<di;da++)
   for(db=0;db<10;db++);
}

void lcdtest(void)        //图形方式下屏幕全黑
{
unsigned char i,j;
for(i=0;i<32;i++)
  { write(0,0x80+i);write(0,0x80);
    for(j=0;j<16;j++) write(1,0xff);
  }

for(i=0;i<32;i++)
  { write(0,0x80+i);write(0,0x88);
    for(j=0;j<16;j++) write(1,0xff);
  }
}

void lcdcls(void)  //图形方式下清屏
{
unsigned char i,j;
for(i=0;i<32;i++)
  { write(0,0x80+i);write(0,0x80);
    for(j=0;j<16;j++) write(1,0x00);
  }

for(i=0;i<32;i++)
  { write(0,0x80+i);write(0,0x88);
    for(j=0;j<16;j++) write(1,0x00);
  }
}

void main(void)
{
unsigned char i;
lcdinit();

while(1)
{
  write(0,0x80); for(i=0;i<16;i++)  write(1,ma);
  write(0,0x90); for(i=0;i<16;i++)  write(1,ma2);
  write(0,0x88); for(i=0;i<16;i++)  write(1,ma3);
  write(0,0x98); for(i=0;i<16;i++)  write(1,ma4);

  write(0,0x36); //图形方式
  lcdtest();
  lcdcls();
}

}

更多详情参考附件文档

+08:00C142联盟网1022.png
游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报

0

主题

234

帖子

1059

积分

三级会员

Rank: 3Rank: 3

积分
1059
发表于 2022-4-7 20:33:16 | 显示全部楼层
666666666666666666666666666
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表