Lcd 1602

#ifndef _LCD_H_
#define _LCD_H_
 
#include <reg52.h>
#include "../delay/delay.h"
 
#define LCDPORT P0
#define LCD_WRITE_DATA 1
#define LCD_WRITE_COM 0
 
sbit RS = P2^4;
sbit RW = P2^5;
sbit E = P2^6;
 
extern void lcd_write(unsigned char byte, unsigned char flag);
extern void lcd_init();
extern void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte);
extern void lcd_dis_str(unsigned char x, unsigned char y, unsigned char *src);
 
#endif
 
 
 
 
#include "lcd.h"
 
/*------------------------------------------------
                  LCD初始化函数
------------------------------------------------*/
void lcd_init()
{
    delay_ms(15);
 
    lcd_write(0x38,LCD_WRITE_COM);         //设置8位数据接口两行显示(5 * 7 点阵字符)
    delay_ms(15);
    lcd_write(0x38,LCD_WRITE_COM);
    delay_ms(15);
    lcd_write(0x38,LCD_WRITE_COM);
    delay_ms(15);
    lcd_write(0x38,LCD_WRITE_COM);
    delay_ms(15);
 
    lcd_write(0x08,LCD_WRITE_COM);         //关闭显示,关闭光标和闪烁
    delay_ms(5);                         
    lcd_write(0x01,LCD_WRITE_COM);         //清屏
    delay_ms(5);
    lcd_write(0x06,LCD_WRITE_COM);         //设置指针方式,画面平移
    delay_ms(5);
    lcd_write(0x0c,LCD_WRITE_COM);         //设置指针方式,画面不平移
    delay_ms(5);
}
 
/*------------------------------------------------
                  写入命令函数
------------------------------------------------*/
void lcd_write(unsigned char byte, unsigned char flag)
{
    if(1 == flag)
    {
        RS = LCD_WRITE_DATA;      //选择输入数据为数据
    }
    else
    {
        RS = LCD_WRITE_COM;          //选择输入数据为指令
    }
                    
    RW = 0;                          //写
    E = 1;                          //选中LCD
    LCDPORT = byte;               
    delay_us(5);                  //稳定性考虑
    E = 0;                          //失能LCD
}
 
/*------------------------------------------------
                  显示一个字节
------------------------------------------------*/
void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte)
{
      if(0 == y)//确定显示的列(0 - 1)
    {
        lcd_write(0x80 + x - 1, LCD_WRITE_COM);
        lcd_write(byte, LCD_WRITE_DATA);
    }
    else
    {
       lcd_write(0x80 + 0x40 + x - 1, LCD_WRITE_COM);
        lcd_write(byte, LCD_WRITE_DATA);
    }
}
 
/*------------------------------------------------
                   显示字符串
------------------------------------------------*/
void lcd_dis_str(unsigned char x, unsigned char y, unsigned char *src)
{
    if(y == 0)//确定显示的列(0 - 1)
    {
        lcd_write(x + 0x80,LCD_WRITE_COM);
    }
    else
    {
        lcd_write(x + 0x80 + 0x40,LCD_WRITE_COM);
    }    
    while(*src != '\0')
    {
        lcd_write(*src,LCD_WRITE_DATA);
        src++;
    }    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值