LCD与单片机的连接电路图和LCD显示程序.docx

上传人:b****2 文档编号:20124110 上传时间:2023-04-25 格式:DOCX 页数:8 大小:43.78KB
下载 相关 举报
LCD与单片机的连接电路图和LCD显示程序.docx_第1页
第1页 / 共8页
LCD与单片机的连接电路图和LCD显示程序.docx_第2页
第2页 / 共8页
LCD与单片机的连接电路图和LCD显示程序.docx_第3页
第3页 / 共8页
LCD与单片机的连接电路图和LCD显示程序.docx_第4页
第4页 / 共8页
LCD与单片机的连接电路图和LCD显示程序.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

LCD与单片机的连接电路图和LCD显示程序.docx

《LCD与单片机的连接电路图和LCD显示程序.docx》由会员分享,可在线阅读,更多相关《LCD与单片机的连接电路图和LCD显示程序.docx(8页珍藏版)》请在冰豆网上搜索。

LCD与单片机的连接电路图和LCD显示程序.docx

LCD与单片机的连接电路图和LCD显示程序

LCD与单片机的连接电路图和LCD显示程序/LCD测试程序

3.2.5LCD显示电路

液晶显示器简称LCD显示器,它是利用液晶经过处理后能改变光线的传输方向的特性来显示信息的。

要使用点阵型LCD显示器,必须有相应的LCD控制器、驱动器来对LCD显示器进行扫描、驱动,以及一定空间的ROM和RAM来存储写入的命令和显示字符的点阵。

现在往往将LCD控制器、驱动器、RAM、ROM和LCD显示器连接在一起,称为液晶显示模块。

液晶显示模块是一种常见的人机界面,在单片机系统中的应用极其广泛。

液晶显示模块既可以显示字符,又可以显示简单的图形。

本系统采用的是1602的LCD接口。

1602是一种点阵字符型液晶显示模块,可以显示两行共32个字符。

根据LCD型号的不同,所需要的背光电阻大小会不同,可自行调节。

本系统采用的LCD为RT-1602C,其主要引脚的功能如下:

RS:

数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器。

RW:

读/写选择端,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时,可以写入指令或者显示地址;当RS为低电平、RW为高电平时,可以读忙信号;当RS为高电平、RW为低电平时,可以写入数据。

E:

使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

图3-9LCD显示电路

LCD测试程序

#include<>

/********IO引脚定义***********************************************************/

sbitLCD_RS=P2^7;//定义引脚

sbitLCD_RW=P2^6;

sbitLCD_E=P2^5;

/********宏定义***********************************************************/

#defineLCD_DataP0

#defineBusy0x80//用于检测LCD状态字中的Busy标识

/********数据定义*************************************************************/

unsignedcharcodeuctech[]={"Happyeveryday"};

unsignedcharcodenet[]={""};

/********函数声明*************************************************************/

voidWriteDataLCD(unsignedcharWDLCD);//写数据

voidWriteCommandLCD(unsignedcharWCLCD,BuysC);//写命令

unsignedcharReadDataLCD(void);//读数据

unsignedcharReadStatusLCD(void);//读状态

voidLCDInit(void);//初始化

voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);//相应坐标显示字节内容

voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData);//相应坐标开始显示一串内容

voidDelay5Ms(void);//延时

voidDelay400Ms(void);//延时

/***********主函数开始********************************************************/

voidmain(void)

{

Delay400Ms();//启动等待,等LCD讲入工作状态

LCDInit();//初始化

Delay5Ms();//延时片刻(可不要)

DisplayListChar(0,0,uctech);

DisplayListChar(1,5,net);

ReadDataLCD();//测试用句无意义

while

(1);

}

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

voidWriteDataLCD(unsignedcharWDLCD)

{

ReadStatusLCD();//检测忙

LCD_Data=WDLCD;

LCD_RS=1;

LCD_RW=0;

LCD_E=0;//若晶振速度太高可以在这后加小的延时

LCD_E=0;//延时

LCD_E=1;

}

/***********写指令********************************************************/

voidWriteCommandLCD(unsignedcharWCLCD,BuysC)//BuysC为0时忽略忙检测

{

if(BuysC)ReadStatusLCD();//根据需要检测忙

LCD_Data=WCLCD;

LCD_RS=0;

LCD_RW=0;

LCD_E=0;

LCD_E=0;

LCD_E=1;

}

/***********读数据********************************************************/

unsignedcharReadDataLCD(void)

{

LCD_RS=1;

LCD_RW=1;

LCD_E=0;

LCD_E=0;

LCD_E=1;

return(LCD_Data);

}

/***********读状态*******************************************************/

unsignedcharReadStatusLCD(void)

{

LCD_Data=0xFF;

LCD_RS=0;

LCD_RW=1;

LCD_E=0;

LCD_E=0;

LCD_E=1;

while(LCD_Data&Busy);//检测忙信号

return(LCD_Data);

}

/***********初始化********************************************************/

voidLCDInit(void)

{

LCD_Data=0;

WriteCommandLCD(0x38,0);//三次模式设置,不检测忙信号

Delay5Ms();

WriteCommandLCD(0x38,0);

Delay5Ms();

WriteCommandLCD(0x38,0);

Delay5Ms();

WriteCommandLCD(0x38,1);//显示模式设置,开始要求每次检测忙信号

WriteCommandLCD(0x08,1);//关闭显示

WriteCommandLCD(0x01,1);//显示清屏

WriteCommandLCD(0x06,1);//显示光标移动设置

WriteCommandLCD(0x0C,1);//显示开及光标设置

}

/***********按指定位置显示一个字符*******************************************/

voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData)

{

Y&=0x1;

X&=0xF;//限制X不能大于15,Y不能大于1

if(Y)X|=0x40;//当要显示第二行时地址码+0x40;

X|=0x80;//算出指令码

WriteCommandLCD(X,0);//这里不检测忙信号,发送地址码

WriteDataLCD(DData);

}

/***********按指定位置显示一串字符*****************************************/

voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode*DData)

{

unsignedcharListLength;

ListLength=0;

Y&=0x1;

X&=0xF;//限制X不能大于15,Y不能大于1

while(DData[ListLength]>=0x20){//若到达字串尾则退出

if(X<=0xF){//X坐标应小于0xF

DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符

ListLength++;

X++;

}

}

}

/***********短延时********************************************************/

voidDelay5Ms(void)

{

unsignedintTempCyc=5552;

while(TempCyc--);

}

/***********长延时********************************************************/

voidDelay400Ms(void)

{

unsignedcharTempCycA=5;

unsignedintTempCycB;

while(TempCycA--){

TempCycB=7269;

while(TempCycB--);

}

}

LCD与单片机连接的引脚并不是固定的,如有不同只需要在程序里改一下引脚即可。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1