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

📄 12864_serial.c

📁 AVR Devolpment Board
💻 C
📖 第 1 页 / 共 2 页
字号:
     do   SendByte(0xfc);      //11111,RW(1),RS(0),0
     while(0x80&ReceiveByte());      //BF(.7)=1 Busy
}



/******************************************************************************************
* 函数名称    :WriteCommand
* 功能描述    :写命令
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void WriteCommand(uchar Cbyte )
{	
     CheckBusy();
     SendByte(0xf8);            //11111,RW(0),RS(0),0
     //SendByte(Cbyte);
	 SendByte(0xf0&Cbyte);      //高四位
     SendByte(0xf0&Cbyte<<4);//低四位(先执行<<)
}

/******************************************************************************************
* 函数名称    :WriteData
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void WriteData(uchar Dbyte )
{
     CheckBusy();
     SendByte(0xfa);            //11111,RW(0),RS(1),0
     SendByte(0xf0&Dbyte);      //高四位
     SendByte(0xf0&Dbyte<<4);//低四位(先执行<<)
     DDRC=DDRC|0x01;
}

/******************************************************************************************
* 函数名称    :LcmInit
* 功能描述    :
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LcmInit( void )
{
	DDRD|=(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
	PORTD&=~(1<<PD7);	
	SET_CS;
    WriteCommand(0x30);      //8BitMCU,基本指令集合
    WriteCommand(0x03);      //AC归0,不改变DDRAM内容 //地址归0
    WriteCommand(0x0C);      //显示ON,游标OFF,游标位反白OFF //整体显示开,游标显示关,反白关
    WriteCommand(0x01);      //清屏,AC归0 //清除显示
    WriteCommand(0x06);      //写入时,游标右移动 //进入设定点
}

/******************************************************************************************
* 函数名称    :LcmClearTXT
* 功能描述    :文本区清RAM函数
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LcmClearTXT( void )
{
     uchar i;
     WriteCommand(0x30);      //8BitMCU,基本指令集合
     WriteCommand(0x80);      //AC归起始位
     for(i=0;i<64;i++)
     WriteData(0x20);
}

/******************************************************************************************
* 函数名称    :LcmClearBMP
* 功能描述    :图形区清RAM函数
* 参数        :  参数名称:	输入/输出?	类型		描述
* 图形区和文本区显示在两个不同的RAM区
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void LcmClearBMP( void )
{
     uchar i,j;
     WriteCommand(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     WriteCommand(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<32;i++)            //12864实际为256x32
     {
           WriteCommand(0x80|i);      //行位置
           WriteCommand(0x80);      //列位置
           for(j=0;j<32;j++)            //256/8=32 byte
                WriteData(0);
     }
}

/******************************************************************************************
* 函数名称    :PutStr
* 功能描述    :PutStr(x,y,str1); //X为行0--3 Y为行起始位置0--7
* 参数        :  参数名称:	输入/输出?	类型		描述
* 
* 返回值      :
* 作者        :
* 创建日期    :2006-12-19
* 全局变量    :
* 全局静态变量:
* 局部静态变量:
*----------------------------------------修改历史------------------------------------------
* 当前版本    : 			 修改人:                  修改日期:
* 修改说明    :
******************************************************************************************/
void PutStr(uchar row,uchar col,uchar *puts)
{
    WriteCommand(0x30);      //8BitMCU,基本指令集合
	switch(row)
	{
		case 0:
			WriteCommand(0x80+col);
			break;
		case 1:
			WriteCommand(0x90+col);
			break;
		case 2:
			WriteCommand(0x88+col);
			break;
		case 3:
			WriteCommand(0x98+col);
			break;
		default:
			break;
	}
	while(*puts != '\0')      //判断字符串是否显示完毕
	{
		WriteData(*puts);
		puts++;
	}
}

void PutBMP(const unsigned char *puts)
{
	uchar n,i,j;
	unsigned char RamVar; //定义无符号变量(Ram变量)
	for(n=0;n<2;n++)		//分两屏显示
	for(i=0;i<32;i++)		//每屏32行	
	for(j=0;j<8;j++)	     //每行8个X地址坐标
	{
		WriteCommand(0x80+i);	          //写Y坐标
		WriteCommand(0x80+j+n*8);		  //写X坐标。上半屏(n=0)地址为0x80-0x87,下半屏(n=1)地址为0x88-0x8f
		RamVar = pgm_read_byte( &(*puts));
		//也可RamVar = pgm_read_byte(puts);
		WriteData(RamVar);					  //每个地址写两字节
		RamVar = pgm_read_byte( &(*(puts+1)));
		//也可RamVar = pgm_read_byte(puts+1);
		WriteData(RamVar);
		puts+=2;
	}	  
	WriteCommand(0x36);	       //打开绘图
}

/***********************************************/
 /*******PutBMP1显示16*16点阵*******************/
 /*****X0---3**************Y0--7***************************/
 /***********将16*16点阵显示在第X行第Y列**********************/
void Put16_16BMP1(const uchar *puts1,uchar x,uchar y)
{
     uchar i,j;
	 unsigned char RamVar; //定义无符号变量(Ram变量)
	 
	 //Row 行==0
	 if(x==0){x=0x80;y=x+y;}
	 if(x==1){x=0x90;y=x+y;}
	 if(x==2){x=0x80;y=x+y+8;}
	 if(x==3){x=0x90;y=x+y+8;}
     WriteCommand(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     WriteCommand(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<16;i++)            //12864实际为256x32
     {
           WriteCommand(x|i);      //行位置
           WriteCommand(y);      //列位置
           for(j=0;j<2;j++)      //256/8=32 byte
           {            //列位置每行自动增加
		   		 RamVar = pgm_read_byte( &(*puts1));////////////
				 //也可RamVar = pgm_read_byte(puts1);
                 WriteData(RamVar);
                 puts1++;
           }
     }
}


int main(void)
{
	LcmInit();
	LcmClearTXT();
	LcmClearBMP();
	while(1)
	{
		PutStr(0,0,"Welcome To HRBUST!");
		delay(2000);
		LcmClearTXT();
		LcmClearBMP();
		PutStr(0,0,"欢迎来到哈尔滨理工大学!");
		delay(3000);
		LcmClearTXT();
		LcmClearBMP();

		PutBMP(bmp0);
		delay(2000);
		LcmClearTXT();
		LcmClearBMP();
		PutBMP(bmp1);
		delay(2000);
		LcmClearTXT();
		LcmClearBMP();
		PutStr(1,2,str1);
		PutStr(3,0,str2);
		Put16_16BMP1(BMP0,0,0);
		Put16_16BMP1(BMP1,0,7);
		delay(2000);
		LcmClearTXT();
		LcmClearBMP();

	
	}
}

⌨️ 快捷键说明

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