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

📄 st7920-kf.c

📁 LCD显示驱动代码
💻 C
字号:
//#include "iic.h"
sbit LCD_RS = P1^1;
sbit LCD_RW = P1^2;
sbit LCD_POWER=P1^4;//背光控制,如果不需要的可以不用

#define EN()	{P2=0xa0;}//这是因为所使用的片选信号比较特殊,移植这个文件时,作相应的特换即可。
#define DisEN() {P2=0xf0;}
unsigned char code Line[4]={0x80,0x90,0x88,0x98};

//////////////
void DelayS()
{
   unsigned char xdata i;
	 i =200; //200;	  //1f
	 while(i--)
	 	WDT=1;
}

void WriteCmd(unsigned char ch)
{
     DelayS();
     //EN = 0;
	 DisEN();
     LCD_RS = 0;
     LCD_RW = 0;
     _nop_(); 
	 _nop_();
     //EN = 1;
	 EN();
     P0 = ch;
	 _nop_();
	 _nop_();
	 _nop_();
     //EN = 0;
	 DisEN();
}

void WriteData(unsigned char dat)
{
     DelayS();
     //EN = 0;
	 DisEN();
     LCD_RS = 1;
     LCD_RW = 0;
     _nop_();
	 _nop_();
     //EN = 1;
	 EN();
     P0 = dat;
	 _nop_();
	 _nop_();
	 _nop_();
     //EN = 0;
	 DisEN();
     LCD_RS = 0;
}

void LcdInit()
{     
	if(LcdRE==1)
	{//扩展指令集状态,先退出睡眠状态
		WriteCmd(0x0c);//退出睡眠模式
		WriteCmd(0x30);//基本指令集
		LcdRE=0;
	}
	WriteCmd(0x0C);//显示on,游标、反白oFF
	WriteCmd(0x01);//清除显示
	WriteCmd(0x02);//地址归位
	WriteCmd(0x80);
}

void LcdCN(unsigned char x,unsigned char y,const char datH,const unsigned char datL)
{//汉字显示
	if(x>=4)
		x=0;
	x=Line[x];
	x+=y;
	WriteCmd(x);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
	WriteData(datH);
  	WriteData(datL);
}

void LcdCnString(unsigned char x,unsigned char y,const char Head[])
{//汉字串
//x:0-3,y:0-7
	unsigned char *ptr;
	ptr=Head;
	while(1)
	{
		WDT=1;
		LcdCN(x,y,*ptr,*(ptr+1));
		y+=1;
		ptr=ptr+2;
		if(*ptr == NULL)
			break;
	}
}

void LcdChar(unsigned char x,unsigned char y,const char dat)
{//英文显示
	//x:0-3,y:0-7
/*	switch(x)
	{
		case 0:
			x=0x80;
			break;
		case 1:
			x=0x90;
			break;
		case 2:
			x=0x88;
			break;
		default:
			x=0x98;
	}*/
	if(x>=4)
		x=0;
	x=Line[x];
	x+=y;
	WriteCmd(x);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
	WriteData(dat);
}

void LcdAddChar(unsigned char dat)
{
//追加英文字母
	WriteData(dat);
}

void LcdCur(unsigned char x,unsigned char y)
{
	//x:0~3,y:0~7
	if(x>=4)
		x=0;
	x=Line[x];
	x=x+y;
	WriteCmd(x);//1xxx,xxxx 设定DDRAM 7位地址xxx,xxxx到地址计数器AC
	WriteCmd(0x0f);//开下标	
}

void LcdCurOff()
{
	WriteCmd(0x0C);
}

void LcdPowerOn()
{
	LcdPowerFlag=1;
	LCD_POWER=0;
	DelayCnt=10;//0.5s
	REN=0;
	ES=0;
	RI=0;
	TI=0;
	while(DelayCnt)
		WDT=1;
}

void LcdPowerOff()
{
	LCD_POWER=1;
	LcdPowerFlag=0;
	REN=1;
	ES=1;
	TxEN=0;//
}

⌨️ 快捷键说明

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