📄 c1602.c
字号:
#include <reg51.h>
#include <stdio.h>
#include <absacc.h>
// 1602控制引脚定义
sbit RS=P2^2;
sbit RW=P2^1;
sbit E=P2^0;
#define DataPort P0
#define Busy 0x80
//变量类型标识的宏定义
#define uchar unsigned char
#define uint unsigned int
//函数声明
void delay2Ms(void);
void delay100Ms(void);
void WriteData(uchar WDLCD);
void WriteCommand(uchar WCLCD,BusyC);
uchar ReadData(void);
uchar ReadStatus(void);
void LCDInit(void);
void DisplayOnechar(uchar X,uchar Y,uchar DData);
void DisplayListchar(uchar X,uchar Y,uchar code *DData);
//显示代码
uchar code cem[]={" Xuzhou institut"};
uchar code school[]={" Welcome to CEM "};
void main(void)
{
delay100Ms();
LCDInit();
DisplayListchar(0,0,cem);
DisplayListchar(0,1,school);
while(1);
}
void LCDInit(void)
{
DataPort=0;
WriteCommand(0x38,0); //显示模式设置(不测试忙信号)共三次
delay2Ms();
WriteCommand(0x38,0);
delay2Ms();
WriteCommand(0x38,0);
delay2Ms();
WriteCommand(0x01,1); // 显示清屏
delay2Ms();
WriteCommand(0x38,1); // 显示模式设置:16*2行,5*7点阵,8位数据接口
delay2Ms();
WriteCommand(0x06,1); //写指令06H,文字不动,光标自动右移
delay2Ms();
WriteCommand(0x0F,1); //;写指令0FH,显示ON,光标ON,闪烁ON.写指令0CH,显示ON,光标OFF,闪烁OFF
delay2Ms();
}
void WriteData(uchar WDLCD)
{
ReadStatus();
DataPort=WDLCD;
RS=1;
RW=0;
E=0;
E=0;
E=1;
E=1;
}
void WriteCommand(uchar WCLCD,BusyC) //BuysC为0时忽略忙检测
{
if(BusyC) ReadStatus();
DataPort=WCLCD;
RS=0;
RW=0;
E=0;
E=0;
E=1;
E=1;
}
//读忙状态
uchar ReadStatus(void)
{
DataPort=0xFF;
RS = 0;
RW = 1;
E=0;
E=0;
E=1;
E=1;
while (DataPort&Busy); //检测忙信号
return(DataPort);
}
//读数据
uchar ReadData(void)
{
RS = 1;
RW = 1;
E=0;
E=0;
E=1;
E=1;
return(DataPort);
}
//按指定位置显示一个字符
void DisplayOnechar(uchar X,uchar Y,uchar DData)
{
Y&=0x1;
X&=0xF; //限制X不能大于15,Y不能大于1
if (Y) X|=0x40; //当要显示第二行时地址码+0x40;
X|=0x80; //算出指令码
WriteCommand(X, 0); //这里不检测忙信号,发送地址码
WriteData(DData);
}
//按指定位置显示一串字符
void DisplayListchar(uchar X,uchar Y,uchar code *DData)
{
uchar ListLength;
ListLength=0;
Y&=0x1;
X&=0xF; //限制X不能大于15,Y不能大于1
while (ListLength<0x10) //若到达字串尾则退出
{
if (X <= 0xF) //X坐标应小于0xF
{
DisplayOnechar(X, Y, DData[ListLength]); //显示单个字符
ListLength++;
X++;
}
}
}
//2ms延时
void delay2Ms(void)
{
uint Temp = 2220;
while(Temp--);
}
//100ms延时
void delay100Ms(void)
{
uchar Temp1=5;
uint Temp2;
while(Temp1--)
{
Temp2=2000;
while(Temp2--);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -