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

📄 yejing11.c

📁 pic18单片机+128*64液晶显示程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/* ****************************************************************
** 功能描述: 液晶显示程序;用A/D采样电压值,并将其显示在液晶上
*************************************************************** */

#include	"pic18fxx8.h"		/* 所有PIC18系列的头文件 */
#include "stdio.h"
const char shu[160]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,		//"0"
					 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,		//"1"
					 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,		//"2"
					 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,		//"3"
					 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,		//"4"
					 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,		//"5"
					 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,		//"6"
					 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,		//"7"
					 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,		//"8"
					 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,};		//"9"

const char d[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,}	;		//小数点
                                                                                                                                
const char mao[16]={0x00,0x00,0x00,0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,};		//"冒号"

const char dian[32]={0x10,0x60,0x01,0x86,0x60,0x04,0x44,0x64,0x55,0x4E,0x44,0x64,0xC4,0x04,0x04,0x00,
                     0x04,0x04,0xFC,0x03,0x40,0x30,0x0F,0x00,0x00,0x7F,0x00,0x3F,0x40,0x40,0x70,0x00,};		  //"流"

const char ya[32]={0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,
                   0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00,};		//"量"

char	*ARRAY;
char	ppp[34];
char	i;
unsigned char display[4];
float fcoutresult=0;				/* 频率转换计算结果 */
unsigned long int  fcout_Sample_result=0;	/*频率转换采样结果 */
unsigned char  fcout_Flag=0;				/* 频率转换完成标志,=1有新的频率数据转换完成 */
	

/* ** 函 数 名: YJ_initial()
** 功能描述:液晶显示初始化子程序 
****************************************************************** */ 
void YJ_initial()
{

	INTCON=0X00;				/* 禁止总中断和外围中断 */		
	WDTCON=0;					/* 清看门狗 */
	TRISE=TRISE&0XF8;			/* 设置RE0,RE1,RE2为输出 */
	TRISB=TRISB&0XFE;			/* 设置RB0为输出 */
    TRISA=TRISA&0XF7;			/* 设置RA3为输出 */

}
/* **************************************************************
** 函 数 名: Deal_AD()
** 功能描述:AD转换完成后处理数据子程序 
****************************************************************** */ 
void Deal_AD()
{
    int temp;
    unsigned char k;
	fcout_Flag=0;				 				/* 频率测量转换完成标志清0 */
	fcoutresult=fcout_Sample_result*3.6/0.01/2.1	;
	/*将采样结果转换放大10倍,小数点固定在第二位显示*/
 temp= (int)fcoutresult;

 sprintf(display,"%4d",temp); 
  for(k=0;k<4;k++)
  display[k]=display[k]&(0x0f);

	/*转换为带一位小数的BCD码实际值如25表示2.5V,在实验板上将J13跳针插上,2通道采样口输入0-5V的直流电压*/

}

/* ****************************************************************
** 函 数 名: interrupt	HI_ISR()
** 功能描述: 高优先级中断子程序:AD转换完成中断	     
*************************************************************** */
/*void interrupt HI_ISR()
{
	if(ADIF==1)		  		//AD转换完成
	{
		ADIF=0;		  		//清除中断标志
		AD_Flag=1;	 		//置AD转换完成标志
	}
}*/
void interrupt ISR(void)
{
if (TMR0IE && TMR0IF)                 //判TMR0 中断
  {
    TMR0=0x0D8EF;                    //重装定时器初值
    TMR0IF = 0;                      //清除TMR0 中断标志
 //   PORTB=TMR1H;           
 //   PORTD=TMR1L;                     //在此加入TMR0 中断服务
    fcout_Sample_result=TMR1L+(TMR1H<<8);	/* 读取并存储TMR1转换结果(16位) */ 
    fcout_Flag=1;
    asm("nop");      
    asm("nop");  
    TMR1=0;                 
  }
}
/* ****************************************************************
** 函 数 名: DELAY()
** 功能描述: 软件延时子程序
*************************************************************** */
void DELAY()
{
	unsigned  int  i;
	for(i =1000; i>0;i--)
    i=i;
}
/* ****************************************************************
** 函 数 名: LCDSTA1(int E)
** 功能描述: 读液晶显示器状态子程序,行参E代表液晶的边,用来查询液晶边是否处于空闲状态
*************************************************************** */
void	LCDSTA1(int	E)
{
	int	E1FLAG;
	TRISD=0XFF;						/* 设置D口为输入 */
	while(1)
	{
		if(E==1)
		{
			PORTA=PORTA|0X08;		/* 设置RE2/CSA=0,RA3/CSB=1,即片选1。*/
			PORTE=(PORTE|0X01)&0XF9;/* RE0/RW=1,RE1/DI=0,设置为读状态 */
		}
		else	
		{
			PORTA=PORTA&0XF7;		/* 设置RE2/CSA=1,RA3/CSB=0,即片选2。*/
			PORTE=(PORTE|0X05)&0XFD;/* RE0/RW=1,RE1/DI=0,设置为读状态*/
		}
		PORTB=PORTB|0X01;			/* RB0/E=1 */
		E1FLAG=PORTD&0X80;			/* 取DB7的值 */
		PORTB=PORTB&0XFE;			/* RB0/E=0,先将E设置为1,让数据被读出,该指令用来查询液晶显示模块内部控制器的状态;
									之后又将E设置为0,数据被锁存(写)入KS0108B及其兼容控制驱动器 */
		if(E1FLAG==0X0000) break;	/* 如果RD7=0,则处于正常工作状态,退出循环 */
	}
}
/* ****************************************************************
** 函 数 名: TRANS1(int	TRANS,int E)
** 功能描述: 对液晶显示器发指令子程序,行参E代表处理的液晶的边,可以设置行和页。当RE0/RW=0,RE1/DI=0时,DB7=1,DB6=1,
			 设置了对应液晶屏最上一行的显示RAM 的行号;DB7=1,DB6=0, 设置页值。
*************************************************************** */
void	TRANS1(int	TRANS,int	E)
{
	TRISD=0X00;					    /* RD为输出 */
	if(E==1)						/* 设置RE2/CSA=0,RA3/CSB=1,即片选1。*/
	{
		PORTA=PORTA|0X08;			
		PORTE=PORTE&0XF8;			/* RE0/RW=0,RE1/DI=0 */
	}
	else							/* 设置RE2/CSA=1,RA3/CSB=0,即片选2。*/
	{
		PORTA=PORTA&0xF7;
		PORTE=(PORTE|0X04)&0XFC;	/* RE0/RW=0,RE1/DI=0 */
	}
	PORTD=TRANS;					/* 将所需要的行值或页值赋值给D口 */
	PORTB=PORTB|0X01;				/* RB0/E=1,让数据被读出 */
	PORTB=PORTB&0XFE;				/* RB0/E=0,数据被锁存(写)入KS0108B及其兼容控制驱动器 */		
}
/* ****************************************************************
** 函 数 名: WRITE1(char WRITE,int CLMADD,int E)
** 功能描述: 对液晶显示器写数据子程序
*************************************************************** */
void	WRITE1(char	WRITE,int CLMADD,int E)
{
	TRANS1(CLMADD,E);		   		/* 设置列地址 */
	TRISD=0X00;						/* RD为输出 */
	if(E==1)						/* 设置RE2/CSA=0,RA3/CSB=1,即片选1。RE0/RW=0,RE1/DI=1,写数据指令	*/
	{
		PORTA=PORTA|0X08;
		PORTE=(PORTE|0X02)&0xFA;
	}
	else							/* 设置RE2/CSA=1,RA3/CSB=0,即片选2。RE0/RW=0,RE1/DI=1,写数据指令 */
	{
		PORTA=PORTA&0xF7;
		PORTE=(PORTE|0X06)&0xFE;
	}
	PORTD=WRITE;					/* 将要写入数据赋值 */
	PORTB=PORTB|0X01;				/* RB0/E=1,让数据被读出 */
	PORTB=PORTB&0XFE;				/* RB0/E=0,数据被锁存(写)入KS0108B及其兼容控制驱动器 */	
}
/* ****************************************************************
** 函 数 名: DISP1(int	E)
** 功能描述: 开E边显示子程序,用于检查液晶显示是否被打开
*************************************************************** */
void	DISP1(int	E)
{
	int	E1FLAG;
	while(1)
	{
		TRANS1(0X03F,E); 			/* 送出控制命令,LED显示RAM中的内容 */
     	LCDSTA1(E);		 			/* 判断液晶是否为空闲状态 */
		TRISD=0XFF;				    /* 设置D口为输入 */
		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==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表示页设置指令 */

⌨️ 快捷键说明

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