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

📄 12864._c

📁 数字频率计数字频率计数字频率计数字频率计
💻 _C
字号:
/*******************************************
  文件:12864.C
  环境:编译为ICC AVR6.31
********************************************
1 VSS -->接地
2 VDD -->电源VCC
3 V0  -->高电平
4 RS(CS) --> PB4
5 RW(STD)-->PB5
6 E      --> PB6
7 ~~~14 -->PA0~~PA7 (输出数据总线)
15 PSB-->VCC
16 NC
17 RST-->VCC
18 NC
19 LEDA -->VCC
20 LEDB -->GND
/******************************************/
#include <iom16v.h>			//包含型号头文件
#include <macros.h>			//包含"位"操作头文件
#include "LCD_PORT.h"		//包含自定义常量头文件


/*******************************************
函数名称: LCD12864_portini
功    能: 初始化12864液晶用到的IO口
参    数: 无
返回值  : 无
/********************************************/
void LCD12864_portini(void)
{
    PORTD=(1<<PD0)|(1<<PD1);
	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);			   //还原回基本指令集模式
}


⌨️ 快捷键说明

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