📄 16021.c
字号:
#include "REG51.h"
#include "intrins.h" //包含此头文件可直接操作内核的寄存器以及一些定义好的宏
// this file for MCU I/O port or the orther`s hardware config
// for LCD Display
// Define for the port use by LCD Driver
sbit LCD_EP=P2^7;
sbit LCD_RW=P2^6;
sbit LCD_RS=P2^5;
#define LCD_Data_BUS_Out P1
#define LCD_Data_BUS_In P1
code unsigned char LCD_InitialCode[]={0x30,0x30,0x30,0x38,0x01,0x06,0x0c};
//========================================================================
// 函数: void LCD_DataWrite(unsigned char Data)
// 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
// 参数: Data 写入的数据
// 返回: 无
//========================================================================
void LCD_DataWrite(unsigned char Data)
{
unsigned int Read_Dat=0;
LCD_EP = 0; //EP、RS端口为低,RW为高
LCD_RS = 0;
LCD_RW = 1;
do{
LCD_Data_BUS_In = 0xff;
LCD_EP = 1;
Read_Dat = LCD_Data_BUS_In&0x80;
LCD_EP = 0;
}while(Read_Dat!=0); //读状态字并判断是否可进行读写操作
LCD_RW = 0; //EP RW to Low
LCD_RS = 1; //RS Hight
LCD_Data_BUS_Out = Data;
LCD_EP = 1; //EP to Hight
LCD_EP = 0; //EP to low
}
//========================================================================
// 函数: void LCD_RegWrite(unsigned char Command)
// 描述: 写一个字节的数据至LCD中的控制寄存器当中
// 参数: Command 写入的数据(byte)
// 返回: 无
//========================================================================
void LCD_RegWrite(unsigned char Command)
{
unsigned int Read_Dat=0;
LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
LCD_RS = 0;
LCD_RW = 1;
do{
LCD_Data_BUS_In = 0xff;
LCD_EP = 1;
Read_Dat = LCD_Data_BUS_In&0x80;
LCD_EP = 0;
}while(Read_Dat!=0); //读状态字并判断是否可进行读写操作
LCD_RW = 0; //RW to Low,表为写指令
LCD_Data_BUS_Out = Command;
LCD_EP = 1; //EP to Hight
LCD_EP = 0;
}
//========================================================================
// 函数: unsigned char LCD_DataRead(void)
// 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
// 参数: 无
// 返回: 读出的数据,低八位有效(byte)
//========================================================================
unsigned char LCD_DataRead(void)
{
unsigned char Read_Dat=0;
LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
LCD_RS = 0;
LCD_RW = 1;
do{
LCD_Data_BUS_In = 0xff;
LCD_EP = 1;
Read_Dat = LCD_Data_BUS_In&0x80;
LCD_EP = 0;
}while(Read_Dat!=0); //读状态字并判断是否可进行读写操作
LCD_RS = 1; //RS置高,表为读数据
LCD_EP = 1; //EP to Hight
Read_Dat = LCD_Data_BUS_In; //读出数据
LCD_EP = 0;
return Read_Dat;
}
//========================================================================
// 函数: unsigned char LCD_StatusRead(void)
// 描述: 从LCD中的显示缓冲RAM当中读一个字节的显示数据
// 参数: 无
// 返回: 读出的数据,低八位有效(byte)
//========================================================================
unsigned char LCD_StatusRead(void)
{
unsigned char Read_Dat=0;
LCD_EP = 0; //EP、RS置低,RW置高,表为读状态字
LCD_RS = 0;
LCD_RW = 1;
LCD_Data_BUS_In = 0xff;
LCD_EP = 1;
Read_Dat = LCD_Data_BUS_In; //读状态字
LCD_EP = 0;
return Read_Dat;
}
//========================================================================
// 函数: void LCD_Init(void)
// 描述: LCD初始化程序,在里面会完成LCD初始所需要设置的许多寄存器,具体如果
// 用户想了解,建议查看DataSheet当中各个寄存器的意义
// 参数: 无
// 返回: 无
// 备注:
// 版本:
// 2007/11/14 First version
//========================================================================
//延时程序
void TimeDelay(int Time)
{
int i;
while(Time > 0)
{
for(i = 0;i < 800;i++)
{
_nop_();
}
Time --;
}
}
void LCD_Init(void)
{
unsigned char uiTemp=0,i;
unsigned char * Point;
//LCD驱动所使用到的端口的初始化
Point = (unsigned char *)LCD_InitialCode; //获取初始化序列数据的首地址
LCD_EP = 0;
LCD_RS = 0;
LCD_RW = 0;
for(i=0;i<4;i++)
{
uiTemp = *Point++;
LCD_Data_BUS_Out = uiTemp;
LCD_EP = 1; //EP to Hight
LCD_EP = 0; //EP to Hight
TimeDelay(4); //延一定的时间,一般要求4.5ms以上就可以,没有那么严格的了
}
LCD_RegWrite(*Point++);
LCD_RegWrite(*Point++);
LCD_RegWrite(*Point++);
}
void main()
{
unsigned char uiTemp=0;
unsigned char * String_s;
LCD_Init();
uiTemp = LCD_StatusRead(); //无意义,只是测试读状态字的子程序
String_s = "LCD1602 Demo";
LCD_RegWrite(0x80); //设置地址为第一行第一个字符的位置
while(*String_s!=0) //显示字符串
{
LCD_DataWrite(*String_s);
String_s++;
}
String_s = " Mzdesign";
LCD_RegWrite(0xc0); //设置地址为第二行第一个字符的位置
while(*String_s!=0)
{
LCD_DataWrite(*String_s);
String_s++;
}
//以下仅为测试使用,测试读数据程序的功能
uiTemp = LCD_DataRead(); //读数据
LCD_RegWrite(0x80); //设置地址后再读数据
uiTemp = LCD_DataRead();
while(1)
{
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -