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

📄 tg12864_4.h

📁 TG12864液晶显示程序
💻 H
字号:
#ifndef TG12864_4_H
    #define  TG12864_4_H
#include <delay.h>
#define uchar unsigned char
#define uint  unsigned int

//*****************************************
#define     CS      PORTA.5
#define     SID_W   PORTA.6
#define     SID_R   PINA.6
#define     SCLK    PORTA.7 
#define     RES     PORTA.0
#define     PSB     PORTA.1

#define     CS_DDR      DDRA.5
#define     SID_DDR     DDRA.6
#define     SCLK_DDR    DDRA.7  
#define     RES_DDR     DDRA.0
#define     PSB_DDR     DDRA.1

//******************************************
uchar LCD_Read1byte(); 
void LCD_Write1byte(uchar data) ;  
void LCD_Check_busy();
void LCD_Write_cmd(uchar cmd);
void LCD_Write_data(uchar data); 
void Init_LCD(void);
void LCD_Read_data(uchar row,uchar col); 
void LCD_Write_string(uchar datacode[]); 
void LCD_Location_xy(uchar row,uchar col);
void LCD_Write_String_xy(uchar row,uchar col,uchar string[]);
void num(unsigned char row,unsigned char col,unsigned int n);
void num16(unsigned char row,unsigned char col,unsigned int n);
void clear(uchar wb);



//**************************************************************

void Init_LCD(void)
{
    CS=1;CS_DDR=1;
    SID_W=1;SID_DDR=1;
    SCLK=1;SCLK_DDR=1;  
    delay_ms(1);
    LCD_Write_cmd(0x30);//扩充指令集
    delay_ms(1);
    LCD_Write_cmd(0x0C);//开显示,关光标,不闪烁.[00001DCB],D=1:整体显示开,C=1:游标开,B=1:游标位置反白允许
	delay_ms(1);
	LCD_Write_cmd(0x02);//设定DDRAM的地址计数器(AC)到"00H",并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容
	delay_ms(1);
	LCD_Write_cmd(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
	delay_ms(1);
	LCD_Write_cmd(0x01);//清除显示,将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H"
	delay_ms(1);
	LCD_Write_cmd(0x80);//光标复位
	delay_ms(1);  
	//******************
	RES=1;
	PSB=0;
	RES_DDR=1;
	PSB_DDR=1;//
    
}
/***********************************************************************
功能:清屏
************************************************************************/
void clear(uchar wb)
{
	unsigned char row,col;
	LCD_Write_cmd(0x34);
	LCD_Write_cmd(0x36);
	for(row=0;row<32;row++)
	{
		LCD_Write_cmd(0x80|row);	//设置行地址
		LCD_Write_cmd(0x80);  		//设置列地址
		if(wb==0)
		for(col=0;col<32;col++)
		{
			LCD_Write_data(0x00);    //????
		}
		else
		for(col=0;col<32;col++)
		{
			LCD_Write_data(0xff);
		}
	}
}
uchar LCD_Read1byte()       //
{
    uchar i,tempH,tempL,t;
    SCLK=0;
    SID_DDR=1;
    for(i=8;i>0;i--)
    {
        tempH<<=1;
        tempH=SID_R;
        SCLK=1;
        SCLK=0;
    }          
    for(i=8;i>0;i--)
    {
        tempL<<=1;
        tempL=SID_R;
        SCLK=1;
        SCLK=0;
    }          
    SID_DDR=1;
    tempL>>=4;
    t=tempH+tempL;
    return t;
}  
void LCD_Write1byte(uchar data)    //
{
    uchar i,temp;
    temp=data;
    SCLK=0;
    for(i=8;i>0;i--)
    {
        SID_W=temp&0x80;
        temp<<=1;
        SCLK=1;
        delay_us(1);
        SCLK=0;
        delay_us(1);
    }
}
void    LCD_Check_busy()            //
{
    CS=0;
    CS=1;
    do{LCD_Write1byte(0xFC);}
    while(0x80&LCD_Read1byte());
    
} 
/****************************************************************
功能:写命令到LCM
参数:cmdcode是要写入的命令
****************************************************************/
void LCD_Write_cmd(uchar cmd)
{
    CS=1;
    LCD_Check_busy();
    LCD_Write1byte(0xf8);//00 从MCU至LCD,命令
    LCD_Write1byte(0xf0&cmd);
    LCD_Write1byte(0xf0&(cmd<<4));
    CS=0;
} 

/****************************************************************
功能:写数据到LCM
参数:Data是要写入的数据
****************************************************************/
void LCD_Write_data(uchar data)
{
    CS=1;
    LCD_Check_busy();
    LCD_Write1byte(0xfa);//00 从MCU至LCD, 
    LCD_Write1byte(0xf0&data);
    LCD_Write1byte(0xf0&(data<<4));
    CS=0;
}
void LCD_Read_data(uchar row,uchar col)
{
    uchar data_H,data_L;
    uint data;
    LCD_Write_cmd(0x80|row);
    LCD_Write_cmd(0x80|col);
    LCD_Check_busy();    
    LCD_Write1byte(0xfe); 
    LCD_Read1byte();
    LCD_Write1byte(0xfe); 
    data_H=LCD_Read1byte();
    LCD_Write1byte(0xfe); 
    data_L=LCD_Read1byte();
    data=data_H;
    data<<=8;
    data=data+data_L;
}
    
/****************************************************************
功能:写一串字符到LCM
参数:datacode是要写入的数据
****************************************************************/
void LCD_Write_string(uchar datacode[])
{
	uchar i=0;
	while(datacode[i])
	{
		LCD_Write_data(datacode[i]);
		i++;
		if(i==0xff)break;
	}
}
/*==============设置坐标======================*/
void LCD_Location_xy(uchar row,uchar col)
{
	switch(row)
	{
	case 0:
		row=0x80;break;
	case 1:
		row=0x90;break;
	case 2:
		row=0x88;break;
	case 3:
		row=0x98;break;
	default:
		row=0x80;
	}
	col=col&0x07;            //防止跑出界
	LCD_Write_cmd(row+col);
}  
/***********************************************************************
功能:在(x,y)处显示字符串string
************************************************************************/
void LCD_Write_String_xy(uchar row,uchar col,uchar string[])
{
	LCD_Write_cmd(0x30);
	LCD_Location_xy(row,col);
	LCD_Write_string(string);
}
/***********************************************************************
功能:在第row行,col列处显示整型数据n
************************************************************************/
void num(unsigned char row,unsigned char col,unsigned int n)
{
    unsigned char i=0,length=0,a[7]={0,0,0,0,0,0,0};
	unsigned int nx=n;
	for(i=0;i<6;i++)
	{
	    if(nx>0)length++;
	    nx/=10;
	}
	nx=n;
    for(i=length;i>0;i--)
    {
        a[i-1]=nx%10+48;
        nx=nx/10;
    }
    if(n==0)a[0]='0';
	LCD_Write_cmd(0x30);
	LCD_Write_String_xy(row,col,a);
}
/***********************************************************************
功能:在第row行,col列处显示16进制数据n
************************************************************************/
void num16(unsigned char row,unsigned char col,unsigned int n)
{
	unsigned char i=0,a[7]={0,0,0,0,0,0,0};
	unsigned int nx=n;
	if(nx<=0xFF)
	{
		a[3]=nx%16;
		nx/=16;
		a[2]=nx%16;
		for(i=2;i<4;i++)
		{
			if(a[i]<10)a[i]+=48;
			else a[i]+=55;
		}
		a[4]=0x00;
	}
	else
	{
		a[5]=nx%16;
		nx/=16;
		a[4]=nx%16;
		nx/=16;
		a[3]=nx%16;
		nx/=16;
		a[2]=nx%16;
		for(i=2;i<6;i++)
		{
			if(a[i]<10)a[i]+=48;
			else a[i]+=55;
		}
	}
	a[1]='x';
	a[0]='0';
	LCD_Write_cmd(0x30);
	LCD_Write_String_xy(row,col,a);
}

 

    
    
    
    
    
#endif

⌨️ 快捷键说明

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