📄 _main.c
字号:
#include <reg51.h>
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
#define TRUE 1
#define FALSE 0
#define nop _nop_()
#define PtData P1 //定义连接口线,
#define PtContr P3
sbit RS=PtContr^5;
sbit RW=PtContr^6;
sbit E=PtContr^7;
void InitialLcd();
void WriteLcdInstr(uchar);
void WriteLcdData(uchar);
void CheckLcdBusy();
uchar HexToDdram(uchar);
void PutChar(uchar x,uchar y,uchar c);
void PutStr(uchar x,uchar y,uchar *str);
void Delay(unsigned int);
main()
{
Delay(1000);
InitialLcd();
PutStr(2,0,"www.znmcu.cn");
PutStr(1,1,"4 Bits Mode!!!");
while(1);
}
//----------------LCD1602函数---------------------//
//---初始化
void InitialLcd()
{Delay(600);//延时应大于15ms,不同的晶振使需要修改,本程序再6M下调试通过
RS=0;
RW=0;nop;
E=0;nop;
E=1;nop;
PtData=0x20;//
nop;
E=0;
Delay(200);//延时应大于4.1ms
E=1;nop;
PtData=0x20;//
nop;
E=0;
Delay(5);//延时应大于100us
E=1;nop;
PtData=0x20;//
nop;
E=0;//设置4位操作;
WriteLcdInstr(0x01);//清屏
WriteLcdInstr(0x28);//设置4位操作,1行显示,5x8
WriteLcdInstr(0x02);//光标归位
WriteLcdInstr(0x06);//AC自动加1,画面不动
WriteLcdInstr(0x0f);//0x0f:光标闪烁开;
}
//---写指令
void WriteLcdInstr(uchar Temp)
{CheckLcdBusy();
RS=0;
RW=0;
E=0;nop;
E=1;nop;
PtData=Temp;
nop;
E=0;nop;
E=1;nop;
PtData=(Temp<<4);
nop;
E=0;nop;
}
//---写数据
void WriteLcdData(uchar Temp)
{
CheckLcdBusy();
RS=1;
RW=0;
E=0;nop;
E=1;nop;
PtData=Temp;
nop;
E=0;nop;
E=1;nop;
PtData=(Temp<<4);
nop;
E=0;nop;
}
//---查忙
void CheckLcdBusy()
{uchar Temp,t;
PtData=0xff;
RW=1;
RS=0;nop;
E=0;nop;
do
{nop;
E=1;nop;
Temp=PtData;
nop;nop;nop;
E=0;nop;nop;
E=1;nop;
t=PtData;
nop;nop;nop;
E=0;nop;nop;
Temp&=0x80;
}while(Temp==0x80);
}
//---delay
void Delay(unsigned int N)
{unsigned int i;
for(i=0;i<N;i++){i=i;}
}
void PutChar(uchar x,uchar y,uchar c)
{
if(y)
WriteLcdInstr(0xc0+x);
else
WriteLcdInstr(0x80+x);
WriteLcdData(c);
}
void PutStr(uchar x,uchar y,uchar *str)
{
uchar i=0;
while(str[i])
{
PutChar(x+i,y,str[i++]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -