[求助] LCD1602代码问题,有些不明白,请教大家了

ttxs_2013   2014-3-10 09:13 楼主
#define CESECT1 0x200000  //表示什么?
#define CESECT2 0x400000
#define CESECT3 0x600000

//#define LCD_COM (*((unsigned int *)0x400000))
//#define LCD_DAT (*((unsigned int *)0x400002))

#define LCD_COM (*((unsigned int *)0x601000)) //指令寄存器?
#define LCD_DAT (*((unsigned int *)0x601002)) // 数据寄存器?

addr =  (int *)CESECT2;
LCDCOM =  (int *)CESECT3;
LCDOUT =  (int *)CESECT3;
LCDIN  =  (int *)CESECT2

还有对1602液晶的读写,r/w体现怎么哪里? 控制寄存器的为什么要设定三次?
               LCD_REG=0x00;     //rs=0 en=0               
               LCD_DATA=content;
               LCD_REG=0x02;       //rs==1  en==0   写指令端口
               delaynum(80);
               LCD_REG=0x00;  //en=0


回复评论 (4)

我晕 直接用位带操作不就行了 。
点赞  2014-3-10 18:34
根据字面意思LCD_COM是命令LCD_DAT是数据,(*((unsigned int *)0x601000))感觉比较像寄存器。
LCD的读写一般是操作寄存器,
控制寄存器设定三次是因为每次设定生的操作都不一样,要探究原因,可能需要看一下手册
点赞  2014-3-11 13:32
引用: kooking 发表于 2014-3-11 13:32
根据字面意思LCD_COM是命令LCD_DAT是数据,(*((unsigned int *)0x601000))感觉比较像寄存器。
LCD的读写一 ...


这里LCD_REG=0x00;  为什么要设定三次,我已经明白了。但是对于红色字体部分还是不太明白
#define CESECT1     0x200000  
#define CESECT2     0x400000
#define CESECT3     0x600000
#define LCD_COM (*((unsigned int *)0x400000))
#define LCD_DAT (*((unsigned int *)0x400002))
#define LCD_COM (*((unsigned int *)0x601000)) //指令寄存器
#define LCD_DAT (*((unsigned int *)0x601002)) // 数据寄存器
addr =  (int *)CESECT2;
LCDCOM =  (int *)CESECT3;
LCDOUT =  (int *)CESECT3;
LCDIN  =  (int *)CESECT2



说明下,这个代码是我在网上下载的,不是我的开发板提供的例程,只是想通过不同厂家的代码,来学习下更多的编程思路。这个帖子很久没来处理,我是研究自己开发板提供的例程,所以有些抱歉。

点赞  2014-3-23 20:08
上面的红色部分是普通的宏定义
下面的看不到数据类型啊,感觉像是给寄存器赋值
点赞  2014-3-24 13:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复