找回密码
 立即注册

QQ登录

只需一步,快速开始

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

lcd1602.c文件

[复制链接]
跳转到指定楼层
楼主
ID:184807 发表于 2017-7-31 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
#include <intrins.h>
#define INT8U  unsigned char
#define INT16U unsigned int
sbit RS = P1^0;        //寄存器选择线
sbit RW = P1^1;        //读/写控制线
sbit EN = P2^5;        //使能控制
//-----------------------------------------------------------------
// 延时
//-----------------------------------------------------------------
void delay_ms(INT16U ms)
{
    INT8U i; while(ms--) for(i = 0; i < 120; i++);
}

//-----------------------------------------------------------------
// 忙等待
//-----------------------------------------------------------------
void Busy_Wait()
{
    INT8U LCD_Status;                        //液晶状态字节变量
    do
    {
         P0 = 0xFF;
        EN = 0;RS = 0;RW = 1;
        EN = 1;LCD_Status = P0;
        EN = 0;

    } while (LCD_Status & 0x80);            //液晶忙继续循环
}

//-----------------------------------------------------------------
// 写LCD命令
//-----------------------------------------------------------------
void Write_LCD_Command(INT8U cmd)
{
    Busy_Wait();
    EN = 0;RS = 0;RW = 0;
    P0 = cmd;
    EN = 1;_nop_();EN = 0;     

}

//-----------------------------------------------------------------
// 发送数据
//-----------------------------------------------------------------
void Write_LCD_Data(INT8U dat)
{
    Busy_Wait();
    EN = 0;RS = 1;RW = 0;
    P0 = dat;
    EN = 1;_nop_();EN = 0;   
}

//-----------------------------------------------------------------
// LCD初始化
//-----------------------------------------------------------------
void Initialize_LCD()
{
    Write_LCD_Command(0x38); delay_ms(1);    //置功能,8位,双行,5*7
    Write_LCD_Command(0x01); delay_ms(1);    //清屏
    Write_LCD_Command(0x06); delay_ms(1);    //字符进入模式:屏幕不动,字符后移
    Write_LCD_Command(0x0C); delay_ms(1);    //显示开,关光标
}

//-----------------------------------------------------------------
// 在指定位置显示字符串
//-----------------------------------------------------------------
void LCD_ShowString(INT8U r, INT8U c,INT8U *str)
{
    INT8U i = 0;
    code INT8U DDRAM[] = {0x80,0xC0};        //1602LCD两行的起始DDRAM地址
    Write_LCD_Command(DDRAM[r] | c);        //设置显示起始位置

    for ( i = 0; str[i] && i < 16 ;i++)        //输出字符串
      Write_LCD_Data(str[i]);

    for (; i < 16; i++)                         //不足一行时用空格填充
      Write_LCD_Data(' ');
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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