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

📄 fyd12864.c

📁 一个基于AD9954的430单片机编程
💻 C
字号:


#include "includes.h"

/*----------------------------------------------------------------------------------------------------
功能:		向液晶发送指令
入口参数:	rs, 指令中的RS位
		rw,指令中的R/W位
		data8b,指令中的8位指令数据
出口参数:	无
----------------------------------------------------------------------------------------------------*/
#if FYD_EN
void FYDCmd(char rs,char rw,char data8b)
{
  char temp;
  //  while(0<(SPI1Sendn-SPI1Datn)&&(SPI1Sendn-SPI1Datn)<7);
  do temp=SPI1Sendn-SPI1Datn;
  while(0<temp&&temp<4);
//  SPI1SendDat[SPI1Datn++]=FYD_CS;
  SPI1SendDat[SPI1Datn++]=rw<<2|rs<<1|0xF8;
//  SPI1SendDat[SPI1Datn++]=FYD_CS;
  SPI1SendDat[SPI1Datn++]=data8b&0xF0;
//  SPI1SendDat[SPI1Datn++]=FYD_CS;
  SPI1SendDat[SPI1Datn++]=data8b<<4;
  IE2=UTXIE1;                               //启动传送
}
#endif

/*----------------------------------------------------------------------------------------------------
功能:		初始化液晶
入口参数:	无
出口参数:	无
----------------------------------------------------------------------------------------------------*/
#if FYD_EN
void FYDInit()
{
  //	FYD_CS=1;
//	for(delay=0;delay<40000;delay++);
	FYDCmd(0,0,0x30);						
//	for(delay=0;delay<2000;delay++);
	FYDCmd(0,0,0x30);						
//	for(delay=0;delay<600;delay++);
	FYDCmd(0,0,0x0C);						//整体显示
//	for(delay=0;delay<2000;delay++);
	FYDCmd(0,0,1);							//清屏			
//	for(delay=0;delay<200;delay++);
	FYDCmd(0,0,0x06);
//	for(delay=0;delay<10000;delay++);
//	FYD_CS=0;
}
#endif

/*----------------------------------------------------------------------------------------------------
功能:		向液晶输出1个字
入口参数:	place,液晶上的位置,分为0x80-0x87,0x90-0x97,0x88-0x8F,0x90-0x9F4行
			word,要输出的字的GB2132码
出口参数:
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_WORDS_EN || FYD_PUT_BIN_EN || FYD_PUT_NUM_EN
void FYDPutWord(char place,char *word)
{
//	unsigned int delay;

//	FYD_CS=1;
//	for(delay=0;delay<100;delay++);
//	OSTimeDly(1);
	FYDCmd(0,0,place);					//位置
//	for(delay=0;delay<100;delay++);
//	OSTimeDly(1);
	FYDCmd(1,0,*word);					//高半字
//	for(delay=0;delay<100;delay++);
//	OSTimeDly(1);
        word++;
	FYDCmd(1,0,*word);				//低半字
//	FYD_CS=0;
}
#endif

/*----------------------------------------------------------------------------------------------------
功能: 		向液晶连续输出字串(包括中文)
入口参数:	place,液晶字符串的首位置,分为0x80-0x87,0x90-0x97,0x88-0x8F,0x90-0x9F4行
			n,输出字的个数(以16位的字宽的个数为准,若有8位零头按1算)
			words,字符串的首地址
出口参数:	无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_WORDS_EN
void FYDPutWords(char place,char n,char *words)
{
  n=n+place;
  for(;place<n;place++)
  {
    FYDPutWord(place,words);
    words+=2;
  }
}
#endif

/*----------------------------------------------------------------------------------------------------
功能: 		将数以10进制字输出到液晶,范围32767~-32768
入口参数:	place,液晶上的位置,输出占3个字的位置,place为最左边的字的位置,分为0x80-0x87,0x90-0x97,
			0x88-0x8F,0x90-0x9F  四行
			num,需要输出的数字,是一个有符16位整形数
出口参数:	无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_NUM_EN
void FYDPutNum(char place,signed int num)
{
  char temp[2];
  char on;
  
  if(num<0)
  {
    temp[0]=0x2D;
    num=0-num;
  }
  else temp[0]=0x20;
  temp[1]=num/10000+0x30;
  if(0x30==temp[1]) temp[1]=0x20;
  else on=1;
  FYDPutWord(place,temp);
  place++;
  temp[0]=num%10000/1000+0x30;
  if(0x30==temp[0]&&0==on) temp[0]=0x20;
  else on=1;
  temp[1]=num%1000/100+0x30; 
  if(0x30==temp[1]&&0==on) temp[1]=0x20;
  else on=1;
  FYDPutWord(place,temp);
  place++;
  temp[0]=num%100/10+0x30;
  if(0x30==temp[0]&&0==on) temp[0]=0x20;
  temp[1]=num%10+0x30; 
  FYDPutWord(place,temp);
}
#endif

/*----------------------------------------------------------------------------------------------------
功能:		将1个字节的数以2进制显示在液晶
入口参数:	place,液晶上的位置,输出占4个字的位置,place为最左边的字的位置,分为0x80-0x87,0x90-0x97,
			0x88-0x8F,0x90-0x9F  四行
出口参数:	无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_BIN_EN
void FYDPutBin(char place,char bin)
{
	char words[]={0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
	signed char n;

	for(n=3;n>-1;n--)
	{
		words[n*2+1]+=bin&1;
		bin=bin>>1;
		words[n*2]+=bin&1;
		bin=bin>>1;
	}
	FYDPutWords(place,4,words);
}
#endif

/*----------------------------------------------------------------------------------------------------
功能:		初始化液晶的图形显示内存
入口参数:	无
出口参数:	无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_PIC_EN
void FYDGRamInit()
{
	char dx,dy;
        int dt;

	FYDCmd(0,0,0x32);						//8位扩展绘图指令
	FYDCmd(0,0,0x36);						//8位扩展绘图指令
	for(dy=0x80;dy<0xA0;dy++)
	{
//		OSTimeDly(1);
		FYDCmd(0,0,dy);
//		OSTimeDly(1);
		FYDCmd(0,0,0x80);
		for(dx=0;dx<0x10;dx++)
		{
//			OSTimeDly(1);
			FYDCmd(1,0,0);
//			OSTimeDly(1);
			FYDCmd(1,0,0);
                        for(dt=0;dt<10000;dt++);
		}
	}
	FYDCmd(0,0,0x30);						//8位标准指令
}
#endif

/*----------------------------------------------------------------------------------------------------
功能:		将一幅图显示到液晶
入口参数:	(x,y),以左上角为原点,液晶上的位置,x 范围0x80~0x87(上半屏),0x88~0x8F(下半屏),y 范围0x80~0x9F
			w,图画的宽(左右)
			l,图画的长(上下)
			Pic,图画数据的首地址
出口参数:
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_PIC_EN
void FYDPutPic(char x,char y,char w,char l,char *Pic)
{
	char dx,dy;
        int dt;

	FYDCmd(0,0,0x32);						//8位扩展绘图指令
	FYDCmd(0,0,0x36);						//8位扩展绘图指令
	for(dy=y;dy<y+l;dy++)
	{
//		OSTimeDly(1);
		FYDCmd(0,0,dy);
//		OSTimeDly(1);
		FYDCmd(0,0,x);
		for(dx=0;dx<w;dx++)
		{
//			OSTimeDly(1);
			FYDCmd(1,0,*Pic);
			Pic++;
//			OSTimeDly(1);
			FYDCmd(1,0,*Pic);
			Pic++;
                        for(dt=0;dt<10000;dt++);
		}
	}
	FYDCmd(0,0,0x30);						//8位标准指令
}
#endif

/*----------------------------------------------------------------------------------------------------
功能:按16进制显示数据
入口:place,显示的位置,具体取值范围见fydputnum()
      datn,要显示的数据个数
      dat,指向需要显示的数据指针
出口:
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_HEX_EN
void FYDPutHex(char place,char datn,char *dat)
{
  char n,temp[2];
  
  for(n=0;n<datn;n++)
  {
    temp[0]=dat[n]>>4;
    if(temp[0]>9) temp[0]+=0x37;
    else temp[0]+=0x30;
    temp[1]=dat[n]&0x0F;
    if(temp[1]>9) temp[1]+=0x37;
    else temp[1]+=0x30;
    FYDPutWord(place,temp);
    place++;
  }
}
#endif

⌨️ 快捷键说明

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