微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC16F91x系列单片机驱动1602液晶屏程序

PIC16F91x系列单片机驱动1602液晶屏程序

时间:11-29 来源:互联网 点击:

数 名: void Write_1602_data(uchar gdata)

* 函数功能: 写数据

* 入口参数: gdata--数据

* 返 回: 无

*******************************************************************************/

/*----------- 写数据 -------------*/

void Write_1602_data(uchar gdata)

{

if(Chk_1602_busy()) //写数据必须是在LCD空闲模式下才能写

{

LCD_RS=1; //选择数据

LCD_RW=0; //选择写

PORTC=gdata;

LCD_EN=1; //使能

Delay_US(30);

LCD_EN=0;

Delay_US(10);

}

}

/******************************************************************************

* 函 数 名: void INIT_1602(void)

* 函数功能: 初始化1602LCD

* 入口参数: 无

* 返 回: 无

*******************************************************************************/

/*-----------1602初始化函数-------------*/

void INIT_1602(void)

{

Delay_Ms(15);

Write_1602_command(0x38,0); //设置16X2显示,5X7点阵,8位数据传送,不检测忙信号

Delay_Ms(5);

Write_1602_command(0x38,0);

Delay_Ms(5);

Write_1602_command(0x38,0); //设置16X2显示,5X7点阵,8位数据传送,不检测忙信号

Write_1602_command(0x38,1); //设置16X2显示,5X7点阵,8位数据传送,检测忙信号

Write_1602_command(0x08,1); //关闭显示、无光标、检测忙信号

Write_1602_command(0x01,1); //清屏、光标归位、AC=0、检测忙信号

Write_1602_command(0x06,1); //显示光标右移位置、检测忙信号

Write_1602_command(0x0c,1); //显示功能开、无光标

}

/******************************************************************************

* 函 数 名: void Display_1602_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata)

* 函数功能: 显示字符串

* 入口参数: gadd_start-列号,uchar gline-行号,glength-数据长度,pdata-数组元素

* 返 回: 无

*******************************************************************************/

/*-----------显示字符串-------------*/

// 列号 行号 数据长度 数组元素

void Display_1602_string(uchar gadd_start,uchar gline,uchar glength,uchar *pdata)

{

uchar gaddress;

uchar *pdat;

uchar gcount=0;

if(!gline) //第0行

{ gaddress=0x80+gadd_start; } //地址对应

else

{ gaddress=0xc0+gadd_start; } //第一行

for(;gcount {

Write_1602_command(gaddress,1); //设定数据地址

Write_1602_data(*pdata); //取设定地址里的数据

gaddress++;

pdata++;

}

}

/******************************************************************************

* 函 数 名: void Display_1602(uchar x,uchar y,uchar gdata)

* 函数功能: 指定位置显示字符

* 入口参数: x-起始地址横坐标,y-起始地址纵坐标,gdata-要显示的字符

* 返 回: 无

*******************************************************************************/

/*-----------指定位置显示字符-------------*/

void DispChar_XY_1602(uchar x,uchar y,uchar gdata)

{

uchar gaddress;

if(!y)

{ gaddress=0x80+x; }

else

{ gaddress=0xc0+x; }

Write_1602_command(gaddress,1); //设定数据地址

Write_1602_data(gdata);

}

/*-----------指定位置显示数字-------------*/

void DispNum_XY_1602(uchar x,uchar y,uchar gdata)

{

uchar gaddress;

if(!y)

{ gaddress=0x80+x; }

else

{ gaddress=0xc0+x; }

Write_1602_command(gaddress,1); //设定数据地址

Write_1602_data(gdata+0x30);

}

/*-----------清屏-------------*/

void Clear_Display(void)

{

Write_1602_command(0x01,1);

Delay_Ms(5);

}

void Open_Disp(void)

{

Write_1602_command(0x0c,1);

}

void Close_Disp(void)

{

Write_1602_command(0x08,1);

}

/*-----------显示光标-------------*/

void Display_Cursor(void)

{

Write_1602_command(0x06,1); //显示光标右移位置、检测忙信号

Write_1602_command(0x0D,1); //显示功能开、无光标

}

/*-----------1602端口初始化-------------*/

void Port_1602_Init(void)

{

PORTA=0x00;

CMCON0=0xff;

ANSEL = 0x00;

TRISA=0X00;

PORTC=0x00;

TRISC=0x00;

LCDCON=0x00;

}

Display.h如下:

#ifndef __Display_H__

#define __Display_H__

#define uchar unsigned char

#define uint unsigned int

#define TESTBIT(a,b

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top