📄 lcd1602.txt
字号:
unsigned char BUSY;//用来判断是否忙,0x80为忙
void delay1ms(unsigned int i) //用于液晶显示的延时1ms子程序
{ //当i取uint,y取uchar,y=150,晶振为12M时,比较准确
unsigned char y;
while(i--)
{
for(y=0;y<150;y++);
}
}
void Read(void)//读状态
{
RS=0;RW=1;
En=0; // 此处的“EN” 反相后接到液晶的使能端,时序很重要,最好严格按照来做
P0=0xff; // 经试验,为必须的,没有的话,可能侥幸会正常,
// 但有时出了什么问题都不懂
BUSY=(P0&0x80);
En=0;RW=0;
}
void WriteI(unsigned char i) //写指令
{
do Read();
while(BUSY==0x80);
RS=0;RW=0;
P0=i; //写指令时是先赋值再使能
En=0;
En=1;RW=1;
}
void InitWriteI(unsigned char i)//初始时写指令,不用判忙
{
RS=0;RW=0;
P0=i;
En=0;
En=1;RW=1;
}
void WriteD(unsigned char i)//写数据
{
do Read();
while(BUSY==0x80);
RS=1;RW=0;
P0=i;
En=0;
En=1;RW=1;
}
void Init() //严格按照液晶的文档来写的,所以会有刚开始的3个delay1ms()函数
{
unsigned char i;
delay1ms(15);
InitWriteI(0x38);//显示模式设置
delay1ms(5);
InitWriteI(0x38);
delay1ms(5);
InitWriteI(0x38);
WriteI(0x38);
WriteI(0x08);//关闭显示
WriteI(0x01);//显示清屏
WriteI(0x06);//显示光标移动设置
WriteI(0x0f);//显示开及光标设置
for(i=5;i<=13;i++)//显示频率字符
{
WriteI(0x80|i);//指定要写的位置,要或0x80
WriteD(buffer_KHz[i-5]);//在当前位置写入数据
}
for(i=6;i<=11;i++)//显示相位字符
{
WriteI(0x80|i);//指定要写的位置,要或0x80
WriteD(buffer_pha[i-6]);//在当前位置写入数据
}
for(i=0x40;i<=0x45;i++)//显示频率字符
{
WriteI(0x80 + i);//指定要写的位置,要或0x80
WriteD(buffer_KHz[i-0x40]);//在当前位置写入数据
}
for(i=0x46;i<=0x4b;i++)//显示相位字符
{
WriteI(0x80 + i);//指定要写的位置,要或0x80
WriteD(buffer_pha[i-0x46]);//在当前位置写入数据
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -