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

发布者:Meshulun最新更新时间:2020-05-07 来源: eefocus关键字: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 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include


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是右平移

    }

}

关键字:LCD液晶显示屏  字符  左右移动 引用地址:LCD液晶显示屏显示字符左右移动的程序

上一篇:单片机控制LCD1602显示屏动态显示字符串
下一篇:单片机控制LCD1602显示英文句子

推荐阅读最新更新时间:2024-11-10 12:30

【C51】源码 5 -- LCD 1602 显示字符
LCD 1602,正式说法叫 LCM 1602(包括了一些外围电路),一般用来显示简单的字符,也可以通过自定义的方式 造字 。 刚学会基本的字符显示,仅仅是字符显示就大量应用了各种指令格式,姑且在这个阶段写个程序,总结一下: 程序功能:在 LCD 正中央显示字符: Hello World 、 By Fate 注:LCD 1602 的使用: http://gaebolg.blog.163.com/blog/static/198269068201231665524137/ 附上源码:(初出茅庐,难免有写的不好的地方,仅作备份之用,欢迎指点,喷子退散 ) /*----------------------------------
[单片机]
Stm32串口发送字符串数据
ps:把字符串分成字节循环发送 /* *说明: *PA0:KEY1;PA1:KEY2; *PA2:LED1;PA3:LED2; *PA9:USART1_TX;PA10:USART1_RX */ #include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_crc.h #include system_stm32f10x.h #include stdio.h #define PUTCHAR_PROTOTYPE int __io_putchar(in
[单片机]
STM32串口发送字符串的几种写法
STM32用USART发送字符串 代码含义是: 当接收引脚有数据时,状态寄存器的USART_FLAG_RXNE就会为1,此时USART_GetFlagStatus(USART1,USART_FLAG_RXNE)的返回值就为1(SET),若无数据则为RESET。 代码常见写法,及其接收数据效果 1 这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。 2 这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字
[单片机]
STM32串口发送<font color='red'>字符</font>串的几种写法
USB字符串描述符
在USB中,字符串描述符是可选的,也就是属于可有可无的角色,USB并没有强制规定必须有,但是一般产品是有的,至少能说明生产厂家、产品信息等等,要不然这个产品看谁还敢用。   如果设备没有字符串描述符,那么在设备描述符、配置描述符、接口描述符等处的字符串索引值必须为0,要不然在枚举过程中,USB主机会尝试去获取字符串描述符,而刚好你又没有,那么枚举就会失败,所以必须指定为0。   字符串描述符使用UNICODE编码,可以支持多种语言,所以字符串描述符首先要指定语言ID,语言ID代码可以参考这个网站: http://www.usb.org/developers/docs/USB_LANGIDs.pdf ,例如:简体中文的ID
[嵌入式]
2416开发记录八: platform驱动之LED(字符设备)
上一篇介绍了platform misc驱动的写法。因为misc设备是字符设备的一种,也不需要很多的函数来注册,因此作为练手。这一篇写一个led的字符设备驱动。你会发现platform驱动只是在字符设备驱动上又封装了一下而已(个人理解)。 led设备 和上一篇的led misc驱动设备差不多,但是多了一些自己的注释。方便以后学习。makefile文件基本一致,这里就不发了。 //my2416PlatformLedDev2.c #include #include #include #include #include #include #include #include #include #include #include
[单片机]
MSP430F247串口发送字符串并接受PC机发来的并送回电脑显示
//****************************************************************************** // MSP430x24x Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK // // 实验效果说明:首先发送一个数组的数据到PC,然后接受PC发送来的数据,在发送到 // PC机上。 // Baud rate divider with 1MHz = 1MHz/9600 = ~104.2 // ACLK = n/a, MCLK = SMCLK = CALxxx_1MHZ = 1MHz // //
[单片机]
【51单片机】1602自定义字符原理及示例(”汉“、爱心及摄氏度示例)
原理 设置1602屏幕的对比度的时候我们能够看到5*8的点阵,其实液晶显示的都是字符的字模(下图),而CGROM里面都是已经定义好的,只能读不能写,而RAM是可以读写的所以我们只要将我们自定义的字符字模写入对应的CGRAM中就好,CGRAM一共有8个对应的地址分别为(0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78),因为每个字模对应8行所以每写完一个字模以后要加8,按照指令写入CGRAM时需要加0x40所以对应地址就如上了,然而其实CGRAM的实际地址是0x00-0x07所以在后面写入数据的时候需要按照实际地址来写入。CGROM中的字模也是同样的原理 字模代码:1602显示模式为5*
[单片机]
【51单片机】1602自定义<font color='red'>字符</font>原理及示例(”汉“、爱心及摄氏度示例)
单片机常用函数(滤波、字符处理等)
//函数名:filter //功能描述:平均值滤波 //输入参数: //int iput:要滤波的数据 //int buf :滤波缓存数组指针 //uint *count:滤波计数器指针 //uint lenght:滤波深度 //long int *sum:缓存数组中所有数据的和指针 //返回值:滤波后的平均值 //================================================================================== int filter(int iput,int buf ,uint *count,uint lenght,long int *sum) { int a
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved