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

📄 fyd12864.c

📁 利用DS3102时钟芯片跟12864液晶制作简单的多功能万年历
💻 C
字号:
#include "FYD12864.h"

//IO输入输出控制
unsigned char code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      //第四行汉字位置
};

//短延时函数:ShortDelay()
void ShortDelay(uchar i)
{
	for(;i>0;i--) ;
	}
	
//长延时函数:LongDelay()
void LongDelay(uint i)
{
	uint j;
	for(;i>0;i--)
		{ for(j=1000;j>0;j--);}
}
	

void SendByteLCD(uchar WLCDData)
{
uchar i;
for(i=0;i<8;i++)
{
 if((WLCDData<<i)&0x80)SID=1;
 else SID=0;
 SCLK=0; 
 SCLK=1; 
}
}

 SPIWR(uchar Wdata,uchar RS)
 {
   SendByteLCD(0xf8+(RS<<1));
   SendByteLCD(Wdata&0xf0);
   SendByteLCD((Wdata<<4)&0xF0);
 }



//写指令函数:WriteInstruc()
void WriteInstruc(uchar CMD)
{
 SPIWR(CMD,0);
 ShortDelay(90);//
}

//写一字节数据函数:WriteOneByte()
void WriteOneByte(uchar Data)
{
 SPIWR(Data,1);
}

//初始化函数:InitLCD()
void InitLCD(void)
{
  RST=0;
  ShortDelay(50);
  RST=1;
 
     WriteInstruc(0x30);//功能设置,一次送8位数据,基本指令集
     WriteInstruc(0x0C);//0000,1100  整体显示,游标off,游标位置off
     WriteInstruc(0x01);//0000,0001 清DDRAM
     WriteInstruc(0x02);//0000,0010 DDRAM地址归位
     WriteInstruc(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//     
  //   WriteInstruc(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一//   
   //  WriteInstruc(0x0C);//显示设定,开显示,显示光标,当前显示位反白闪动
}

//显示一个汉字(16x16)函数:DispOneWord()
void DispOneWord(uchar X,uchar Y,uint Word)	   
{											   
  uchar Disp_Address;							 
  uchar Address_H;								 
  uchar Address_L;								 
  												 
  if((X == 0x00)||(X == 0x02)) // 0,2行			 
  	Address_H = 0x80;							 
  else // 1,3行									  
  	Address_H = 0x90;							  
  												  
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;						   
  Disp_Address = (Address_H | Address_L) & 0xff;
  SetDDRAM_Add(Disp_Address); 				// Set DDRAM(Disp_Address)
  WriteOneByte(((Word & 0xff00) >> 8) & 0xff); // H_Byte
  WriteOneByte(Word & 0xff);		 // L_Byte  
}


/*void disparr(uchar X,uchar Y,char *ptr)	 //从x y连续显示三个汉字

{	uchar Disp_Address;
	uchar Address_H;
	uchar Address_L;
	uchar dispname[6]={0,0,0,0,0,0};
	uchar i;

  if((X == 0x00)||(X == 0x02)) // 0,2行			 
  	Address_H = 0x80;							 
  else // 1,3行									  
  	Address_H = 0x90;							  
  												  
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;						   
   Disp_Address = (Address_H | Address_L) & 0xff;
   SetDDRAM_Add(Disp_Address); 		
   	for(i=0;i<6;i++)
	dispname[i]=*(ptr+i);
	WriteOneByte(dispname[0] & 0xff); 
	WriteOneByte(dispname[1] & 0xff);
  	Disp_Address = (Address_H | Address_L+1) & 0xff;
    SetDDRAM_Add(Disp_Address);
	WriteOneByte(dispname[2] & 0xff);
	WriteOneByte(dispname[3] & 0xff);
	Disp_Address = (Address_H| Address_L+2) & 0xff;	   //h+2显示正常
	SetDDRAM_Add(Disp_Address);
	WriteOneByte(dispname[4] & 0xff);
	WriteOneByte(dispname[5] & 0xff);


 }*/
/*//显示两个字符(8x16)函数:DispTwoCharacter()
void DispTwoCharacter(uchar X,uchar Y,uchar Character1,uchar Character2)
{
  uchar Disp_Address;
  uchar Address_H;
  uchar Address_L;
  
  if((X == 0x00)||(X == 0x02)) // 0,2行
  	Address_H = 0x80;
  else // 1,3行
  	Address_H = 0x90;
  	
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;
  Disp_Address = Address_H | Address_L;
  SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
  WriteOneByte(Character1);
  WriteOneByte(Character2);
 }	
   */
 //显示一个字符函数
 void DispOneCharacter(uchar X,uchar Y,uchar  Character)
{ uchar Disp_Address;
  uchar Address_H;
  uchar Address_L;
  
  if((X == 0x00)||(X == 0x02)) // 0,2行
  	Address_H = 0x80;
  else // 1,3行
  	Address_H = 0x90;
  	
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;
  Disp_Address = Address_H | Address_L;
  SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
  WriteOneByte(Character);
 } 


//连续显示n个字符的数组 最多16个字符

void disponelinechar(uchar X,uchar Y,uchar  *ptr,uchar m)
 {uchar Disp_Address;
  uchar Address_H;
  uchar Address_L;
  uchar i,n,k;
  uchar dispchar[16];
     n=m;
    if((X == 0x00)||(X == 0x02)) // 0,2行
  	Address_H = 0x80;
  else // 1,3行
  	Address_H = 0x90;
  	
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;
       	for(i=0;i<n;i++)
	   dispchar[i]=*(ptr+i);
	   k=ceil(n/2);
	   for(i=0;i<k;i++)
	   {Disp_Address = (Address_H | Address_L+i)& 0xff;
       SetDDRAM_Add(Disp_Address);
       WriteOneByte(dispchar[2*i]& 0xff);
       WriteOneByte(dispchar[2*i+1]& 0xff);
       	}

 }

 
/*void disponelinehanzi(uchar X,uchar Y,char *ptr)	 //从x y连续显示一行8个汉字

{	uchar Disp_Address;
	uchar Address_H;
	uchar Address_L;
	uchar dispname[16];
	uchar i;

  if((X == 0x00)||(X == 0x02)) // 0,2行			 
  	Address_H = 0x80;							 
  else // 1,3行									  
  	Address_H = 0x90;							  
  												  
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;						   
   Disp_Address = (Address_H | Address_L) & 0xff;
 
   	for(i=0;i<16;i++)
   dispname[i]=*(ptr+i);
   for(i=0;i<8;i++)
   { Disp_Address = (Address_H | Address_L+i) & 0xff;
   	 SetDDRAM_Add(Disp_Address);
   	WriteOneByte(dispname[2*i] & 0xff); 
	WriteOneByte(dispname[2*i+1] & 0xff);	}
  	
  
 }

 void readtwocharacter(uchar X,uchar Y,uchar Character1,char Character2)
{ uchar Disp_Address;
  uchar Address_H;
  uchar Address_L;
  
  if((X == 0x00)||(X == 0x02)) // 0,2行
  	Address_H = 0x80;
  else // 1,3行
  	Address_H = 0x90;
  	
  if((X == 0x00)||(X == 0x01)) // 0,1行
  	Address_L = Y;
  else // 2,3行
  	Address_L = Y + 0x08;
  Disp_Address = Address_H | Address_L;
  SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
  Character1=ReadOneByte( );
  Character2=ReadOneByte( );
 } 
  */

⌨️ 快捷键说明

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