打印

LCD2004的IIC驱动教程

[复制链接]
546|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
驱动芯片是8574T的,网上好多都是arduino的库文件。谢谢各位了!

使用特权

评论回复
沙发
zyf部长| | 2021-1-5 21:24 | 只看该作者
你按照这个库的内容改改。

使用特权

评论回复
板凳
guoyt| | 2021-1-5 21:30 | 只看该作者

使用特权

评论回复
地板
wangpe| | 2021-1-5 21:33 | 只看该作者
主要是写指令,写数据。你只要会用I2C就行了。

使用特权

评论回复
5
langgq| | 2021-1-5 21:37 | 只看该作者

#include <reg52.h>  
#include <stdlib.h>  
#include "common.h"  
#include "lcd2004.h"  


void main(void)  
{     
    UW16 i ;  
    UB8 author[]="Author:YangRui" ;  
  
    lcd2004Init();  
  
    for(i=0 ; i<sizeof(author)-1 ; i++)  
    {  
        lcd2004AddressWriteByte(LCD2004_ROW0,i,author[i]);  
    }  
  
    lcd2004AddressWriteString(LCD2004_ROW1,0,"QQ:279729201");  
    lcd2004AddressWriteString(LCD2004_ROW2,0,"yangrui90s@163.com");  
    lcd2004AddressWriteString(LCD2004_ROW3,0,"Date:2014/02/26");  
         
    while(1);     
}

使用特权

评论回复
6
gongche| | 2021-1-5 21:41 | 只看该作者
#ifndef __LCD2004_H__
#define __LCD2004_H__

#include <reg52.h>
#include "common.h"

sbit lcd2004_rs_bit = P2^6;/*根据硬件连接选择*/
sbit lcd2004_rw_bit = P2^5;/*根据硬件连接选择*/
sbit lcd2004_en_bit = P2^7;/*根据硬件连接选择*/

#define LCD2004_DATA_PORT        P0/*根据硬件连接选择*/
/*default type:  
px^0---DB0(LSB)  
px^1---DB1  
px^2---DB2  
px^3---DB3  
px^4---DB4  
px^5---DB5  
px^6---DB6  
px^7---DB7(MSB)  
*/

/*  
    RS          Rw  
    0           0   ---->write command to lcd2004   
    0           1   ---->read  lcd2004's  status  
    1           0   ---->write data to lcd2004  
    1           1   ---->read  lcd2004's data   
         
*/

//lcd2004_rw_bit  select
#define LCD2004_READ_OPERATION                HIGH_LEVEL
#define LCD2004_WRITE_OPERATION                LOW_LEVEL

//lcd2004_rs_bit select
#define LCD2004_DATA_OPERATION                HIGH_LEVEL
#define LCD2004_COMMAND_OPERATION        LOW_LEVEL

//lcd2004_en_bit  select
#define LCD2004_ENABLE        HIGH_LEVEL
#define LCD2004_DISABLE        LOW_LEVEL

  

/*display:16(column)x2(row),5x7 lattice,8bit data interface*/        
#define LCD2004_DEFAULT_DISPALY_MODE        0x38

/*
====================================================
lcd diaplay on/off and cursor display on/off configure
====================================================
/*  
0   0   0   0   1   D   C   B     
                    |   |   |------cursor blink  : 1-->enable ; 0-->disalbe  
                    |   |----------cursor display: 1-->enable ; 0-->disable  
                    |-------------lcd2004 dispaly: 1-->enable ; 0-->disalbe   
      
*/
#define LCD2004_DISPLAY_ENABLE                        0X04
#define LCD2004_CURSOR_DISPLAY_ENABLE        0X02
#define LCD2004_CURSOR_BLINK_ENABLE         0X01

#define LCD2004_DISPLAY_DISABLE                        (0X04 & (~(0x01<<2)))
#define LCD2004_CURSOR_DISPLAY_DISABLE        (0X02 & (~(0x01<<1)))
#define LCD2004_CURSOR_BLINK_DISABLE         (0X01 & (~(0x01<<0)))

/*默认:lcd显示,光标显示,光标闪烁*/                        /*根据实际需要选择*/
#define LCD2004_DEFAULT_DISPLAY_AND_CURSOR_MODE 0x08                                  | \
                                                                                LCD2004_DISPLAY_ENABLE                 | \
                                                                                LCD2004_CURSOR_DISPLAY_ENABLE| \
                                                                                LCD2004_CURSOR_BLINK_ENABLE

/*
====================================================
point and cursor address  configure
====================================================
0   0   0   0   0   1   N   S  
                        |   |-----  screen move:1-->enable ; 0-->disable
                        |---------  N=1:读或者写一个字符后地址指针加1,且光标加1  
                                    N=0:度或者写一个字符后地址指针减1,且光标减1  
                        当S=1时 :  
                            若N=1,整屏幕左移  
                              N=0,整屏幕右移   
                            以达到光标不移动,而整个屏幕移动的效果  
*/                    
                                                                        
#define LCD2004_POINT_AND_CURSOR_PLUS                0X02
#define LCD2004_SCREEN_MOVE_ENABLE                        0x01

#define LCD2004_POINT_AND_CURSOR_MINUS                (0X02 & (~(0X01<<1)))
#define LCD2004_SCREEN_MOVE_DISABLE                        (0x01 & (~(0X01<<0)))

/*默认:光标和指针加一,屏幕不移动*/               
#define LCD2004_DEFAULT_POINT_AND_POINT_ADDRESS_MODE 0X04                                 | \
                                                                                        LCD2004_POINT_AND_CURSOR_PLUS| \
                                                                                        LCD2004_SCREEN_MOVE_DISABLE




#define LCD2004_ROW0        0
#define LCD2004_ROW1        1
#define LCD2004_ROW2        2
#define LCD2004_ROW3        3
#define LCD2004_MIN_ROW LCD2004_ROW0
#define LCD2440_MAX_ROW        LCD2004_ROW3


#define LCD2004_ROW_LENGHT        0X14 //20

#define LCD2004_ROW0_ADDRESS_START (0X80)
#define LCD2004_ROW1_ADDRESS_START (0X80+0X40)
#define LCD2004_ROW2_ADDRESS_START (LCD2004_ROW0_ADDRESS_START+LCD2004_ROW_LENGHT)
#define LCD2004_ROW3_ADDRESS_START (LCD2004_ROW1_ADDRESS_START+LCD2004_ROW_LENGHT)

//instruction:
#define LCD2004_CLEAN_ALL_DISPALY                        0x01/*清屏*/
#define LCD2004_CURSOR_RETURN_TO_ORIGIN                0x02/*光标归位*/



//写命令
extern void lcd2004WriteCommand(UB8 commandCode);

//写数据
extern void lcd2004WriteData(UB8 dataCode);

//lcd20041清屏
extern void lcd2004CleanAll(void) ;

//光标归位
extern void lcd2004CursorHoming(void);

//lcd2004初始化
extern void lcd2004Init(void) ;

//lcd2004地址写字节
extern void lcd2004AddressWriteByte(UB8 row,UB8 column,UB8 dataCode) ;

//lcd2004地址写字符串
extern void lcd2004AddressWriteString(UB8 row,UB8 column,UB8 *stringCode);

#endif        /*__LCD2004_H__*/

使用特权

评论回复
7
huanghuac| | 2021-1-5 21:45 | 只看该作者
本帖最后由 huanghuac 于 2021-1-5 21:54 编辑

#ifndef __COMMON_H__
#define __COMMON_H__

typedef unsigned char UB8 ;
typedef unsigned short int UW16 ;
typedef unsigned long UL32 ;

typedef char SB8;
typedef short int SW16 ;
typedef long SL32 ;

#define HIGH_LEVEL 1        
#define LOW_LEVEL  0


#endif        /*__COMMON_H__*/

使用特权

评论回复
8
chenho| | 2021-1-5 21:58 | 只看该作者
8574T驱动LCD时是用的4线还是8线?

使用特权

评论回复
9
juventus9554|  楼主 | 2021-1-5 22:02 | 只看该作者
网上有说是4线模式的,我从LCD2004上也看不出来。

使用特权

评论回复
10
木木guainv| | 2021-2-4 12:34 | 只看该作者
稍微改动一下应该就可以用的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

900

主题

12190

帖子

3

粉丝