⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12864串口.c

📁 12864液晶显示器的串口驱动。一般网上的都是并口的。
💻 C
字号:
/*
128*64 LCD (ST7920)驱动程序

*/

#include <regx52.H>
/******************************引脚定义*************************************/

#define CS    P2_0	//片选 高电平有效 单片LCD使用时可固定高电平
#define SID   P2_1	//数据
#define SCLK  P2_2	//时钟
#define PSB   P3_6	//低电平时表示用串口驱动,可固定低电平
#define RESET P3_7	//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);




/*******************************初始化函数*************************************/

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







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -