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

📄 lcdfun.h

📁 51单片机 利用T920控制芯片的液晶显示读取遥控器的代码
💻 H
字号:

/************LCD控制相关函数 ST7920控制芯片**********/

#ifndef _lcdfun_h_
#define _lcdfun_h_
#define uchar unsigned char
#define uint unsigned int    //宏定义

/*****LCD功能初始化指令*****/
#define CLEAR_SCREEN 0x01   //清屏指令:清屏且AC值为00H
#define AC_INIT   0x02   //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD  0x06   //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE  0x30   //工作模式:8位基本指令集
#define DISPLAY_ON  0x0c   //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF  0x08   //显示关
#define CURSE_DIR  0x14   //游标向右移动:AC=AC+1
#define SET_CG_AC  0x40   //设置AC,范围为:00H~3FH
#define SET_DD_AC  0x80

/*****汉字地址表****/
uchar code addr_tab[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f//第四行汉字位置
};

/*****n(ms)延时子程序*****/
void delayms(uint t)     //约延时n(ms)
{
	uint i;
	while(t--)
	{
		for(i=0;i<125;i++);
	}        
}

/*****串行发送一个字节*****/
void SendByte(uchar Dbyte)
{
	uchar i;
    for(i=0;i<8;i++)
    {
		SCLK = 0;
        Dbyte=Dbyte<<1;        //左移一位
        SID = CY;              //移出的位给SID
        SCLK = 1;
        SCLK = 0;
	}
}
/*****串行接收一个字节*****/
uchar ReceiveByte(void)
{
	uchar i,temp1,temp2;
    temp1 = 0;
    temp2 = 0;
    for(i=0;i<8;i++)
    {		
    	temp1=temp1<<1;
        SCLK = 0;
        SCLK = 1;            
        SCLK = 0;
        if(SID) temp1++;
	}
    for(i=0;i<8;i++)
    {
		temp2=temp2<<1;
        SCLK = 0;
        SCLK = 1;
        SCLK = 0;
        if(SID) temp2++;
	}
    return ((0xf0&temp1)+(0x0f&temp2));
}
/*****检测LCD忙状态*****/
void CheckBusy( void )
{
	do	SendByte(0xfc);         //11111,RW(1),RS(0),0
    while(0x80&ReceiveByte());       //BF(.7)=1 Busy
}
/*****写指令*****/
void Lcd_WriteCmd(uchar Cbyte )
{
	CS = 1;
    CheckBusy();
    SendByte(0xf8);              //11111,RW(0),RS(0),0
    SendByte(0xf0&Cbyte);        //高四位
    SendByte(0xf0&Cbyte<<4);   //低四位(先执行<<)
    CS = 0;
}
/*****写数据*****/
void Lcd_WriteData(uchar Dbyte )
{
    CS = 1;
    CheckBusy();
    SendByte(0xfa);              //11111,RW(0),RS(1),0
    SendByte(0xf0&Dbyte);        //高四位
    SendByte(0xf0&Dbyte<<4);   //低四位(先执行<<)
    CS = 0;
}
/*****初始化LCD*****/
void Init_Lcd(void)
{ 
	//PSB = 0;
delayms(50);
    Lcd_WriteCmd(0x30);        //选择基本指令集
delayms(1);
    Lcd_WriteCmd(0x30);          //选择8bit数据流
delayms(1);
    Lcd_WriteCmd(0x0c);          //开显示(无游标、不反白)
delayms(1);
    Lcd_WriteCmd(0x01);          //清除显示,并且设定地址指针为00H
delayms(20);
}
/*****显示字库里的文字**
void Characters_Disp(uchar x,uchar y,uchar code *s)
{ 
	Lcd_WriteCmd(addr_tab[8*x+y]);  //写地址
	while(*s>0)
    { 
		Lcd_WriteData(*s);    //写数据
		s++;     
    }
}*/
/*******连接显示自己建立的数组里的文字*********************/
void Characters_Disp(uchar x,uchar y,uchar *s)
{ 
	Lcd_WriteCmd(addr_tab[8*x+y]);  //写地址
	while(*s>0)
    { 
		Lcd_WriteData(*s);    //写数据
		s++;     
    }
}

void Txt_Disp(uchar x,uchar y,uchar *s)
{ 
	uchar i,x_temp=x;
	Lcd_WriteCmd(addr_tab[8*x+y]);  //写地址
	while(*s!='\0')
    { 
		Lcd_WriteData(*s);    //写数据
		s++;
		Lcd_WriteData(*s);    //写数据
		i++;
		if(i==32){i=0;x=x_temp;Lcd_WriteCmd(addr_tab[8*x+y]);delayms(1500);delayms(1500);delayms(1500);}
		else if(i%8==0){x++;Lcd_WriteCmd(addr_tab[8*x+y]);}  //写地址
		
		s++;     
    }
}

/*****显示图片(显示Gdram内容)*****/
/*绘图显示的步骤
1 关闭绘图显示功能
2 先将垂直的坐标(Y)写入绘图RAM地址
3 再将水平的位元组坐标(X)写入绘图RAM地址
4 将D15-D8写入RAM中
5 将D7-D0写入到RAM中
6 打开绘图显示功能*/
//图片取模方式:横向取模,字节正序
void Pic_Disp(uchar *pic)    //显示Gdram内容(显示图片)
{
	uchar x,y,i;
	for(i=0;i<9;i=i+8)
	for(y=0;y<32;y++)
	{
  		for(x=0;x<8;x++)
		{
			Lcd_WriteCmd(0x36);   //8位指令,扩充指令集,开绘图显示
			Lcd_WriteCmd(0x80+y);  //起始Y地址
			Lcd_WriteCmd(0x80+x+i);  //起始X地址
			Lcd_WriteData(*pic++);  //写数据 D15-D8
			Lcd_WriteData(*pic++);  //写数据 D7-D0
			Lcd_WriteCmd(0x30);   //恢复8位基本指令动作,关绘图显示
		}
	}
}
//////////////////////////////////////////////////////
void Mini_Pic(uchar x,uchar y,uchar *pic)//16*16 x,y为行列数 //显示Gdram内容(显示图片)
{
	uchar i,j,X;
	Lcd_WriteCmd(0x36);   //8位指令,扩充指令集,开绘图显

⌨️ 快捷键说明

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