用C#操作IO端口2-控制液晶/荧光显示器-2

原创 2003年11月27日 00:26:00

作者: Levent S。  翻译:Aweay<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

编码

在你开始编码前,你需要了解基本的HD44780控制器指令。下表是来自日立网站上的介绍,为了好理解,我加入了一些额外的信息。

Instruction

Code

Description

Execution time**

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Clear display

0

0

0

0

0

0

0

0

0

1

Clears display and returns cursor to the home position (address 0)。

1。64mS

Cursor home

0

0

0

0

0

0

0

0

1

*

Returns cursor to home position (address 0)。 Also returns display being shifted to the original position。 DDRAM contents remains unchanged。

1。64mS

Entry mode set

0

0

0

0

0

0

0

1

I/D

S

Sets cursor move direction (I/D), specifies to shift the display (S)。 These operations are performed during data read/write。 I/D = 0 --> cursor is in decrement position。 I/D = 1 --> cursor is in increment position。 S = 0 --> Shift is invisible。 S = 1 --> Shift is visible

40uS

Display On/Off control

0

0

0

0

0

0

1

D

C

B

Sets On/Off of all display (D), cursor On/Off (C) and blink of cursor position character (B)。 D = 0 --> Display off。 D = 1 --> Displan on。 C = 0 --> Cursor off。 C = 1 --> Cursor on。 B = 0 --> Cursor blink off。 B = 1 --> Cursor blink on。

40uS

Cursor/display shift

0

0

0

0

0

1

S/C

R/L

*

*

Sets cursor-move or display-shift (S/C), shift direction (R/L)。 DDRAM contents remains unchanged。 S/C = 0 --> Move cursor。 S/C = 1 --> Shift display。 R/L = 0 --> Shift left。 R/L = 1 --> Shift right

40uS

Function set

0

0

0

0

1

DL

N

F

*

*

Sets interface data length (DL), number of display line (N) and character font(F)。 DL = 0 --> 4 bit interface。 DL = 1 --> 8 bit interface。 N = 0 --> 1/8 or 1/11 Duty (1 line)。 N = 1 --> 1/16 Duty (2 lines)。 F = 0 --> 5x7 dots。 F = 1 --> 5x10 dots。

40uS

Set CGRAM address

0

0

0

1

CGRAM address

Sets the CGRAM address。 CGRAM data is sent and received after this setting。

40uS

Set DDRAM address

0

0

1

DDRAM address

Sets the DDRAM address。 DDRAM data is sent and received after this setting。

40uS

Read busy-flag and address counter

0

1

BF

CGRAM / DDRAM address

Reads Busy-flag (BF) indicating internal operation is being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction)。 I used some delay functions in my code which are ThreadSleep if you don't want to use these you can check the Busy Flag and make your LCD speedy。 BF = 0 --> Can accept instruction。 BF = 1 --> Internal operation in progress no additional operation can be accepted。

0uS

Write to CGRAM or DDRAM

1

0

write data

Writes data to CGRAM or DDRAM。

40uS

Read from CGRAM or DDRAM

1

1

read data

Reads data from CGRAM or DDRAM。

40uS

* = Not important, Can be "1" or "0"
** = Execution Time is a time needed which the LCD needs for the operation。

CGRAM is character generator RAM, this ram can hold user defined graphic characters。 This capability gains these modules popularity because of this you can make bargraphs and your own language's special characters(Maybe Chinese, Korean, Turkish, Greek, etc。)。

DDRAM is the Display Data RAM for these modules which represents the hexadecimal Display data adresses。 See below:

Char。  

Line 1

Line 2

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

80

81

82

83

84

85

86

87

88

89

8A

8B

8C

8D

8E

8F

 

C0

C1

C2

C3

C4

C5

C6

C7

C8

C9

CA

CB

CC

CD

CE

CF

 

至此,我们已经知道了足够的信息,现在我们可以编写代码让我们的LCD活动起来了。在我的程序里,有三个非常重要的函数:Prepare_LCD|move_to_specific|button_Write_to_Screen_Click。

下面的代码是Prepare_LCD函数:

move_to_specific函数可以移动光标到屏幕上任何位置:

看下面的Ascii码和二进制码转换表,你可以明白button_Write_to_screen_Click函数的作用:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-11-241655210.gif

现在你可以看看这个函数到底是如何实现的,我不打算把代码放在这里,因为我不想让我的这篇文章难于阅读。

注意:如果LCD执行的时间非常快,你可以激活Thread。Sleep函数。

写在最后

有人可能要问“我自己编写程序控制LCD有什么好处?”其实这完全是个人爱好,但如果想象一下,我们用自己编写的LCD显示从网络上获取的CodeProject的新闻,那是多么美妙的事情。

关于译者Aweay

是学生。他目前大四,对基于组件技术的软件设计有深入研究。任CSDN C++Builder板块版主,可以通过 siney@yeah。net 与他联系,同时欢迎你访问他的网站 http://siney。yeah。net

用C#操作IO端口2-控制液晶/荧光显示器-1

用C#操作IO端口2-控制液晶/荧光显示器作者: Levent S。  翻译:Aweay 题外话上面文章发表之后,很多朋友都说这太简单了,还以为使用c#来编写代码完成IO操作呢,不就是调用现有DLL吗...
  • Aweay
  • Aweay
  • 2003年11月27日 00:42
  • 4024

驱动学习笔记--IO端口操作

驱动学习笔记--IO端口操作。
  • faithzzf
  • faithzzf
  • 2016年12月05日 23:09
  • 472

如何用C语言操纵AVR的IO端口(以ICCAVR为例):

如何用C语言操纵AVR的IO端口(以ICCAVR为例):    举例一:将PB0定义为输出,且输出为高电平  DDRB=BIT(0);//定义 PB0为输出  PORTB|=BIT(0);//...
  • afgh369
  • afgh369
  • 2013年12月11日 16:05
  • 349

Linux 对 IO 端口的操作

Linux  对IO端口的操作方法:1)直接使用I/O端口操作函数           1。在设备打开或者驱动模块被加载时,申请I/O端口区域;                    request_...
  • kenxausten
  • kenxausten
  • 2010年09月06日 16:45
  • 1866

Linux 快速操作IO端口

在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gp...
  • a_tu_
  • a_tu_
  • 2015年08月12日 15:09
  • 1898

C#关闭显示器,打开显示器

本人公司的显示器有点问题,就是电源开关fgi
  • sunbingzibo
  • sunbingzibo
  • 2014年10月11日 16:48
  • 2023

用C#操作IO端口1-用并口控制发光二极管

用C#操作IO端口1-用并口控制发光二极管作者: Levent S.  翻译:Aweay 为什么要写这篇文章,不可否认,用C#编写这类程序不是非常合适的, 相信来CSDN的很多朋友都能用其他语言轻松编...
  • Aweay
  • Aweay
  • 2003年11月07日 01:02
  • 5270

用C#列举显示器可用设置列表并进行设置

在孟子E章的"孟宪会之精彩世界"里找到一个文章,地址如下:http://dotnet.aspx.cc/article/2l9uxy9l-mdvh-4zi3-hpn1-rpb9kv5z63ym/read...
  • hbxtlhx
  • hbxtlhx
  • 2007年03月15日 16:43
  • 3380

Linux 下IO端口编程访问

以前写的一篇笔记,偶尔翻出来了,放在这里做个纪念 Linux 下IO端口编程访问 这里记录的方法是在用户态访问IO端口,不涉及驱动程序的编写。 首先要包含头文件 /usr/include/asm/i...
  • liyuanbhu
  • liyuanbhu
  • 2014年06月30日 13:21
  • 4960

linux系统中的IO操作

同步IO分为阻塞IO、非阻塞IO、信号驱动的IO和多路转接IO。 阻塞IO: 一直阻塞进程直到完成IO操作。 非阻塞IO: 有数据时进行IO操作,没有数据时立即返回不阻塞进程。 信号驱动IO: 当...
  • c1194758555
  • c1194758555
  • 2016年10月22日 19:39
  • 699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用C#操作IO端口2-控制液晶/荧光显示器-2
举报原因:
原因补充:

(最多只允许输入30个字)