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

📄 main.c

📁 12864菜单
💻 C
字号:
/*******************************************
  文件:YJ12864.C
  环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10 
  硬件:ATMEGA16芯片
  日期:2006年12月10日 
  功能:驱动开发板上的12864液晶
  备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include "iom16v.h"			//包含型号头文件
#include "macros.h"			//包含"位"操作头文件
#include "stdio.h"			//标准输入输出头文件
#include "AVR_PQ1A.h"//包含自定义常量头文件

#pragma data:code //以下是字模工具取出的图片数组
const uchar GDRAM[1024]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x7F,0xFF,0xC0,0xFF,0xFF,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x83,0xFF,0xFE,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x40,0x00,0x40,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x82,0x00,0x02,0x04,
0x20,0x7F,0xFF,0xC0,0xFF,0xFF,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x83,0xFF,0xFE,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x2F,0xFF,0xFF,0xFF,0xC1,0xF8,0x7F,0xBF,0xC1,0xE3,0x9C,0x00,0x78,0x1E,0x3F,0xC4,
0x26,0xD9,0xB6,0x6D,0x80,0x60,0x33,0x1B,0x63,0x31,0x8C,0x00,0xCC,0x33,0x1B,0x64,
0x26,0xD9,0xB6,0x6D,0x80,0x60,0x1E,0x1B,0x66,0x31,0x8C,0x01,0x8C,0x61,0x9B,0x64,
0x27,0xF9,0xFE,0x7F,0x80,0x60,0x0C,0x1B,0x66,0x01,0x8C,0x01,0x80,0x61,0x9B,0x64,
0x27,0xF9,0xFE,0x7F,0x80,0x60,0x1E,0x1B,0x66,0x01,0x8C,0x01,0x80,0x61,0x9B,0x64,
0x23,0x30,0xCC,0x33,0x1C,0x6C,0x33,0x1B,0x63,0x31,0x9C,0x70,0xCC,0x33,0x1B,0x64,
0x23,0x30,0xCC,0x33,0x1C,0x78,0x7F,0xBF,0xF1,0xE0,0xFC,0x70,0x78,0x1E,0x3F,0xF4,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
#pragma data:data

/*******************************************
函数名称: LCD12864_portini
功    能: 初始化12864液晶用到的IO口
参    数: 无
返回值  : 无
/********************************************/
void LCD12864_portini(void)
{
	LCDb_CTRL_DDR |= BIT(LCDb_RS)|BIT(LCDb_RW)|BIT(LCDb_E)|BIT(LCDb_RST);//配置控制管脚为输出
	LCDb_DATA_DDR |= 0xFF;  //配置数据管脚为输出
	LCDb_SET_RST;		//不使能复位端
}
/*******************************************
函数名称: LCD12864_readbyte
功    能: 从12864液晶读出一个字节数据或者指令
参    数: DatCmd--为iDat时是数据,为iCmd时是指令
返回值  : dByte--读回的数据或者指令
/********************************************/
uchar LCD12864_readbyte(uchar DatCmd)
{
 	uchar dByte;
	if (DatCmd == iCmd)		 //指令操作
		LCDb_CLR_RS;
	else
		LCDb_SET_RS;
		
	LCDb_SET_RW;	   	  	 //读操作
	LCDb_SET_E;
	LCDb_DATA_DDR=0x00;	 //数据总线定义为输入
	dByte=LCDb_DI;			 //读数据或者指令
	Delayms(1);				 //时序调整
	LCDb_CLR_E;	
	LCDb_DATA_DDR|=0xff;	 //数据总线还原为输出
	return dByte;
}
/*******************************************
函数名称: LCD12864_sendbyte
功    能: 向12864液晶写入一个字节数据或者指令
参    数: DatCmd--为iDat时是数据,为iCmd时是指令
	  	  dByte--为写入12864的数据或者指令
返回值  : 无
/********************************************/
void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
{
	if (DatCmd == iCmd)		//指令操作
		LCDb_CLR_RS;
	else
		LCDb_SET_RS;
		
	LCDb_CLR_RW;			//写操作
	LCDb_SET_E;
	LCDb_DO = dByte;		//写入数据
	Delayus(100);
	LCDb_CLR_E;	
}
/*******************************************
函数名称: LCD12864_sendstr
功    能: 向12864液晶写入一个字符串
参    数: ptString--字符串指针
返回值  : 无
/********************************************/
void LCD12864_sendstr(uchar *ptString)
{
	while((*ptString)!='\0')		 //字符串未结束一直写
	{
		LCD12864_sendbyte(iDat, *ptString++);
	}
}
/*******************************************
函数名称: LCD12864_clear
功    能: 12864液晶清屏
参    数: 无
返回值  : 无
/********************************************/
void LCD12864_clear(void)
{
	LCD12864_sendbyte(iCmd,LCDb_CLS);
	Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
}
/*******************************************
函数名称: LCD12864_readBF
功    能: 12864液晶清屏
参    数: 无
返回值  : busy--为1时忙,为0时可以接收指令
/********************************************/
uchar LCD12864_readBF(void)
{	  
	uchar busy;
	busy=LCD12864_readbyte(iCmd);		//读回BF标志和地址
	if(busy&0x80)						//如果忙,返回忙状态
		busy=1;
	else	   							//不忙,可以写入
		busy=0;
	return busy;
}
/*******************************************
函数名称: LCD12864_gotoXY
功    能: 移动到指定位置
参    数: Row--指定的行
	  	  Col--指定的列
返回值  : 无
/********************************************/
void LCD12864_gotoXY(uchar Row, uchar Col)
{	
	switch (Row)		  //选择行
	{
		case 2:
			LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break;	//写入第2行的指定列
		case 3:
			LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break;	//写入第3行的指定列
		case 4:
			LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break;	//写入第4行的指定列	
		default:
			LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break;	//写入第1行的指定列	
	}
}
/*******************************************
函数名称: LCD12864_initial
功    能: 12864液晶初始化
参    数: 无
返回值  : 无
/********************************************/
void LCD12864_initial(void)
{
	Delayms(100);				// 等待内部复位
	LCD12864_portini();			//端口初始化
	
	LCD12864_sendbyte(iCmd, LCDb_FUNCTION);	//功能、模式设定
	while(LCD12864_readBF());
	LCD12864_sendbyte(iCmd, LCDb_ON);		//打开显示
	while(LCD12864_readBF());
	LCD12864_clear();						//清屏
	while(LCD12864_readBF());
	LCD12864_sendbyte(iCmd, LCDb_ENTRY);	// 输入模式设定		
}
/*******************************************
函数名称: LCD12864_opGDRAM
功    能: 向GDRAM写入数据,并显示(完成绘图功能)
参    数: ptGDRAM--GDRAM数据指针
返回值  : 无
/********************************************/
void LCD12864_opGDRAM(const uchar *ptGDRAM)
{
	uchar i,j;
	uint x=0;
	while(LCD12864_readBF());	  //读忙标志
	LCD12864_sendbyte(iCmd,LCDb_EXTCMD1);		//扩充指令集,并关闭绘图显示	
	//写入并显示上半屏幕
	for(i=0;i<32;i++)            				//行地址计数
     {	  	   	   
           for(j=0;j<8;j++)      				//列地址计数
           {            		   		 
		   		 LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
				 Delayus(10);
		   		 LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
				 Delayus(10);
                 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据 
				 Delayus(10);                
				 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
				 Delayus(10); 
           }
     }
	 //写入并显示下半屏幕
	 for(i=0;i<32;i++)            
     {	  	   	   
           for(j=8;j<16;j++)      
           {            
		   		 LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
				 Delayus(10);
		   		 LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
				 Delayus(10);
                 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入高位字节数据      
				 Delayus(10);
				 LCD12864_sendbyte(iDat,ptGDRAM[x++]); //输入低位字节数据
				 Delayus(10); 
           }
     }
	 Delayus(10);
	 LCD12864_sendbyte(iCmd,LCDb_EXTCMD2);			   //打开绘图显示
	 LCD12864_sendbyte(iCmd,LCDb_BASCMD);			   //还原回基本指令集模式
}

/*******************************************
函数名称: main
功    能: 12864液晶驱动主程序
参    数: 无
返回值  : 无
/********************************************/
void main(void)
{
 uchar i;
 Board_init( );	   							  //初始化开发板
 LCD12864_initial(); 						  //初始化12864液晶
  
 while(1)
 {
  LCD12864_clear();
  while(LCD12864_readBF());
  LCD12864_gotoXY(1,0);	   					  //第1行,第1列显示
  LCD12864_sendstr("AVR_PQ1A  开发板");	  
  LCD12864_gotoXY(2,2);		  			  	  //第2行,第3列显示
  LCD12864_sendstr("皮球制作");	
  LCD12864_gotoXY(3,0);						  //第3行,第1列显示
  LCD12864_sendstr("电话:13212800564");	
  LCD12864_gotoXY(4,1);						  //第4行,第2列显示
  LCD12864_sendstr("www.txmcu.com ");	
  Delayms(2000);				  			  //延时等待
  
  LCD12864_clear();							  //清屏幕
  LCD12864_opGDRAM(GDRAM);					  //完成绘图,绘图后返回基本指令集模式
  Delayms(2000);
 }
}
 

⌨️ 快捷键说明

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