打印

LCD2004的IIC驱动教程

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

使用特权

评论回复
沙发
heweibig| | 2022-8-10 19:54 | 只看该作者
你按照这个库的内容改改。

使用特权

评论回复
板凳
wyjie| | 2022-8-10 19:56 | 只看该作者

使用特权

评论回复
地板
supernan| | 2022-8-10 19:59 | 只看该作者
主要是写指令,写数据。你只要会用I2C就行了。

使用特权

评论回复
5
jiajs| | 2022-8-10 20:04 | 只看该作者

#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
renyaq| | 2022-8-10 20:06 | 只看该作者
#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
dengdc| | 2022-8-10 20:08 | 只看该作者
#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
huwr| | 2022-8-10 20:18 | 只看该作者
8574T驱动LCD时是用的4线还是8线?

使用特权

评论回复
9
juventus9554|  楼主 | 2022-8-10 20:20 | 只看该作者
网上有说是4线模式的,我从LCD2004上也看不出来。

使用特权

评论回复
10
zwll| | 2022-8-10 20:22 | 只看该作者

稍微改动一下应该就可以用的

使用特权

评论回复
11
juventus9554|  楼主 | 2022-8-10 20:24 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
12
yangxiaor520| | 2022-8-11 08:03 | 只看该作者
还有用这个屏的?

使用特权

评论回复
13
febgxu| | 2022-9-3 17:03 | 只看该作者
这个是模拟iic吗   

使用特权

评论回复
14
burgessmaggie| | 2022-9-3 17:42 | 只看该作者
感觉程序运行有问题呢?   

使用特权

评论回复
15
tpgf| | 2022-9-4 16:10 | 只看该作者
自己写一个iic程序也不麻烦的

使用特权

评论回复
16
nawu| | 2022-9-4 16:17 | 只看该作者
楼主用的是iic模块吗

使用特权

评论回复
17
aoyi| | 2022-9-4 16:42 | 只看该作者
其实自己模拟一个时序都可以的

使用特权

评论回复
18
zljiu| | 2022-9-4 16:51 | 只看该作者
改动一下原来的库文件就可以用了

使用特权

评论回复
19
gwsan| | 2022-9-4 16:59 | 只看该作者
iic怎么会是四线的呢

使用特权

评论回复
20
tfqi| | 2022-9-4 17:07 | 只看该作者
函数体可以自己进行丰富

使用特权

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

本版积分规则

900

主题

12190

帖子

3

粉丝