LCD1602的简单显示
来源:互联网 发布:淘宝优惠券潜伏机器人 编辑:程序博客网 时间:2024/06/16 06:37
/*=========================================================
1602液晶显示的实验例子
-------------------------------------------------
| DB4-----P0.4 | RW-------P2.1
| DB5-----P0.5 | RS-------P2.2
| DB6-----P0.6 | E--------P2.0
| DB7-----P0.7 |
---------------------------------------------------
LCD1602的简简单显示
=========================================================*/
#include <at89x52.h>
#include <BoeBot.h>
#define LCM_RW P2_1 //定义引脚
#define LCM_RS P2_2
#define LCM_E P2_0
#define LCM_Data P0
#define Busy 0x80 //用于检测LCM状态字中的Busy标识
/*------------------------------------------
子函数声明
------------------------------------------*/
void Write_Data_LCM(unsigned char WDLCM);
void Write_Command_LCM(unsigned char WCLCM,BuysC);
void Read_Status_LCM(void);
void LCM_Init(void);
void Set_xy_LCM(unsigned char x, unsigned char y);
void Display_List_Char(unsigned char x, unsigned char y, unsigned char *s);
void main(void)
{
LCM_Init(); //LCM初始化
delay_nms(5);//延时片刻(可不要)
while(1)
{
Display_List_Char(0, 0, "www.CSMZXY.COM");
Display_List_Char(1, 0, "Robot-AT89S52");
}
}
/*=====================================
函数名:Read_Status_LCM()
功 能: 忙检测函数
======================================*/
void Read_Status_LCM(void)
{
unsigned char read=0;
LCM_RW = 1;
LCM_RS = 0;
LCM_E = 1;
LCM_Data = 0xff;
do
{
read = LCM_Data;
}
while(read & Busy);
LCM_E = 0;
}
/*-------------------------------------------
函数名:Write_Data_LCM ( )
功 能: 对LCD 1602写数据
--------------------------------------------*/
void Write_Data_LCM(unsigned char WDLCM)
{
Read_Status_LCM(); //检测忙
LCM_RS = 1;
LCM_RW = 0;
LCM_Data &= 0x0f;
LCM_Data |= WDLCM&0xf0;
LCM_E = 1; //若晶振速度太高可以在这后加小的延时
LCM_E = 1; //延时
LCM_E = 0;
WDLCM = WDLCM<<4;
LCM_Data &= 0x0f;
LCM_Data |= WDLCM&0xf0;
LCM_E = 1;
LCM_E = 1; //延时
LCM_E = 0;
}
/*-------------------------------------------
函数名:Write_Command_ LCM ( )
功 能: 对LCD 1602写指令
--------------------------------------------*/
void Write_Command_LCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC)
Read_Status_LCM(); //根据需要检测忙
LCM_RS = 0;
LCM_RW = 0;
LCM_Data &= 0x0f;
LCM_Data |= WCLCM&0xf0;//传输高四位
LCM_E = 1;
LCM_E = 1;
LCM_E = 0;
WCLCM = WCLCM<<4; //传输低四位
LCM_Data &= 0x0f;
LCM_Data |= WCLCM&0xf0;
LCM_E = 1;
LCM_E = 1;
LCM_E = 0;
}
/*-------------------------------------------
函数名:LCM_Init()
功 能: 对LCD 1602初始化
--------------------------------------------*/
void LCM_Init(void) //LCM初始化
{
LCM_Data = 0;
Write_Command_LCM(0x28,0); //三次显示模式设置,不检测忙信号
delay_nms(15);
Write_Command_LCM(0x28,0);
delay_nms(15);
Write_Command_LCM(0x28,0);
delay_nms(15);
Write_Command_LCM(0x28,1); //显示模式设置,开始要求每次检测忙信号
Write_Command_LCM(0x08,1); //关闭显示
Write_Command_LCM(0x01,1); //显示清屏
Write_Command_LCM(0x06,1); //显示光标移动设置
Write_Command_LCM(0x0C,1); //显示开及光标设置
}
/*-------------------------------------------
函数名:Set_xy_LCM ()
功 能:设定显示坐标位置
--------------------------------------------*/
void Set_xy_LCM(unsigned char x, unsigned char y)
{
unsigned char address;
if( x == 0 )
address = 0x80+y;
else
address = 0xc0+y;
Write_Command_LCM(address,1);
}
/*-------------------------------------------
函数名:Display_List_Char()
功 能:按指定位置显示一串字符
--------------------------------------------*/
void Display_List_Char(unsigned char x, unsigned char y, unsigned char *s)
{
Set_xy_LCM(x,y);
while(*s)
{
LCM_Data = *s;
Write_Data_LCM(*s);
s++;
}
}
- LCD1602的简单显示
- LCD1602的显示
- 用 LCD1602 显示的时钟
- 用 LCD1602 显示的秒表
- LCD1602显示
- PIC18F4520的ADC与LCD1602显示程序
- LCD1602显示小车的运动方向
- DE2-115 LCD1602字符的显示
- 基于51单片机的LCD1602显示
- 用LCD1602实现简单的数字时钟
- LCD1602显示汉字
- LCD1602显示中文汉字
- 百米计时器LCD1602显示
- PIC LCD1602显示
- verilog简单驱动LCD1602
- AVRmeg16单片机实现按键控制LCD1602的数据显示
- 51-DHT11实现温湿度的检测显示于Lcd1602
- LCD1602芯片的使用——简单易懂
- servlet学习笔记8——ServletContext的讲解和使用
- android组件
- taglist插件,VIM官网文档
- x264去方块滤波函数解析(一)
- 找出机器注册名字
- LCD1602的简单显示
- QWaitCondition.wait 出错
- Flash Builder 4.6 安装svn 插件
- struts2中的s标签解析
- 二维数组遍历及求和
- 原生态Ajax——字符串两次切割
- win7 下 cmd 运行 sqlplus 无法初始化 Oracle 调用界面
- CSS(Cascading Style Sheet )级联样式表总结
- linux RTC 驱动