文号
t18668
阅读
4260
回复
5
收藏
5
利用最少的连线操作LCD1602液晶屏程序(转)
2009/08/14
IP:广东
#define DPORT      PORTB    // 定义数据端口为B端口
#define DTRIS      TRISB        // 定义数据端口的方向
#define CTRIS_E  TRISC0    // 定义端口的方向
#define CTRIS_RS TRISC1    // 定义端口的方向
#define RS    RC1    
#define E     RC0

void LCD_WriteComm(unsigned int TheComm){
// 定义向LCD写一个指令字的函数
    CTRIS_RS = 0;        // 定义端口为写状态
    CTRIS_E = 0;        
    DTRIS = 0x00;        
    DPORT = TheComm;    // 把数据输出到端口,实际上只是高4位
    RS    = 0;
    E     = 0;
    E     = 0;            // 多了一个指令,是为了让信号电平有足够得时间稳定
    E     = 1;
    DPORT = TheComm<<4;    // 将数据的低4位移位到高4位,输出到端口
    RS    = 0;
    E     = 0;
    E     = 0;
    E     = 1;
}

void LCD_WriteDate(unsigned int Hang,unsigned int No,unsigned char TheDate){
// 定义向LCD的第Hang行的第No个位置,写字符TheDate
// Hang:0,1; No:0-15;
    unsigned char tmpi;
    tmpi = Hang*0x40+No+0x80;    // 计算地址指针
    LCD_NoBusy();
    CTRIS_RS = 0;        
    CTRIS_E = 0;        
    DTRIS = 0x00;        
    DPORT = tmpi;
    RS    = 0;
    E     = 0;
    E     = 0;
    E     = 1;
    DPORT = tmpi<<4;
    E     = 0;
    E     = 0;
    E     = 1;
    
    LCD_NoBusy();
    DTRIS = 0x00;            
    DPORT = TheDate;
    RS    = 1;        
    E     = 0;
    E     = 0;
    E     = 1;
    DPORT = TheDate<<4;
    E     = 0;
    E     = 0;
    E     = 1;
}

void LCD_NoBusy(){
    delay(2);
}

void LCD_init()
// 初始化LCD显示屏
{
    
    delay(20);            //1、延时大约20ms
    CTRIS_RS = 0;        
    CTRIS_E = 0;        
    DTRIS = 0x00;        
    DPORT = 0x30;
    RS    = 0;        
    E     = 0;
    E     = 0;
    E     = 1;
    delay(5);        
    DPORT = 0x30;
    RS    = 0;        
    E     = 0;
    E     = 0;
    E     = 1;
    delay(2);        
    DPORT = 0x30;
    RS    = 0;        
    E     = 0;
    E     = 0;
    E     = 1;
    delay(2);        
    DPORT = 0x20;
    RS    = 0;        
    E     = 0;
    E     = 0;
    E     = 1;
    delay(2);        

    LCD_WriteComm(0x28);    
    delay(4);
    LCD_WriteComm(0x08);    //4、写指令08H,关闭LCD    
    LCD_NoBusy();
    LCD_WriteComm(0x01);    //5、写指令01H,清屏LCD
    LCD_NoBusy();
    LCD_WriteComm(0x06);    //6、写指令06H
    LCD_NoBusy();
    LCD_WriteComm(0x0C);    //7、写指令0CH
};
17年5个月前IP:未同步
140300
1楼
呃。。不就是四线模式吗。。
引用
评论
17年5个月前IP:未同步
140390
2楼
不如RS485-mcu-lcd方式
引用
评论
17年5个月前IP:未同步
143480
3楼
用得着吗
最爽的是用74XX595
不过速度慢点就是了
引用
评论
17年5个月前IP:未同步
143493
4楼
- -!
刚想找。赞一个
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的