历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2020年12月29日 | 1602的各种显示效果(静态 动态 移动 滚动显示程序)

2020-12-29 来源:51hei

1602的各种显示效果,包括静态显示,动态显示,滚动显示等


单片机源程序如下:

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

  名称:LCD1602

  内容:通过标准程序移屏滚动显示字符

  引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK

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

#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()); //忙则等待

RS_CLR;

RW_CLR;

EN_SET;

DataPort= com;

_nop_();

EN_CLR;

}

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

              写入数据函数

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

void LCD_Write_Data(unsigned char Data)

{

while(LCD_Check_Busy()); //忙则等待

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,'o');

  LCD_Write_Char(8,0,'k');

  LCD_Write_String(1,1,"xxxxxxxxx");

while (1)

{  


  DelayMs(200);

  LCD_Write_Com(0x18);//左平移画面 0x1C 是右平移

}

}


推荐阅读

史海拾趣

Etco Inc公司的发展小趣事

面对数字化转型的浪潮,Etco Inc公司主动拥抱变革,积极推进数字化转型。公司利用大数据、云计算等先进技术优化生产流程和管理模式,提高了生产效率和管理水平。同时,Etco还加强了与客户的数字化连接和交流,提供了更加便捷和高效的服务体验。这些举措使Etco在数字化时代中保持了领先地位并实现了持续增长。

Global Power Technology Co., Ltd公司的发展小趣事
首先检查电源插头是否插紧,电源插座是否有电;若电源正常,可能是电路板故障,需联系专业维修人员检查并更换电路板。
GPD Optoelectronics Corp公司的发展小趣事
检查冰箱门密封条是否老化或变形,如有损坏需更换新的密封条;同时定期清理密封条上的污垢和杂物,保持密封条的清洁和弹性。
Amaze Electronics Pte Ltd公司的发展小趣事

随着业务的不断发展,Amaze Electronics意识到国际市场的巨大潜力。于是,公司积极寻求与国际知名电子企业的合作,共同开发新产品。通过与这些企业的深度合作,Amaze Electronics不仅获得了先进的技术支持,还成功将产品打入国际市场,实现了业务的快速拓展。

中电熊猫(CEC)公司的发展小趣事

在智能制造领域,中电熊猫也取得了显著进展。2010年,中电熊猫开始研发液晶面板工厂的智能运储系统,打破了以往依赖国外供应商的局面。到了2011年,中电熊猫成功完成了国内首条高世代液晶面板智能运储系统的研发,并逐渐成为国内该系统的主要供应商。此外,中电熊猫还在液晶玻璃生产线系统等方面实现了国产化研发,提升了整体产业的竞争力。

昆泰(CHRONTEL)公司的发展小趣事

1982年,Dennis Gillings博士在美国北卡罗莱纳州创立了Quintiles Transnational Inc.(昆泰)。成立之初,昆泰只是一家为药企提供数据服务的美国本土公司。凭借其独特的数据处理能力和对市场的敏锐洞察,昆泰迅速在行业内树立了良好的口碑。

问答坊 | AI 解惑

uboot start.S 搬运代码部看不懂

在start.s中, copy_loop: ldmia r0!, {r3-r10}   stmia r1!, {r3-r10}   cmp r0, r2    ble copy_loop    这里搬运过程,是以8个寄存器为单位的,(也就是8*4字节一次), 我看不懂的是,如果_START ...…

查看全部问答>

WinCE 5.0 startup.s 硬件仿真

首先强调下,我只是刚入门的。 我把PB下的startup.s移到ADS下 自己新建的project。make没有问题了。````之后,我就不知道要怎么验证了,请大家指导下,谢谢…

查看全部问答>

YLP2440核心板内存能扩到256M吗

YLP2440核心板内存能扩到256M吗. YLP2440核心板带有64M RAM, 由于项目需要扩到256M,请问这个好能实现吗,是不是仅添加两根地址线就可以了? 2440的BANK为128M,这样需要2个BANK,硬件上需要那些改动?…

查看全部问答>

单片机设计,嵌入式开发,电子项目设计

郑州单片机设计,嵌入式开发,电子项目设计 郑州智软科技公司 http://www.zhiruancn.com/ 为你提供定制化,个性化的电子产品设计方案。 包含需求定制----产品设计----产品加工等环节。 如有需要请联系 0371-66623272 或者QQ:1242335301 …

查看全部问答>

2440芯片用J-Link调试,在AXD下怎样设置

请问各位高手,2440芯片用J-Link调试,在AXD下怎样设置…

查看全部问答>

寻求合作,基于三星S3C2410的WinCE5设备,解锁、安装中文系统和自己的App,有朋友愿意接这样的项目吗?

基于三星S3C2410的WinCE5设备,解锁、安装中文系统和自己的App,有朋友愿意接这样的项目吗? 谢谢!…

查看全部问答>

msp430用捕获模式能测的最高频率

用msp430f1611的捕获模式来测量方波的频率时发现:能正确测量的最高频率不超过200k。我用的是8M晶振。请问:用什么办法可以测量更高的频率呢,最好能到1M Hz?…

查看全部问答>

Launchpad实现IPv6协议栈

我尽量给大家带来些新东西,一位叫做XPG 的国外网友花了好几周的时间用launchpad做个件大家很难想到的事情,他在G2553上移植了一个Ipv6的协议栈。 他使用了一个 ENC28J60 的网络MAC/PHY 模块,以他的说法是cheap off的打折货。 这位Launchpad的网 ...…

查看全部问答>