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

📄 yejing.c

📁 这是我从朋友那搞到的pic学习资料
💻 C
📖 第 1 页 / 共 2 页
字号:
	PORTB=PORTB&0XFE;	 			/* RB0/E=0,数据被锁存(写)入KS0108B及其兼容控制驱动器 */	
	if(E1FLAG==0X00)break;			/* 如果RD5=0,则表示液晶显示被打开,退出循环,否则继续打开 */
	}
}
/* ****************************************************************
** 函 数 名: CLEAR1(int	E)
** 功能描述: E边清屏子程序,将液晶显示屏清屏
*************************************************************** */
void	CLEAR1(int	E)
{
	int PAGEADD,PAGENUM,CLMSUM;
	for(PAGENUM=0X08,PAGEADD=0X0B8;PAGENUM>0;PAGENUM--,PAGEADD++)
     	{											/* PAGEADD含页设置指令,中bit7:bit3为10111表示页设置指令 */
													/* bit2:bit000-111为页号的取值范围 */
         	TRANS1(PAGEADD,E); 						/* 设置相应的页地址 */
        	 for(CLMSUM=0x40;CLMSUM<=0X7F;CLMSUM++) /* CLMSUM含列地址设置指令,bit7:bit6为01 */
													/* 表示设置列地址,bit5:bit0从0-63为列地址得取值范围 */
         		{
           			LCDSTA1(E);						/* 判断液晶空闲状态 */
           			WRITE1(0X00,CLMSUM,E);			/* 送0清屏 */
          		}
        }
}

/* ****************************************************************
** 函 数 名: DISOFF1(int	E)
** 功能描述: 关E边显示子程序,用于检查液晶显示是否被关闭
**************************************************************** */
void	DISOFF1(int	E)
{
	int E1FLAG;
	while(1)
	{
		TRANS1(0X3E,E);				/* 发送控制命令,关闭显示 */
		LCDSTA1(E);					/* 判断液晶是否为空闲状态 */
		TRISD=0XFF;					/* 设置RD为输入 */
		if(E==1)					/* 设置RE2/CSA=0,RA3/CSB=1,即片选1。 */
		{
			PORTA=PORTA|0X08;
			PORTE=(PORTE|0X01)&0xF9;/* RE0/RW=1,RE1/DI=0,用来查询液晶显示模块内部控制器的状态*/		
		}
		else						/* 设置RE2/CSA=1,RA3/CSB=0,即片选2。*/
		{
			PORTA=PORTA&0xF7;
			PORTE=(PORTE|0X05)&0xFD;/* RE0/RW=1,RE1/DI=0,用来查询液晶显示模块内部控制器的状态*/
		}
	PORTB=PORTB|0X01;				/* RB0/E=1,让数据被读出 */
	E1FLAG=PORTD&0X20;				/* 取RD5的值 */
	PORTB=PORTB&0XFE;				/* RB0/E=0,数据被锁存(写)入KS0108B及其兼容控制驱动器 */	
	if(E1FLAG==0X20)break;			/* 如果RD5=0,则表示液晶显示被关闭,则退出循环,否则继续关闭 */
	}
}
/* ****************************************************************
** 函 数 名: LCD1INIT(int	E)
** 功能描述: LCD的E边初始化子程序
*************************************************************** */
void	LCD1INIT(int	E)
{
	DISOFF1(E);							/* 关E边显示 */
   	CLEAR1(E);							/* 清屏 */
    DISP1(E);							/* 开E边显示 */
} 
/* ****************************************************************
** 函 数 名: DISPLAY1(int	E,int	PAGADD,int	CLMADD)
** 功能描述: 汉字显示子程序,入口为存储汉字库的数组的首地址,页地址和起始列地址和选中的E边数
*************************************************************** */
DISPLAY1(int E,int PAGADD,int CLMADD)
{ 
	int K;
    char TEMP;
    TRANS1(0X0C0,E);					/* 从0行开始显示 */
    TRANS1(PAGADD,E);					/* 从PAGADD页开始 */
    for(K=0;K<16;K++,CLMADD++,ARRAY++)	/* 汉字占16列 */
     {   
		TEMP=*ARRAY;
        WRITE1(TEMP,CLMADD,E);			/* TEMP写入数据线的值,CLMAA设置列地址值,E选择液晶块 */		
      }
 	CLMADD=CLMADD-16;					/* 从原来的列地址开始 */
    PAGADD=PAGADD+1;					/* 进入下一页 */
    TRANS1(PAGADD,E);
    for(;K<32;K++,CLMADD++,ARRAY++)
	{
 		TEMP=*ARRAY;
       	WRITE1(TEMP,CLMADD,E);			/* TEMP写入数据线的值,CLMAA设置列地址abcdefab值,E选择液晶块 */
    }
}

/* ****************************************************************
** 函 数 名: DISPLAY2(int	E,int	PAGADD,int	CLMADD)
** 功能描述: 数字和字母显示子程序,入口为存储字母或数字的数组的首地址,页地址,起始列地址选中的E边数
			 或显示汉字的“左半”或“右半”
*************************************************************** */
DISPLAY2(int	E,int	PAGADD,int	CLMADD)
{ 
	int K;
    char TEMP;
    TRANS1(0X0C0,E);					/* 从0行开始显示 */
    TRANS1(PAGADD,E);					/* 从PAGADD页开始 */
    for(K=0;K<8;K++,CLMADD++,ARRAY++) 	/* 数字和字母占8列 */
    {
        TEMP=*ARRAY;
        WRITE1(TEMP,CLMADD,E);			/* TEMP写入数据线的值,CLMAA设置列地址值,E选择液晶块 */
    }
	CLMADD=CLMADD-8;					/* 从原来的列地址开始 */
    PAGADD=PAGADD+1;					/* 进入下一页 */
    TRANS1(PAGADD,E);
    for(;K<16;K++,CLMADD++,ARRAY++)
	{
       	TEMP=*ARRAY;
       	WRITE1(TEMP,CLMADD,E);			/* TEMP写入数据线的值,CLMAA设置列地址值,E选择液晶块 */
    }
}

/* ****************************************************************
** 函 数 名: DISPLAY3(int	E,int	PAGADD,int	CLMADD)
** 功能描述: 显示数字和字母的“左半”或“右半”,在这个程序中这一部分并没有
			 用到但在其他的情况中可能用到
*************************************************************** */
DISPLAY3(int	E,int	PAGADD,int	CLMADD)
{ 
	int K;
    char TEMP;
    TRANS1(0X0C0,E);					/* 从0行开始显示 */
    TRANS1(PAGADD,E);					/* 从PAGADD页开始 */
    for(K=0;K<4;K++,CLMADD++,ARRAY++)   /* 半个数字和字母占4列 */
    	{
        	TEMP=*ARRAY;
        	WRITE1(TEMP,CLMADD,E);		/* TEMP写入数据线的值,CLMAA设置列地址值,E选择液晶块 */
        }
	CLMADD=CLMADD-4;					/* 从原来的列地址开始 */
    PAGADD=PAGADD+1;					/* 进入下一页 */
    TRANS1(PAGADD,E);
    for(;K<8;K++,CLMADD++,ARRAY++)
      	{
       		TEMP=*ARRAY;
       		WRITE1(TEMP,CLMADD,E);		/* TEMP写入数据线的值,CLMAA设置列地址值,E选择液晶块 */
      	}
}

/* ****************************************************************
** 函 数 名: xianshi()
** 功能描述: 液晶显示汉字的程序,电压:
*************************************************************** */
void xianshi()
{   
	unsigned char data;
	int j;
  	for(i=0;i<32;i++)
		ppp[i]=dian[i];				//显示汉字“电”
	ARRAY=&ppp[0];
    DISPLAY1(1,0x0BC,0x58);		//第一块液晶,第四页,第24列
  	for(i=0;i<32;i++)
		ppp[i]=ya[i];				//显示汉字“压”
	ARRAY=&ppp[0];
    DISPLAY1(1,0x0BC,0x68);		//第一块液晶,第四页,第40列
 	for(i=0;i<16;i++)
		ppp[i]=mao[i];				//显示“冒号”
	ARRAY=&ppp[0];
    DISPLAY2(1,0x0BC,0x78);		//第一块液晶,第四页,第56列

/* *********显示AD转换结果****************** */	
	data=Adresult&0x0f;
	data=data*16;
	for(j=0,i=data;i<16+data;i++,j++)		     /* 显示小数位 */
		ppp[j]=shu[i];
	ARRAY=&ppp[0];
	DISPLAY2(2,0X0BC,0x50);	

	for(i=0;i<16;i++)		    				 /* 显示小数点 */
		ppp[i]=d[i];
	ARRAY=&ppp[0];
	DISPLAY2(2,0X0BC,0x48);	

	data=(Adresult&0xf0)>>4;	
	data=data*16;
	for(j=0,i=data;i<16+data;i++,j++)		     /* 显示个位数 */
		ppp[j]=shu[i];
	ARRAY=&ppp[0];
	DISPLAY2(2,0X0BC,0x40);
}


/* **************** 主函数 ***************************** */
main()
{
	YJ_initial();				/* 液晶显示初始化 */
    LCD1INIT(1);				/* LCD的1边初始化 */
    LCD1INIT(2);				/* LCD的2边初始化 */
	AD_Initial();				/* A/D转化初始化 */
  	INTCON=INTCON|0xc0;			/* 开总中断、开外围接口中断 */

  while(1)
    {	  
	  xianshi(); 
	  if(AD_Flag==1)			/* AD采样完成 */
	  Deal_AD();				/* 处理AD数据 */
      DELAY();					/* 间隔一定时间启动AD采样,间隔时间是不使AD采样过于频繁 */	
	  ADCON0=ADCON0|0x04;		/* 将ADCON0的bit2,设置为1,即启动A/D转换 */				
     }
}

⌨️ 快捷键说明

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