📄 yejing.c
字号:
/*-------------------------------------------------------------------
LCD1602.c 1602用的函数
作者:liunian
邮箱:liunian_leon@sohu.com
日期:2008.7.13
版本:V1.0 适合初学者使用
-------------------------------------------------------------------*/
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit EN=P1^7; //使能信号
sbit RW=P1^6; //读写控制信号
sbit RS=P1^5; //数据命令选择端口
#define D_port P0 //传送数据的端口设为P0,以上端口根据实际硬件电路图可做修改
/****************延时函数******************************/
delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
{
for(j=0;j<60;j++){;}
}
}
/****************查询液晶是否忙*************************/
Checkbusy()
{
D_port=0xff; //P0全部置1,可以查询判断P0口状态,读取液晶的命令
RS=0;
RW=1;
EN=1;
_nop_(); //读液晶命令时各控制位的状态几时序
while(D_port&0x80) //判断最高位状态,最高位是液晶忙的状态位
{
EN=0;
_nop_();
_nop_();
EN=1;
_nop_();
_nop_();
} //如果液晶忙,则循环查询
EN=0;
}
/****************写数据到液晶***************************/
D_write(uchar a)
{
Checkbusy(); //检查忙标志位
D_port=a;
RS=1;
RW=0;
EN=1; //写数据各控制位的值既对应的时序
_nop_();
_nop_();
_nop_(); //发送数据,此处是发送到P0口,程序前已经定义
EN=0;
}
/****************写指令到液晶***************************/
C_write(uchar a)
{
Checkbusy(); //检查忙标志位
D_port=a;
RS=0;
RW=0;
EN=1; //写指令各控制位的值既对应的时序
_nop_();
_nop_();
_nop_(); //发送指令,此处是发送到P0口,程序前已经定义
EN=0;
}
/***************液晶初始化******************************/
Initial()
{
D_port=0;
delay(20);
C_write(0x38);
delay(10);
C_write(0x38);
delay(10);
C_write(0x38);
delay(10);
Checkbusy();
C_write(0x38);
Checkbusy();
C_write(0x08); //关闭显示
Checkbusy();
C_write(0x01); //清屏
Checkbusy();
C_write(0x06); //显示光标右移设置
Checkbusy();
C_write(0x0c); //显示开,光标不显示,不闪烁
delay(5);
} //根据1602初始化的指令顺序来初始化LCD,相关初始化步骤可查阅相关资料
/***************设定显示位置函数************************/
setpos(uchar posx,uchar posy)
{
posx=posx&0xf; //将显示在第几位置转为二十六进制,每行总共16个位置
posy=posy&0x1; //设置显示在第几行
C_write(posx|posy*0x40+0x80); //设置位置命令最高位必须为一,所以要加0x80
}
/***************显示一个字符子程序**********************/
displaychar(uchar x,uchar y,uchar a)
{
Checkbusy(); //检查忙标志位
setpos(x,y); //设置显示位置
D_write(a); //将要显示的数据写到液晶
}
/***************显示一串字符串**************************/
displaystring(uchar x,uchar y,unsigned char code *string)
{
uchar length=0; //定义一个字符串长度
Checkbusy();
while(string[length]!='\0') //字符串是以'\0'结束的,因此只要每结束就显示下一字符
{
displaychar(x,y,string[length++]); //显示一个字符子程序
x++; //液晶显示的位置+1
}
}
/*********************主程序 ***************************************/
main()
{
Initial();
displaychar(5, 0, 0x31);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -