跪求帮完善程序,加个移屏

2019-03-24 18:04发布

/*****************************************************************
* 文件名:Lcd1602.c
* 描  述:1602液晶驱动文件
* 版本号:1.0.0
*****************************************************************/
// 配置头文件
#include <reg52.h>
#include <intrins.h>
#include "LCD1602.h"

void delayms(unsigned int j)
{
        unsigned int i;
        while(j --)
        {
                for(i = 0; i < 1200; i ++);
        }
}


// LCD1602引脚配置
#define LCD1602_DB    P0

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


// 5us驱动函数延时专用
#define delay_5us()     {_nop_();_nop_();_nop_();_nop_();_nop_();}

//// 驱动函数声明:写数据与写命令
//void LCD1602_Write_Cmd(unsigned char);
//void LCD1602_Write_Data(unsigned char);
//


/*****************************************************************
函数名:        LCD1602_Init
描述:            LCD1602 初始化

入口参数:  无
出口参数:   无
返回值:        无
*****************************************************************/
void LCD1602_Init()
{
    LCD1602_Write_Cmd(0x38);            //  8位数据,两行,5 * 7点阵
    LCD1602_Write_Cmd(0x38);            //  8位数据,两行,5 * 7点阵
                LCD1602_Write_Cmd(0x38);            //  8位数据,两行,5 * 7点阵
                LCD1602_Write_Cmd(0x38);            //  8位数据,两行,5 * 7点阵
    // 三种显示方式
    LCD1602_Write_Cmd(0x0c);           //  开显示但无标
    // LCD1602_Write_Cmd(0x0e);         //  开显示,有光标但光标不闪烁
    //LCD1602_Write_Cmd(0x0f);            //  开显示,有光标且光标闪烁
        
    LCD1602_Write_Cmd(0x06);            //  显示地址指针自加1
    LCD1602_Write_Cmd(0x01);            //  清屏
                LCD1602_Clear();
}

/*****************************************************************
函数名:        LCD1602_ShowStr
描述:            在指定的行,指定的位置显示指定的字符串

入口参数:  x :显示位置   y:1 or 2   s: 字符串地址
出口参数:   无
返回值:        无
*****************************************************************/

void LCD1602_ShowStr(unsigned char x,unsigned char y, unsigned char *s)
{
    if(y == 1)                          //  写第一行x位置
    {
        LCD1602_Write_Cmd(0x80 + x);
    }
    else                                //  写第二行x位置
    {
        LCD1602_Write_Cmd(0xc0 + x);
    }
    while(*s)                           //  逐个写入字符
    {
        LCD1602_Write_Data(*s);
        s ++ ;
    }     
}

/*****************************************************************
函数名:        LCD1602_Clear
描述:            LCD1602 清屏

入口参数:  无
出口参数:   无
返回值:        无
*****************************************************************/
void LCD1602_Clear(void)
{
    LCD1602_Write_Cmd(0x01);           // 写入清屏命令
    delayms(10);
}

// LCD底层驱动:写命令
void LCD1602_Write_Cmd(unsigned char cmd)
{  
    LCD1602_RS = 0;                         // 选择指令寄存器  
    LCD1602_RW = 0;                         // 选择写
                LCD1602_EN = 1;                         // 使能LCD
                delay_5us();
    LCD1602_DB = cmd;                       // 写入命令值   
    delayms(10);     
    LCD1602_EN = 0;                         //释放总线
   
}

// LCD底层驱动:写数据
void LCD1602_Write_Data(unsigned char Data)
{
    LCD1602_RS  = 1;                        // 选择数据寄存器
    LCD1602_RW  = 0;                        // 选择写
                LCD1602_EN  = 1;                        // 使能LCD
    delay_5us();
    LCD1602_DB  = Data;                     // 写入数据值
    delayms(10);
    LCD1602_EN  = 0;                        //释放总线
   
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。