📄 1602_液晶显示技术.c
字号:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
unsigned int hour,minute,second,count;
sbit RS = P0^7; //Pin4,寄存器选择。等于1为数据;等于0为指令。
sbit RW = P0^6; //Pin5,读写操作选择。等于1为读;等于0为写。
sbit E = P0^5; //Pin6,输入端,使能信号
#define Data P2 //数据输出端口
char data FirstLine[]=" ";
char data SecondLine[]=" ";
/******************************************************************/
/* 函数声明 */
/******************************************************************/
void DelayUs(unsigned char us) //delay us
{
unsigned char uscnt;
uscnt=us>>1; //Crystal frequency in 12MHz
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms) //delay Ms
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
/*****************************************************************/
void WriteCommand(unsigned char c)
{
DelayMs(5); //short delay before operation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //short delay before operation
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高4位为0xc
else
p=pos+0x80; //是第二行则命令代码高4位为0x8
WriteCommand (p); //write command
WriteData (c); //write data
}
/*********************************************************************/
void ShowString (unsigned char line,char *ptr)
{
unsigned char Line,i;
Line=line<<4; //???????????????????????
for (i=0;i<16;i++)
ShowChar (Line++,*(ptr+i)); //循环显示16个字符
}
/*********************************************************************/
/* */
/* RS R/W | DB7 DB6 DB5 DB4__DB3 DB2 DB1 DB0 */
/* */
/*********************************************************************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //功能设置,功能是设置工作方式工(初始化指令? //00_001(DL)_NF**,D/L=1为8位数据接口? // N=1为两行显示,
// F=0为5X7点阵字符
WriteCommand(0x38); //为什么要写两次"WriteCommand(0x38); "?,如果只写一次会出现只有第一行显示且看不清
WriteCommand(0x06); //输入方式设置,功能是设置光标和画面移动方式
//00_0000_01(I/D)s,I/D=1为数据读写AC自动增一? // S=0为数据读写操作后画面不动
WriteCommand(0x0c); //显示开关控制,功能是设置显示,光标及闪烁开或关
//00_0000_1DCB,D为显示开关,为1表示开,
// C为光标开关,为0表示关,
// B为闪烁开关,为0表示关
WriteCommand(0x01); //显示清屏功能是清DDRAM和AC值,00_0000_0001
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
void main(void)
{
InitLcd();
DelayMs(15);
sprintf(FirstLine," Made by LZT "); //the first line," Made by LZT ""0123456789ABCDEF"
ShowString(0,FirstLine);
sprintf(SecondLine,"Xihua University"); //the second line,"Xihua University""GHIJKLMNOPQRSTUV"
ShowString(1,SecondLine);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -