LCD液晶显示屏显示字符左右移动的程序

lcd_1602 指令汇总

0x28 设置 162 显示, 57 点阵, 4 位数据接口
0x38 设置 162 显示, 57 点阵, 8 位数据接口
0x01 清屏 , 光标复位到地址 00H 位置
0x02 光标归原点, DDRAM 中内容不变,地址计数器 AC=0; (此时地址为 0x80 )
0x0F 开显示,显示光标,光标闪烁
0x0e 开显示,显示光标,光标不闪烁
0x0c 开显示,不显示光标
0x08 只开显示
0x06 地址加一,当写入数据的时候光标右移设定显示屏或光标移动方向指令
0x18 字符全部左移一格,但光标不动
0x1c 字符全部右移一格,但光标不动
0x10 光标左移 1 格,且 AC 值减 1
0x14 光标右移 1 格,且 AC 值加 1

C语言程序代码:

/*-----------------------------------------------

------------------------------------------------*/
#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();
    LCD_Write_Char(7,0,'0');
    LCD_Write_Char(8,0,'k');
    LCD_Write_String(1,1,"Welcome China HangZhou");
    while(1)
    {
          DelayMs(200);
          LCD_Write_Com(0x18);//左平移画面0x1c是右平移
    }
}



  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿鹿学术

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

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

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

打赏作者

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

抵扣说明:

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

余额充值