找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7979|回复: 0
打印 上一主题 下一主题
收起左侧

单片机控制LCD1602字符在第二行进行滚动显示的设置

[复制链接]
跳转到指定楼层
楼主
ID:610877 发表于 2019-9-27 08:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//主函数main.c
#include<reg51.h>
#include"lcd.h"

u8 Disp[]="i want you yes  do  a  b c";


void Delay10ms(unsigned int c) ;

void main(void)
{
       u8 i;
       LcdInit();               
                //--写第二行
        LcdWriteCom(0xC0); //设置坐标在第二行  想要在第二行显示数据,必须再次定位指针的位置,即使在lcd.c中进行了指针定位
        for(i=0; i<26; i++)
        {
                LcdWriteData(Disp[ i]);
        }

        LcdWriteCom(0x07); //设置每写一次整屏右移
        while(1)
        {                        
                LcdWriteCom(0xC0); //设置坐标在第二行  
                for(i=0; i<26; i++)
                {
                        LcdWriteData(Disp[ i]);
                        Delay10ms(100);
                }
               
        }                                
}  
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

        //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }      
}


//lcd.c

#include"lcd.h"

void Lcd1602_Delay1ms(u16 c)
{
    u8 a, b;
    for(; c > 0; c--)
        {
            for(b = 199; b > 0; b--)
                for(a = 1; a > 0; a--);
        }
}
#ifndef LCD1602_4PINS
void LcdInit()
{
          LcdWriteCom(0x38);               //开显示,显示一行
    LcdWriteCom(0x0c);              //开显示不显示指针
    LcdWriteCom(0x06);             //写一个指针加1
    LcdWriteCom(0x01);            //清屏
    LcdWriteCom(0x80);           //设置数据指针起点
         // LcdWriteCom(0x80+0x40);                 //将指针放在第二行首位
}
#else
void LcdInit()
{
    LcdWriteCom(0x32);              //将8位总线转为4位总线
    LcdWriteCom(0x2c);             //在4位线下的初始化,两行
    LcdWriteCom(0x0C);            //开显示不显示指针
    LcdWriteCom(0x06);           //写一个指针加1
    LcdWriteCom(0x01);          //清屏
    LcdWriteCom(0x80);               //设置数据指针起点
        // LcdWriteCom(0x80+0x40);                 //将指针放在第二行首位
}
#endif


#ifndef LCD1602_4PINS
void LcdWriteCom(u8 dat)
{
    LCD1602_E = 0;              //使能
    LCD1602_RS = 0;            //选择发送命令
    LCD1602_RW = 0;           //选择写入
    LCD1602_DATAPINS = dat;  //放入命令
    Lcd1602_Delay1ms(1);    //等待数据稳定
    LCD1602_E = 1;         //写入时序
    Lcd1602_Delay1ms(5);  //保持时间
    LCD1602_E = 0;
}
#else
void LcdWriteCom(u8 dat)
{
    LCD1602_E = 0;              //使能清零
    LCD1602_RS = 0;            //选择写入命令
    LCD1602_RW = 0;           //选择写入

    LCD1602_DATAPINS = dat;  //传送高四位
    Lcd1602_Delay1ms(1);    //等待数据稳定

    LCD1602_E = 1;         //写入时序
    Lcd1602_Delay1ms(5);  //保持时间
    LCD1602_E = 0;

    LCD1602_DATAPINS = dat << 4; //传送低四位
    Lcd1602_Delay1ms(1);

    LCD1602_E = 1;         //写入时序
    Lcd1602_Delay1ms(5);  //保持时间
    LCD1602_E = 0;
}

#endif // LCD1602_4PINS


#ifndef LCD1602_4PINS
void LcdWriteData(u8 dat)
{
    LCD1602_E = 0;              //使能
    LCD1602_RS = 1;            //选择输入数据
    LCD1602_RW = 0;           //选择写入

    LCD1602_DATAPINS = dat;  //写入数据
    Lcd1602_Delay1ms(1);    //等待数据稳定

    LCD1602_E = 1;         //写入时序
    Lcd1602_Delay1ms(5);  //保持时间
    LCD1602_E = 0;
}
#else
void LcdWriteData(u8 dat)
{
    LCD1602_E = 0;              //使能清零
    LCD1602_RS = 1;            //选择写入数据
    LCD1602_RW = 0;           //选择写入

    LCD1602_DATAPINS = dat;  //传送高四位
    Lcd1602_Delay1ms(1);    //等待数据稳定

    LCD1602_E = 1;         //写入时序
    Lcd1602_Delay1ms(5);  //保持时间
    LCD1602_E = 0;

    LCD1602_DATAPINS = dat << 4; //传送低四位
    Lcd1602_Delay1ms(1);

    LCD1602_E = 1;         //写入时序
    Lcd1602_Delay1ms(5);  //保持时间
    LCD1602_E = 0;
}

#endif // LCD1602_4PINS



//lcd.h

#ifndef _lcd_H
#define _lcd_H

#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned int

//#define LCD1602_4PINS
#define LCD1602_DATAPINS  P0

sbit LCD1602_E =P2^7;
sbit LCD1602_RS=P2^6;
sbit LCD1602_RW=P2^5;

void LcdWriteData(u8 dat);
void LcdWriteCom(u8 dat);
void LcdInit();


#endif

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表