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

📄 st7920driver.c

📁 st7920,串口,lcd st7920,串口,lcd
💻 C
📖 第 1 页 / 共 3 页
字号:
//液晶屏坐标说明:
//		_______________________________________________
//		|(0,0)								     (7,0)|	
//		|											  |	
//		|											  |	
//		|(0,31)									(7,31)|
//		|(8,0)									(15,0)|	
//		|											  |	
//		|											  |
//		|(8,31)________________________________(15,31)|
//
//返回参数:无
//使用说明:此函数适用于OCMJ4X8C 12864型液晶
//*******************************************
void Serial_ImgDisplay(unsigned char code *img)
{
  	uchar i,j;
	Serial_Write_LCD(COMMAND,GRAPH_OFF);			//先关闭图形显示功能
    for(j=0;j<32;j++)
  	 {
    	for(i=0;i<8;i++)
     	 {
      		Serial_Write_LCD(COMMAND,0x80+j);		//设定垂直坐标
      		Serial_Write_LCD(COMMAND,0x80+i);		//设定水平坐标
      		Serial_Write_LCD(DATA,img[j*16+i*2]);	//放入数据高字节
      		Serial_Write_LCD(DATA,img[j*16+i*2+1]);	//放入数据低字节
    	 }
  	 }
  	for(j=32;j<64;j++)
  	 {
    	for(i=0;i<8;i++)
    	 {
      		Serial_Write_LCD(COMMAND,0x80+j-32);
      		Serial_Write_LCD(COMMAND,0x88+i);
      		Serial_Write_LCD(DATA,img[j*16+i*2]);
     	    Serial_Write_LCD(DATA,img[j*16+i*2+1]);
    	 }
  	 }
	Serial_Write_LCD(COMMAND,GRAPH_ON);				//最后打开图形显示功能
}

//*******************************************
//函数名称:void Serial_ImgDisplayCharacter(uchar x,uchar y,uchar code *img)
//函数功能:使用绘图的方法,在(x,y)处画一个16*16点阵的图案,也可以是字符
//形式参数:uchar x,uchar y,uchar code *img
//			x取值范围:0~15
//			y取值范围:0~32 (针对OCMJ4X8C 12864型液晶)	
//行参说明:坐标水平位置,坐标垂直位置,要显示的图形
//液晶屏坐标说明:
//		_______________128个象素______________________
//		|(0,0)								     (7,0)|	
//		|											  |	
//	6	|											  |	
//	4	|(0,31)									(7,31)|
//	个	|(8,0)									(15,0)|	
//	象	|											  |	
//	素	|											  |
//		|(8,31)________________________________(15,31)|
//
//返回参数:无
//使用说明:此函数适用于OCMJ4X8C 12864型液晶
//*******************************************
void Serial_ImgDisplayCharacter(uchar x,uchar y,uchar code *img)
{
  	uchar i;
 	Serial_Write_LCD(COMMAND,GRAPH_OFF);			//先关闭图形显示功能
    for(i=0;i<16;i++)
  	 {

      		Serial_Write_LCD(COMMAND,0x80+y+i);
      		Serial_Write_LCD(COMMAND,0x80+x);
      		Serial_Write_LCD(DATA,img[i*2]);
      		Serial_Write_LCD(DATA,img[i*2+1]);
  	 }
	Serial_Write_LCD(COMMAND,GRAPH_ON);				//最后打开图形显示功能
}

//*******************************************
//函数名称:void Serial_CreateSelfDefiniteCharacterInCGRAM(uchar ucCGRAMAdd,uchar code *p)
//函数功能:在CGRAM中,在ucCGRAMAdd指定的地址创建16*16点阵的自定义字符,一共可以建立4个
//形式参数:uchar ucCGRAMAdd,uchar code *p
//行参说明:CGRAM中的地址,自定义的字符
//		ucCGRAMAdd可以且只可以取的值:  0x40 ,  0x50 ,  0x60 , 0x70
//		 ucCode	    对应的显示编码为:[0000H],[0002H],[0004H],[0006H] 
//返回参数:无
//使用说明:无
//*******************************************
void Serial_CreateSelfDefiniteCharacterInCGRAM(uchar ucCGRAMAdd,uchar code *img)
{
	uchar i;
	for( i=0 ; i<16; i++)
	{
		Serial_Write_LCD(COMMAND,BASIC_FUNCTION);
		Serial_Write_LCD(COMMAND,ucCGRAMAdd+i);
      	Serial_Write_LCD(DATA,img[i*2]);
        Serial_Write_LCD(DATA,img[i*2+1]);
	}		
}

//*******************************************
//函数名称:void Serial_UseSelfDefiniteCharacterInCGRAM(uchar ucAdd,uchar ucCode)
//函数功能:使用自定义的字符
//形式参数:uchar ucAdd,uchar ucCode
//行参说明:字符要显示的位置,自定义的字符对应的编码
//		ucCGRAMAdd可以且只可以取的值:  0x40 ,  0x50 ,  0x60 , 0x70
//		 ucCode	    对应的显示编码为:[0000H],[0002H],[0004H],[0006H] 
//返回参数:无
//使用说明:无
//*******************************************
void Serial_UseSelfDefiniteCharacterInCGRAM(uchar ucAdd,uchar ucCode)
{
  	Serial_Write_LCD(COMMAND,BASIC_FUNCTION);  		//基本指令集
  	Serial_Write_LCD(COMMAND,ucAdd);	 			//设定DDRAM位址
	Serial_Write_LCD(DATA,0x00);
	Serial_Write_LCD(DATA,ucCode);
}

//*******************************************
//函数名称:void Serial_IRAMDisplay(uchar ucAdd,uchar code * p)
//函数功能:设定IRAM的地址,并在改地址填数据
//形式参数:uchar ucAdd,uchar code * p
//行参说明:IRAM地址,数据
//		ucAdd取值范围:0x40~0x4f
//返回参数:无
//使用说明:调用函数参考串行基本函数集
//*******************************************
void Serial_IRAMDisplay(uchar ucAdd,uchar code * p)
{
	Serial_VerticalRoll_IRAM_Address_Select_Set(0);
	Serial_VerticalRoll_IRAM_AddressValue_Set(ucAdd);
	Serial_Write_LCD(DATA,*(p++));
	Serial_Write_LCD(DATA,  *p  );	
}


//******************************************************************************
//*****************以上为串行工作模式下的功能函数*******************************
//******************************************************************************
//*****************以下为并行工作模式下的基本函数*******************************
//******************************************************************************

//*******************************************
//函数名称:void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content )
//函数功能:并行模式向LCD发送数据或指令
//形式参数:bit b_Data_Command , unsigned char uc_Content
//行参说明:数据或指令的标志位,指令或数据的内容
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Write_LCD( bit b_Data_Command , unsigned char uc_Content )
{
 	Parallel_Check_Busy();
  	if(b_Data_Command)
   	 {
		RS = 1;   //数据
    	RW = 0;   //写模式
   	 }
  	else 
   	 {
    	RS = 0;   //指令
    	RW = 0;   //写模式
   	 }
  	P1=uc_Content;//数据放到P1口上
  	E = 1;
  	E = 0;														
}

//*******************************************
//函数名称:uc_Parallel_Read_LCD_Data
//函数功能:并行读LCD数据
//形式参数:无
//行参说明:无
//返回参数:读回的数据
//使用说明:无
//*******************************************
uchar uc_Parallel_Read_LCD_Data(void)
{
 	uchar uc_Content;
	Parallel_Check_Busy();
	P1 = 0xff;			//输入前置1
    RS = 1;   			//数据
    RW = 1;   			//读模式
  	E = 1;				//使能
  	uc_Content = P1;    //P1口的内容放到变量中
  	E = 0;
	return uc_Content;
}

//*******************************************
//函数名称:uchar uc_Parallel_Read_LCD_AC(void)
//函数功能:并行读LCD AC(地址寄存器)中的地址
//形式参数:无
//行参说明:无
//返回参数:读回的AC值
//使用说明:无
//*******************************************
uchar uc_Parallel_Read_LCD_AC(void)
{
 	uchar uc_Content;
	Parallel_Check_Busy();
	P1 = 0xff;			//输入前置1
    RS = 0;   			//指令
    RW = 1;   			//读模式
  	E = 1;				//使能
  	uc_Content = P1;    //P1口的内容放到变量中
  	E = 0;
	return uc_Content;
}

//*******************************************
//函数名称:void Parallel_Check_Busy(void)
//函数功能:并行方式查忙
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Check_Busy(void)
{
	bit temp;
  	P1 = 0xff;	//输入前置1
  	RS = 0;		//指令
  	RW = 1;		//读模式
	do
	{
		temp = BUSY;
  		E  = 1;	//使能
		E  = 0;
	}
  	while(temp);//等待不忙
}

//******************************************************************************
//*****************以上为并行工作模式下的基本函数*******************************
//******************************************************************************
//*****************以下为并行工作模式下的功能函数*******************************
//******************************************************************************

//*******************************************
//函数名称:void Parallel_Init_LCD(void)
//函数功能:并行初始化LCD		
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Init_LCD(void)
{
  	RST = 1;											//复位后拉高,停止复位
  	PSB = 1;											//选择并行传输模式		
  	Parallel_Write_LCD(COMMAND,BASIC_FUNCTION);  		//基本指令动作   
  	Parallel_Write_LCD(COMMAND,CLEAR_SCREEN);  			//清屏,地址指针指向00H
  	Parallel_Write_LCD(COMMAND,0x06);  					//光标的移动方向
  	Parallel_Write_LCD(COMMAND,0x0c);  					//开显示,关游标
}

//*******************************************
//函数名称:void Parallel_Clear_Ram(void)
//函数功能:并行清屏函数
//形式参数:无
//行参说明:无
//返回参数:无
//使用说明:无
//*******************************************
void Parallel_Clear_Ram(void)
{
	Parallel_Write_LCD(COMMAND,BASIC_FUNCTION);			//基本指令集
	Parallel_Write_LCD(COMMAND,CLEAR_SCREEN);			//清屏
}

//******************************************************************************
//*****************以上为并行工作模式下的功能函数*******************************
//******************************************************************************
//*****************以下为    测     试       函数*******************************
//******************************************************************************

void main(void)
{
	uint i=60000;
	Serial_Init_LCD();
	while(1)
	{
	;
	}
}

⌨️ 快捷键说明

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