lcd中c语言移动程序,51单片机驱动LCD1602移动显示C语言源程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

uchar code dis1[] = {"    CHINESE     "};

uchar code dis2[] = {"    NEW YEAR    "};

/*******************************************************************/

/*                                                                                                                                  */

/* 延时子程序                                                                                                                  */

/*                                                                                                                                  */

/*******************************************************************/

void delay(int ms)

{

int i;

while(ms--)

{

for(i = 0; i< 250; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

/*******************************************************************/

/*                                                                                                                                  */

/*检查LCD忙状态                                                                                                             */

/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。                                      */

/*                                                                                                                                  */

/*******************************************************************/

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result = (bit)(P0&0x80);

LCD_EN = 0;

return result;

}

/*******************************************************************/

/*                                                                                                                                  */

/*写指令数据到LCD                                                                                                          */

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                                                                   */

/*                                                                                                                                   */

/*******************************************************************/

void lcd_wcmd(uchar cmd)

{

while(lcd_busy());

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

P0 = cmd;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN = 1;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN = 0;

}

/*******************************************************************/

/*                                                                                                                                  */

/*写显示数据到LCD                                                                                                          */

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                                                                     */

/*                                                                                                                                  */

/*******************************************************************/

void lcd_wdat(uchar dat)

{

while(lcd_busy());

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN = 1;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN = 0;

}

/*******************************************************************/

/*                                                                                                                                  */

/*  设定显示位置                                                                                                              */

/*                                                                                                                                  */

/*******************************************************************/

void lcd_pos(uchar pos)

{

lcd_wcmd(pos|0x80);      //数据指针=80+地址变量

}

/*******************************************************************/

/*                                                                                                                                  */

/*  LCD初始化设定                                                                                                           */

/*                                                                                                                                  */

/*******************************************************************/

void lcd_init()

{

delay(15);                     //等待LCD电源稳定

lcd_wcmd(0x38);          //16*2显示,5*7点阵,8位数据

delay(5);

lcd_wcmd(0x38);

delay(5);

lcd_wcmd(0x38);

delay(5);

lcd_wcmd(0x0c);          //显示开,关光标

delay(5);

lcd_wcmd(0x06);          //移动光标

delay(5);

lcd_wcmd(0x01);          //清除LCD的显示内容

delay(5);

}

/*******************************************************************/

/*                                                                                                                                  */

/*  清屏子程序                                                                                                                 */

/*                                                                                                                                  */

/*******************************************************************/

void lcd_clr()

{

lcd_wcmd(0x01);          //清除LCD的显示内容

delay(5);

}

/*******************************************************************/

/*                                                                                                                                  */

/*  闪动子程序                                                                                                                 */

/*                                                                                                                                  */

/*******************************************************************/

void flash()

{

delay(600);                     //控制停留时间

lcd_wcmd(0x08);            //关闭显示

delay(200);                    //延时

lcd_wcmd(0x0c);            //开显示

delay(200);

lcd_wcmd(0x08);            //关闭显示

delay(200);                     //延时

lcd_wcmd(0x0c);            //开显示

delay(200);

}

/*******************************************************************/

/*                                                                                                                                  */

/*  主程序                                                                                                                       */

/*                                                                                                                                  */

/*******************************************************************/

main()

{

uchar i,j;

delay(10);

lcd_init();                          //初始化LCD

while(1)

{

lcd_clr();

lcd_pos(0x10);               //设置显示位置为第一行第17列

i = 0;

while(dis1[i] != '\0')

{                                      //显示字符"    CHINESE     "

lcd_wdat(dis1[i]);

i++;

}

lcd_pos(0x50);              //设置显示位置为第二行第17列

i = 0;

while(dis2[i] != '\0')

{

lcd_wdat(dis2[i]);         //显示字符"    NEW YEAR    "

i++;

}

/*for(j=0;j<16;j++)          //左移动16格

{

lcd_wcmd(0x18);           //字符同时左移一格

delay(100);                   //控制移动时间

}

flash(); */                           //闪动二次

for(j=0;j<29;j++)               //向左移动29格

{

lcd_wcmd(0x18) ;            //字符同时左移一格

delay(100) ;                    //控制移动时间

}

for(j=0;j<13;j++)         //向右移动13格

{

lcd_wcmd(0x1C) ;          //字符同时左移一格

delay(100) ;                   //控制移动时间

}

flash() ;                            //闪动二次

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值