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

📄 smg12232zk.h

📁 ATmega128的GPS例子
💻 H
字号:
                 
/******************  SMG12232ZK串行接口程序******************
* Title : Accessing to LCD-CONTROLLER                                   
* Date :  2007.10.18                                                      
* Support telephone:       
* QQ :   16693799  
* Create by :	Joe Yuan        
* DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER  
*******************************************************************/
#ifndef __SMG12232ZK_H
#define __SMG12232ZK_H	

#define LCD_PORT1 PORTB
	#define LCD_SCLK PB4
	#define LCD_STD PB3
	
#define LCD_PORT2 PORTC
	#define LCD_CS	PC3

#define LCD_CS_H LCD_PORT2 |= BIT(LCD_CS)
#define LCD_CS_L LCD_PORT2 &=~ BIT(LCD_CS)
#define LCD_STD_H LCD_PORT1 |= BIT(LCD_STD)
#define LCD_STD_L LCD_PORT1 &=~ BIT(LCD_STD)
#define LCD_SCLK_H LCD_PORT1 |= BIT(LCD_SCLK)
#define LCD_SCLK_L LCD_PORT1 &=~ BIT(LCD_SCLK)



void Send_8bit(Word x);//串行发送8位数据
void Lcd_Write(Byte start,Byte data);//模块写入子程序
void Lcd_Reset(void);//模块复位子程序
void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度		
void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num);//xpos为列数,ypos为行数,num字符串长度									
void Hzk_Dis_Clr(void);//汉字显示清屏

Long lcd_data1;
Long lcd_data2;

/****************发送汉字子程序******************
** xpos为列数,ypos为行数
**lcd_pointer为字符串首地址
*********************************************************/
void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度									
{
	Byte i=0,ram_address;//ram_address:首地址
	//首先判断字符串得长度
	while(*(lcd_pointer+i) != '\0')//字符串长度
	{
		i++;
	}//i=字符串长度	
	if(i>15)
	{
		i=15;
	}
	if(ypos==1)
	{
		ram_address = 0x80+xpos-1;
	}
	else if(ypos==2)
	{
		ram_address = 0x90+xpos-1;
	}
	Lcd_Write(0xf8,ram_address);
	for(;i>0;i--)
	{
		Lcd_Write(0xfa,*lcd_pointer);	
		lcd_pointer++;
	}	
	
}

void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num)//xpos为列数,ypos为行数,num字符串长度									
{
	Byte i=0,ram_address;//ram_address:首地址
	if(ypos==1)
	{
		ram_address = 0x80+xpos-1;
	}
	else if(ypos==2)
	{
		ram_address = 0x90+xpos-1;
	}
	Lcd_Write(0xf8,ram_address);
	for(i=0;i<num;i++)
	{
		Lcd_Write(0xfa,*lcd_pointer);	
		lcd_pointer++;
	}	

}

/****************发送数据子程序******************
** xpos为列数,ypos为行数
**data为数据
**num数据占用得位数
*********************************************************/
void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num)								
{
	Byte i=0,ram_address;//ram_address:首地址
	Byte lcd_buf[15];
	Byte *lcd_pointer;
	if(num<16)
	{
		for(i=0;i<num;i++)
		{
			lcd_buf[num-i-1]= data%10+0x30;
			data /= 10;
		}
		//输入灭零程序
		
		if(ypos==1)
		{
			ram_address = 0x80+xpos-1;
		}
		else if(ypos==2)
		{
			ram_address = 0x90+xpos-1;
		}
		Lcd_Write(0xf8,ram_address);
		lcd_pointer = lcd_buf;
		for(i=0;i<num;i++)
		{
			Lcd_Write(0xfa,*lcd_pointer);	
			lcd_pointer++;
		}
	}	
}


void Lcd_Reset(void)
{
	LCD_CS_H;//片选置高
	Delay_Ms(1);//等待内部复位
	Lcd_Write(0xf8,0x30);//使用基本指令集
	Lcd_Write(0xf8,0x0c);//整体显示on
	Lcd_Write(0xf8,0x01);//清除显示
	Delay_Ms(5);//4.6ms
	Lcd_Write(0xf8,0x06);//显示右移
	LCD_CS_L;//片选置低
}

void Lcd_Write(Byte start,Byte com)//start :起始字节com:命令/数据 						  
{
	LCD_CS_H;//片选置高
	Send_8bit(start);
	Delay_Us(100);//72us
		//将data变为datal 0000 datah 0000
	Send_8bit(com&0xf0);
	Delay_Us(100);//72us	
	Send_8bit((com&0x0f)<<4);
	Delay_Us(100);//72us
	LCD_CS_L;//片选置低
}
	
void Send_8bit(Word x)
{
	Byte i;
	for(i=0;i<8;i++)
	{
		if(x&0x80)//数据线发送数据
		{
			LCD_STD_H;
		}
		else
		{
			LCD_STD_L;
		}
		LCD_SCLK_L;//产生同步时钟
		Delay_Us(2);
		LCD_SCLK_H;
		Delay_Us(2);
		x <<= 1;
	}
}

void Hzk_Dis_Clr(void)//汉字显示清屏
{
	Hzk_Dis_Words(1,1,"                  ");
	Hzk_Dis_Words(2,1,"                  ");	
}

#endif

⌨️ 快捷键说明

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