单片机控制LCD1602显示英文句子

LCD1602简介:

  • 1602字符型液晶也叫1602液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。字符型液晶,能够同时显示16x02即32个字符。

  • 它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

--------------------------在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

仿真图像:

在这里插入图片描述

C语言程序:

/*-----------------------------------------------
内容:通过标准程序静态显示字符
引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>

sbit RS = P2^4;   //定义端口 
sbit RW = P2^5;
sbit EN = P2^6;

#define RS_CLR RS=0 
#define RS_SET RS=1

#define RW_CLR RW=0 
#define RW_SET RW=1 

#define EN_CLR EN=0
#define EN_SET EN=1

#define DataPort P0
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
    while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{  
    while(t--)
    {
        //大致延时1mS
        DelayUs2x(245);
        DelayUs2x(245);
    }
}
/*------------------------------------------------
判忙函数
------------------------------------------------*/
bit LCD_Check_Busy(void) 
{ 
    DataPort= 0xFF; 
    RS_CLR; 
    RW_SET; 
    EN_CLR; 
    _nop_(); 
    EN_SET;
    return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
写入命令函数
------------------------------------------------*/
void LCD_Write_Com(unsigned char com) 
{  
    // while(LCD_Check_Busy()); //忙则等待
    DelayMs(5);
    RS_CLR; 
    RW_CLR; 
    EN_SET; 
    DataPort= com; 
    _nop_(); 
    EN_CLR;
}
/*------------------------------------------------
写入数据函数
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data) 
{ 
    //while(LCD_Check_Busy()); //忙则等待
    DelayMs(5);
    RS_SET; 
    RW_CLR; 
    EN_SET; 
    DataPort= Data; 
    _nop_();
    EN_CLR;
}

/*------------------------------------------------
清屏函数
------------------------------------------------*/
void LCD_Clear(void) 
{ 
    LCD_Write_Com(0x01); 
    DelayMs(5);
}
/*------------------------------------------------
写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) 
{     
    if (y == 0) 
    {     
        LCD_Write_Com(0x80 + x);     //表示第一行
    }
    else 
    {      
        LCD_Write_Com(0xC0 + x);      //表示第二行
    }        
    while (*s) 
    {     
        LCD_Write_Data( *s);     
        s ++;     
    }
}
/*------------------------------------------------
写入字符函数
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) 
{     
    if (y == 0) 
    {     
        LCD_Write_Com(0x80 + x);     
    }    
    else 
    {     
        LCD_Write_Com(0xC0 + x);     
    }        
    LCD_Write_Data( Data);  
}
/*------------------------------------------------
初始化函数
------------------------------------------------*/
void LCD_Init(void) 
{
    LCD_Write_Com(0x38);    /*显示模式设置*/ 
    DelayMs(5); 
    LCD_Write_Com(0x38); 
    DelayMs(5); 
    LCD_Write_Com(0x38); 
    DelayMs(5); 
    LCD_Write_Com(0x38);  
    LCD_Write_Com(0x08);    /*显示关闭*/ 
    LCD_Write_Com(0x01);    /*显示清屏*/ 
    LCD_Write_Com(0x06);    /*显示光标移动设置*/ 
    DelayMs(5); 
    LCD_Write_Com(0x0C);    /*显示开及光标设置*/
}

/*------------------------------------------------
主函数[上面已经把显示功能封装好了,今后再写其他显示就直接调用]
------------------------------------------------*/ 
void main(void) 
{ 
    LCD_Init(); 
    LCD_Clear();//清屏
    while (1) 
    {  
        LCD_Write_Char(7,0,'o');//单引号在C语言中表示取字符的ASCII码,这一行代码也可以写为:  LCD_Write_Char(7,0,0x6F);
        LCD_Write_Char(8,0,'k');
        LCD_Write_String(1,1,"I LOVE YOU!");//双引号在C语言中表示取字符串的ASCII码
        while(1);
    }
}

PROTEUS仿真工程文件、HEX文件和C语言程序文件:

所有相关文件

  • 9
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是基于51单片机LCD1602滚动显示英文代码的示例: ```c #include <reg51.h> #include <intrins.h> #define LCD_RS P2_0 // LCD1602的RS引脚 #define LCD_RW P2_1 // LCD1602的RW引脚 #define LCD_E P2_2 // LCD1602的E引脚 #define LCD_DATA P0 // LCD1602的数据总线 void DelayUs2x(unsigned char t); void DelayMs(unsigned char t); void LCD_WriteCmd(unsigned char cmd); void LCD_WriteData(unsigned char dat); void LCD_Init(void); void LCD_Clear(void); void LCD_ShowString(unsigned char x,unsigned char y,unsigned char *str); void main(void) { unsigned char str[] = "This is a long English sentence that will be scrolled on the LCD1602. "; unsigned char i, j, k; LCD_Init(); // 初始化LCD1602 LCD_Clear(); // 清屏 while(1) { for(i = 0; i < sizeof(str) - 16; i++) { // 从0开始滚动 LCD_ShowString(0, 0, &str[i]); // 在第一行显示滚动的字符串 for(j = 0; j < 10; j++) { // 控制滚动速度 for(k = 0; k < 100; k++) { DelayMs(1); } } } } } void DelayUs2x(unsigned char t) { while(--t); } void DelayMs(unsigned char t) { while(t--) { DelayUs2x(245); DelayUs2x(245); } } void LCD_WriteCmd(unsigned char cmd) { LCD_RS = 0; LCD_RW = 0; LCD_DATA = cmd; LCD_E = 1; _nop_(); LCD_E = 0; } void LCD_WriteData(unsigned char dat) { LCD_RS = 1; LCD_RW = 0; LCD_DATA = dat; LCD_E = 1; _nop_(); LCD_E = 0; } void LCD_Init(void) { LCD_WriteCmd(0x38); // 8位数据接口,2行显示,5x7点阵字符 LCD_WriteCmd(0x0c); // 显示开,光标关,不闪烁 LCD_WriteCmd(0x06); // 光标右移,字符不动 LCD_WriteCmd(0x01); // 清屏 } void LCD_Clear(void) { LCD_WriteCmd(0x01); // 清屏 } void LCD_ShowString(unsigned char x,unsigned char y,unsigned char *str) { unsigned char i = 0; if(x > 15 || y > 1) { return; } LCD_WriteCmd(0x80 + y * 0x40 + x); // 设置光标位置 while(str[i] != '\0') { LCD_WriteData(str[i++]); // 逐个显示字符 } } ``` 在这个示例代码中,我们使用了基于51单片机LCD1602驱动程序,通过控制LCD1602的光标位置和显示内容来实现滚动显示。具体来说,我们定义了一个长的英文句子,并且将它逐个滚动显示LCD1602的第一行。通过调整 `DelayMs()` 函数的参数可以控制滚动速度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿鹿学术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值