📄 ex5_5.c
字号:
//程序:ex5_5.c
//功能:LCD液晶显示程序,采用8位数据接口
#include <REG51.H>
#include <INTRINS.H> //库函数头文件,代码中引用了_nop_()函数
// 定义控制信号端口
sbit RS=0xb0; //P3.0
sbit RW=0xb1; //P3.1
sbit E= 0xb2; //P3.2
// 声明调用函数
void lcd_w_cmd(unsigned char com); //写命令字函数
void lcd_w_dat(unsigned char dat); //写数据函数
unsigned char lcd_r_start(); //读状态函数
void int1(); //LCD初始化函数
void delay(unsigned char t); //可控延时函数
void delay1() //软件实现延时函数,5个机器周期
void main() //主函数
{
unsigned char lcd[]="SHEN ZHEN";
unsigned char i;
P1=0xff; // 送全1到P0口
int1(); // 初始化LCD
delay(255);
lcd_w_cmd(0x83); // 设置显示位置
delay(255);
for(i=0;i<9;i++) // 显示字符串
{
lcd_w_dat(lcd[i]);
delay(200);
}
while(1); // 原地踏步
}
//函数名:delay
//函数功能:采用软件实现可控延时
//形式参数:延时时间控制参数存入变量t中
//返回值:无
void delay(unsigned char t)
{
unsigned char j,i;
for(i=0;i<t;i++)
for(j=0;j<50;j++);
}
//函数名:delay1
//函数功能:采用软件实现延时,5个机器周期
//形式参数:无
//返回值:无
void delay1()
{
_nop_();
_nop_();
_nop_();
}
//函数名:int1
//函数功能:lcd初始化
//形式参数:无
//返回值:无
void int1()
{
lcd_w_cmd(0x3c); // 设置工作方式
lcd_w_cmd(0x0e); // 设置光标
lcd_w_cmd(0x01); // 清屏
lcd_w_cmd(0x06); // 设置输入方式
lcd_w_cmd(0x80); // 设置初始显示位置
}
//函数名:lcd_r_start
//函数功能:读状态字
//形式参数:无
//返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙
unsigned char lcd_r_start()
{
unsigned char s;
RW=1; //RW=1,RS=0,读LCD状态
delay1();
RS=0;
delay1();
E=1; //E端时序
delay1();
s=P1; //从LCD的数据口读状态
delay1();
E=0;
delay1();
RW=0;
delay1();
return(s); //返回读取的LCD状态字
}
//函数名:lcd_w_cmd
//函数功能:写命令字
//形式参数:命令字已存入com单元中
//返回值:无
void lcd_w_cmd(unsigned char com)
{
unsigned char i;
do { // 查LCD忙操作
i=lcd_r_start(); // 调用读状态字函数
i=i&0x80; // 与操作屏蔽掉低7位
delay(2);
} while(i!=0); // LCD忙,继续查询,否则退出循环
RW=0;
delay1();
RS=0; // RW=1,RS=0,写LCD命令字
delay1();
E=1; //E端时序
delay1();
P1=com; //将com中的命令字写入LCD数据口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
//函数名:lcd_w_dat
//函数功能:写数据
//形式参数:数据已存入dat单元中
//返回值:无
void lcd_w_dat(unsigned char dat)
{
unsigned char i;
do { // 查忙操作
i=lcd_r_start(); // 调用读状态字函数
i=i&0x80; // 与操作屏蔽掉低7位
delay(2);
} while(i!=0); // LCD忙,继续查询,否则退出循环
RW=0;
delay1();
RS=1; // RW=1,RS=0,写LCD命令字
delay1();
E=1; // E端时序
delay1();
P1=dat; // 将dat中的显示数据写入LCD数据口
delay1();
E=0;
delay1();
RW=1;
delay(255);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -