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

📄 lcd.h

📁 PIC18F6390的AD转换程序 转换结果用LCD显示
💻 H
字号:
#define  LCD_RS PORTEbits.RE4       //并行的数据/指令选择信号  H/L
#define  LCD_RW PORTEbits.RE5       //并行的读/写选择信号   H/L
#define  LCD_EN PORTEbits.RE6       //并行的使能信号       H/L  
  
void digit_display(unsigned char line,unsigned char column,int data);  //显示数据
void text_display(unsigned char line,unsigned char column,const unsigned char *s);   //显示文字
void LCD_initial(void);      //LCD初始化
void LCD_write_data(int data);   //对LCD写数据
void LCD_write_command(int data); //对LCD写指令
unsigned int LCD_read_data(void);  //从LCD读数据
void LCD_checkbusy(void);          //检测LCD忙位
void delay_10us(unsigned char x);   
void delay_ms(unsigned char cnt);


void delay_10us(unsigned char x) {while(x--);} 
void delay_ms(unsigned char cnt)
{
	unsigned char i=4;
	do 
	{
  		do 
		{
   			delay_10us(39);
  		} while(--i);
	} while(--cnt);
}

void LCD_checkbusy(void)   //检测忙BF位
{
	TRISD=0xff;            //PORTD为输入
	LCD_EN=0;LCD_RS=0;LCD_RW=1;   //不始能  指令 读
	delay_10us(1);
    LCD_EN=1;              //始能
	delay_10us(1);
    while(PORTD&0x80);     //BF位为0时跳出 
    LCD_EN=0;              //关始能
	delay_10us(1);

    return;
}
unsigned int LCD_read_data(void)  //读数据
{
	unsigned int data;
    LCD_checkbusy();              //检测忙
	TRISD=0xff;                   //PORTD为输入
    LCD_EN=0;LCD_RS=1;LCD_RW=1;   //不始能  数据  读
	delay_10us(1);
	LCD_EN=1;
	delay_10us(1);
    data=PORTD;                   
    LCD_EN=0;
	delay_10us(1);
   
	return data;
}
void LCD_write_command(int data)  //写指令
{
    LCD_checkbusy();              //检测忙BF位
	TRISD=0x00;                   //PORTD为输出
	delay_10us(1);                
    PORTD=data;                   //PORTD输出data给LCM
	LCD_EN=0;LCD_RS=0;LCD_RW=0;   //不始能  指令  写
	delay_10us(1);
	LCD_EN=1;
	delay_10us(1);
    LCD_EN=0;
	delay_10us(1);
	return;
}
void LCD_write_data(int data)
{
    LCD_checkbusy();
	TRISD=0x00;
	delay_10us(1);
    PORTD=data;
	LCD_EN=0;LCD_RS=1;LCD_RW=0;   //不始能  数据  写
	delay_10us(1);
	LCD_EN=1;
	delay_10us(1);
    LCD_EN=0;
	delay_10us(1);
	return;
}
void LCD_initial(void)           //LCD初始化   
{
   	TRISE=0x00;    //PORTE方向输出
    TRISD=0x00;                  //PORTD输出
   	PORTD=0x00;                  //PORTD输出全为低
    LCD_RS = 0;                  //数据
	delay_ms(400);
    LCD_write_command(0x38);     //功能设定RE=0基本指令集动作
    delay_ms(10);
    LCD_write_command(0x38);
    delay_ms(10);
    LCD_write_command(0x38);
    delay_ms(10);
    LCD_write_command(0x38);
   delay_ms(10);
    LCD_write_command(0x08);     //显示状态 D=0:整体显示OFF
                                 //         C=0:游标OFF
                                 //         B=0:游标位置OFF

   delay_ms(10);  
    LCD_write_command(0x01);     //清屏 
   delay_ms(10);
    LCD_write_command(0x06);     //进入点设定

   delay_ms(10);
    LCD_write_command(0x0c);     //显示状态 D=1:整体显示ON
                                 //         C=0:游标OFF
                                 //         B=0:游标位置OFF
	return;
}


void text_display(unsigned char line,unsigned char column,const unsigned char *s)
{
    switch (line)
	{
		case 1:
			line=0x80;
			break;
		case 2:
			line=0x90;
			break;
		case 3:
			line=0x88;
			break;
		case 4:
			line=0x98;
			break;
	}
	LCD_write_command(line+column-1);   //显示起始位置
	while(*s) LCD_write_data(*s++);
	
    return;
}

void digit_display(unsigned char line,unsigned char column,int data)
{
    unsigned char ss[10],*s;
    s=ss;
	sprintf(s,"%d",data);
	switch (line)
	{
		case 1:
			line=0x80;
			break;
		case 2:
			line=0x90;
			break;
		case 3:
			line=0x88;
			break;
		case 4:
			line=0x98;
			break;
	}
	LCD_write_command(line+column-1);

    while(*s) LCD_write_data(*s++);
	
    return;
}

⌨️ 快捷键说明

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