📄 lcd1602.c
字号:
/*******************************************************************************
功能:液晶LM016L显示,2X16显示。
说明:显示两行字符串,words1[],words2[]。第一行地址0~15,第二行地址64~79
制作:电子科大huang_api@sina.com
*******************************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
///////控制引脚RS为P32. RW为P33. E为P34//////////
sbit RS = P3^2;
sbit RW = P3^3;
sbit E = P3^4;
uchar code words1[] = {"welcome!"};
uchar code words2[] = {"0123456789"};//0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()
/****************************延时函数***************************
名称:delay()
输入:uchar m
输出:无
***************************************************************/
void delay(uchar ms)
{ // 延时子程序
uchar i;
while(ms--)
{
i=250;
while(i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/******************************LCD状态检测函数**************************************
名称:lcd_state()
功能:lcd状态忙碌判断
参数:P2口为数据口
输入:无
输出:返回状态标志state位
************************************************************************************/
bit lcd_state(void)
{ // 测试LCD忙碌状态
bit state;
RS = 0;//command
RW = 1;//read
E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
state = (bit)(P2 & 0x80);
E = 0;
return state;
}
/******************************LCD指令写入函数**************************************
名称:lcd_w_cmd()
功能:写指令到LCD数据口P2
参数:P2口为数据口
输入:待写指令
输出:无
************************************************************************************/
void lcd_w_cmd(uchar cmd)
{ // 写入指令数据到LCD
while(lcd_state());
RS = 0;//command
RW = 0;//write
E = 0;
_nop_();
_nop_();
P2 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
E = 0;
}
/******************************LCD状态检测函数**************************************
名称:lcd_adder()
功能:lcd显示地址设置
参数:P2口为数据口
输入:一字节待设置的显示地址长度0~15
输出:无
************************************************************************************/
void lcd_adder(uchar adder)
{ //设定显示位置
lcd_w_cmd(adder | 0x80);
}
/******************************LCD数据写入函数**************************************
名称:lcd_w_date()
功能:写数据到LCD数据口P2
参数:P2口为数据口
输入:一字节待写显示数据
输出:无
************************************************************************************/
void lcd_w_date(uchar dat)
{ //写入字符显示数据到LCD
while(lcd_state());
RS = 1;//date
RW = 0;//write
E = 0;
P2 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
E = 1;
_nop_();
_nop_();
_nop_();
_nop_();
E = 0;
}
/******************************LCD初始化函数**************************************
名称:lcd_init()
功能:初始化LCD模块
参数:初始化指令
输入:无
输出:无
************************************************************************************/
void lcd_init(void)
{ //LCD初始化设定
lcd_w_cmd(0x38); //
delay(1);
lcd_w_cmd(0x0c); //
delay(1);
lcd_w_cmd(0x06); //
delay(1);
lcd_w_cmd(0x01); //清除LCD的显示内容
delay(1);
}
/******************************LCD显示函数**************************************
名称:lcd_display()
功能:显示words1[],words2[]字符串!
参数:P2口为数据口,*word1,*word2为待显示字符串指针,adder1,adder2为两行显示起始地址
输入:待显示的数据的指针,显示地址
输出:无
*******************************************************************************/
lcd_display(uchar *word1,uchar *word2,uchar adder1,uchar adder2)
{
uchar i = 0;
lcd_adder(adder1); //0~15 // 设置显示位置为第一行的第5个字符
while(word1[i] != '\0')
{ // 显示字符
lcd_w_date(word1[i]);
i++;
}
lcd_adder(adder2);//64~79 // 设置显示位置为第二行第二个字符
i = 0;
while(word2[i] != '\0')
{
lcd_w_date(word2[i]); // 显示字符
i++;
}
}
///////////////////////////MAIN函数//////////////////////////////////
main()
{
lcd_init(); // 初始化LCD
delay(10);
lcd_display(&words1,&words2,16,48); //LCD显示
while(1) ; //waiting
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -