LED1616点阵的使用.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
„„ } } }
1. 8 位串行输入-并行输出移位寄存器 74HC595 的使用说明
74HC595 芯片是一种串入并出的芯片,在电子显示屏制作当中有广泛的应用。74HC595 使用一根输入 线(串行输入 8 位数据),并将该 8 位数据一次性并行输出。
74HC595 有一个 8 位输入移位寄存器和一个输出 8 位锁存器,分别由 SH_CP 和 ST_CP 两个时钟控制。 数据从 DS 引脚被逐位送入(高位在前,低位在后),在 SH_CP 的上升沿输入到 8 位输入移位寄存器。在 ST_CP 的上升沿被送入输出 8 位锁存器中,从输出引脚输出。如果没有 ST_CP 的上升沿,则输入的数据 会不断的从串行输出引脚(Q7’)被一位一位的输出。此外,74HC595 还有一个异步的低电平复位和使能 OE(低电平有效)控制引脚。
6
LED16 16 点阵的使用
单片机原理与应用
74HC164 和 74HC595 的区别 74HC164 和 74HC595 功能相仿,都是 8 位串行输入转并行输出移位寄存器。74HC164 的驱动电流(25mA) 比 74HC595 (35mA)的要小,14 脚封装,体积也小一些。 74595 的主要优点是具有输出锁存寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行 速度慢的场合很有用处,数码管没有闪烁感。 与 164 只有数据清零端相比,595 还多有输出端时能/禁止控制端,可以使输出为高阻态。
74HC595 的引脚如图 5 所示。
5
LED16 16 点阵的使用
单片机原理与应用
图5
引脚说明
符号
引脚
描述
Q0…Q7
15, 1~7,
并行数据输出
GND
8地Biblioteka Q7’9串行数据输出
MR
10
主复位(低电平)
SHCP
11
移位寄存器时钟输入
STCP
12
存储寄存器时钟输入
OE
13
输出有效(低电平)
DS
图4 真值表的说明
4
LED16 16 点阵的使用
单片机原理与应用
H = 高电平(HIGH voltage level) L = 低电平(LOW voltage level) X = 任意电平(don’t care) 只要控制端 G1、G2 任意一个为高电平,A、B、C、D 任意电平输入都无效。G1、G2 必须都为低电 平才能操作芯片。
1
LED16 16 点阵的使用
单片机原理与应用
0x0920,0xFFFE,0x0000,0x1FF0,0x1010,0x1010,0x1FF0,0x1010 } 共 16 个 16 位数,每个数代表 1 行,一共 16 行,32 字节。
实际上,由于每个数组的元素都是 16 位的,不方便使用,因此,我们通常都把它拆分成 2 个 8 位数, 即如下形式: { 0x08,0x20,0x04,0x40,0x7F,0xFC,0x01,0x00,0x1F,0xF0,0x01,0x00,0x7F,0xFC,0x11,0x10, 0x09,0x20,0xFF,0xFE,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10} 共 32 个 8 位数,每两个数代表 1 行,一共 16 行,32 字节,因此,通常,一个 16X16 的汉字的编码为 32 字节。
目的:并行输出数据。即数据并出 方法:ST_CP 产生一上升沿,将由 DS 上已移入数据寄存器中的数据送入到输出锁存器。 说明: 从上可分析:从 SH_CP 产生一上升沿(移入数据)和 ST_CP 产生一上升沿(输出数据)是二个独 立过程,实际应用时互不干扰。即可输出数据的同时移入数据。
具体编程方法为
while(1) {
Row0=0; //即将第 0 行点亮。 Column=0x0820; //即列送入 0000100000100000,点亮第 0 行的 4、10 两列 Row1=0; //即将第 1 行点亮。 Column=0x0440; //即列送入 0000010001000000,点亮第 1 行的 5、9 两列 Row2=0; //即将第 2 行点亮。 Column=0x7FFC; //即列送入 0111111111111100,点亮第 2 行的 1、2、3、4、5、6、7、8、9、10、11、12、13 列 „„ Row15=0; //即将第 15 行点亮。 Column=0x1010; //即列送入 0001000000010000,第 15 行的 3、11 列 } 因 此 , 当 我 们 使 用 共 阴 极 16X16 点 阵 进 行 行 扫 描 显 示 时 , 汉 字 “ 善 ” 的 编 码 为 { 0x0820,0x0440,0x7FFC,0x0100,0x1FF0,0x0100,0x7F FC,0x1110,
LED16 16 点阵的使用
单片机原理与应用
1.在 16X16 点阵上显示汉字“善”
1.1 汉字显示的原理
以 UCDOS 中文宋体字库为例,每一个字由 16 行 16 列的点阵组成显示。即国家标准汉字库中的每一 个字均由 256 点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。 事实上这个汉字屏不仅可以显示汉字,也可以显示在 16X16 像素范围内的任何图形。这里我们以“善”字 说明,如图 1 所示。
2.选择“P”按钮或菜单“Library/Pick Divice/Symbol„ P”菜单,从“元件库”中选取元件。依次添
加其他元件。其名称和位置见下表。
元件名称
Category
Sub-Category
Results
单片机
Microprocessor ICs 8051 Family
AT89C52
8X8 绿色点阵
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示 在屏幕上。不过现在有很多现成的汉字字模生成软件,就不必自己去画表格算代码了。
1.2 硬件的选择与仿真电路的设计
1.打开 Proteus,选择“File/NewDesign”菜单选项,新建一个“设计项目”。并将项目保存为“16X16_1”。
2
LED16 16 点阵的使用
单片机原理与应用
图2 1).电路说明:
由于 16X16 点阵引脚很多,因此,如果直接用 51 单片机来驱动的话,51 单片机的引脚可能不够, 因此,我们使用 74HC595 这种 8 位串行输入-并行输出移位寄存器,来输出每一行 16 列的编码, 每个 74HC595 有一根串行数据输入口,8 位并行输出口,为了能同时输出 16 位行编码,我们使 用两片 74HC595 级联,这样的安排,我们只要使用 1 根 51 的 I/O 引脚,就可以一次输出每一行 16 列的编码。从而大大的节约了 I/O 引脚。
74HC595 的编程
就是下面三步: 第一步: 目的:将要准备输入的位数据移入 74HC595 数据输入端上。 方法:送位数据到 DS。 第二步: 目的:将位数据逐位移入 74HC595,即数据串入 方法:SH_CP 产生一上升沿,将 DS 上的数据移入 74HC595 中(高位在前,低位在后)。 第三步:
uchar i; a=b=c=d=0; //开始时,令 abcd=0000,即从第一行开始扫描 „„ while(1) {
for(i=0;i<16;i++) // {
P1=i; //i 从 0 增加到 15,则 abcd 就从 0 增加到 15,那么 74hc154 输出从 0 到 15 逐个输出低电平,从而达到了行扫描的目的
此外,由于 74HC595 的输出电流比较大,因此,我们可以不用再外接电流放大电路,简化了我们 系统的硬件设计。
进行行扫描时,要求每一行轮流变为低电平,同样为了节约 I/O 引脚,我们使用 4-16 译码器 74HC154 来完成这个任务(使用两片 3-8 译码器 74LS138 级联也可以)。74HC154 译码器有 4 个 输入,16 个输出,这 16 个输出任意时候只能有一个是低电平(其余的都是高电平),因此,我们 能通过输入 4 位编码,来控制低这 16 个输出哪一个是输出低电平,这样,我们只需要使用 4 根 51 的 I/O 引脚就可以进行行扫描了。
2). 4-16 译码器 74HC154 的使用 它的引脚如图 3 所示。
3
LED16 16 点阵的使用
单片机原理与应用
图3
引脚说明:
1-11,13-17 :输出端(低电平有效) 12:Gnd 电源地 (0V) 18-19:使能输入端(低电平有效) 20-23:地址输入端 (A 为低位,D 为高位) 24:VCC 电源正 (+5V) 它的真值表如图 4 所示。
sbit sh_cp =P0^0; //SHcp(移位寄存器时钟输入)的上升沿输入到移位寄存器中 sbit st_cp=P0^1; //在 STcp(锁存器时钟输入)的上升沿输入到锁存寄存器中去(相当于输出)
sbit ds = P0^2; sbit oe = P0^3;
//输出使能端
//**************************************** //初始化 74hc595
Optoelectronics
Dot Matrix Displays MATRIX-8X8-GREEN
8 位串行输入/输出或 TTL74HC series 者并行输出移位寄存 器
74HC595
4-16 译码器
TTL74HC series
74HC154
依次从备选元件库中摆放器件,连线,画出仿真电路图,如图 2 所示。
图 1 16*16LED 汉字显示 通常我们使用 4 块 8X8 的点阵来组合成一块 16X16 的点阵。假设我们使用的是共阴极的点阵,那么 如果我们使用“行扫描”的方式来显示这个“善”字,那么,我们应该这样做。 1) 先点亮第 0 行的 4、10 两列。 2) 再点亮第 1 行的 5、9 两列。 3) 再点亮第 2 行的 1、2、3、4、5、6、7、8、9、10、11、12、13 列。 4) „„ 5) 最后点亮第 15 行的 3、11 列。 6) 反复循环 如果写成伪代码,那么应该是这样的
14
串行数据输入
VCC
16
电源
74HC595 输入输出功能的说明:
Q0—Q7: 八位并行输出端,可以直接控制数码管的 8 个段。 Q7': 级联输出端。我将它接下一个 595 的 DS 端。 DS: 串行数据输入端。 74HC595 的控制端说明: /MR(10 脚): 低点平时将移位寄存器的数据清零。通常我将它接 Vcc。 SH_CP (11 脚):上升沿:时数据寄存器的数据移位。Q1-->Q1-->Q2-->...-->Q7-->Q7’;下降沿:移位 寄存器数据不变。(脉冲宽度:5V 时,大于几十纳秒就行了。我通常都选微秒级) ST_CP (12 脚):上升沿时移位寄存器的数据进入输出锁存寄存器,下降沿时输出锁存寄存器数据不变。 通常我将 ST_CP 置为低电平,当移位结束后,在 ST_CP 端产生一个正脉冲(5V 时,大于几十纳秒就行了。 我通常都选微秒级),更新显示数据。 /OE(13 脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便 地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。 (Q7’):串行输出引脚,SH_CP 上升沿时数据寄存器的数据移位。Q1-->Q1-->Q2-->...-->Q7-->Q7’ 会 按位从 Q7’引脚输出。我将它接下一个 595 的 DS 端。
电路的连接说明
为了正常的使用 74HC154,我们将它的 G1G2 引脚(即 E1E2 引脚)连接在地上,A、B、C、D 连接 在 P1.0~P1.3 上,然后令 A、B、C、D 从 0000~1111 变化,那么输出就从 Y0~Y15 逐个被拉低到 0;
代码如下:
sbit a=P1^0; sbit b=P1^1; sbit c=P1^2; sbit d=P1^3; //译码器 74hc154 的四根输入地址线分别连接到 P1.0~P1.3 上 „„ void main() {
1. 8 位串行输入-并行输出移位寄存器 74HC595 的使用说明
74HC595 芯片是一种串入并出的芯片,在电子显示屏制作当中有广泛的应用。74HC595 使用一根输入 线(串行输入 8 位数据),并将该 8 位数据一次性并行输出。
74HC595 有一个 8 位输入移位寄存器和一个输出 8 位锁存器,分别由 SH_CP 和 ST_CP 两个时钟控制。 数据从 DS 引脚被逐位送入(高位在前,低位在后),在 SH_CP 的上升沿输入到 8 位输入移位寄存器。在 ST_CP 的上升沿被送入输出 8 位锁存器中,从输出引脚输出。如果没有 ST_CP 的上升沿,则输入的数据 会不断的从串行输出引脚(Q7’)被一位一位的输出。此外,74HC595 还有一个异步的低电平复位和使能 OE(低电平有效)控制引脚。
6
LED16 16 点阵的使用
单片机原理与应用
74HC164 和 74HC595 的区别 74HC164 和 74HC595 功能相仿,都是 8 位串行输入转并行输出移位寄存器。74HC164 的驱动电流(25mA) 比 74HC595 (35mA)的要小,14 脚封装,体积也小一些。 74595 的主要优点是具有输出锁存寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行 速度慢的场合很有用处,数码管没有闪烁感。 与 164 只有数据清零端相比,595 还多有输出端时能/禁止控制端,可以使输出为高阻态。
74HC595 的引脚如图 5 所示。
5
LED16 16 点阵的使用
单片机原理与应用
图5
引脚说明
符号
引脚
描述
Q0…Q7
15, 1~7,
并行数据输出
GND
8地Biblioteka Q7’9串行数据输出
MR
10
主复位(低电平)
SHCP
11
移位寄存器时钟输入
STCP
12
存储寄存器时钟输入
OE
13
输出有效(低电平)
DS
图4 真值表的说明
4
LED16 16 点阵的使用
单片机原理与应用
H = 高电平(HIGH voltage level) L = 低电平(LOW voltage level) X = 任意电平(don’t care) 只要控制端 G1、G2 任意一个为高电平,A、B、C、D 任意电平输入都无效。G1、G2 必须都为低电 平才能操作芯片。
1
LED16 16 点阵的使用
单片机原理与应用
0x0920,0xFFFE,0x0000,0x1FF0,0x1010,0x1010,0x1FF0,0x1010 } 共 16 个 16 位数,每个数代表 1 行,一共 16 行,32 字节。
实际上,由于每个数组的元素都是 16 位的,不方便使用,因此,我们通常都把它拆分成 2 个 8 位数, 即如下形式: { 0x08,0x20,0x04,0x40,0x7F,0xFC,0x01,0x00,0x1F,0xF0,0x01,0x00,0x7F,0xFC,0x11,0x10, 0x09,0x20,0xFF,0xFE,0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10} 共 32 个 8 位数,每两个数代表 1 行,一共 16 行,32 字节,因此,通常,一个 16X16 的汉字的编码为 32 字节。
目的:并行输出数据。即数据并出 方法:ST_CP 产生一上升沿,将由 DS 上已移入数据寄存器中的数据送入到输出锁存器。 说明: 从上可分析:从 SH_CP 产生一上升沿(移入数据)和 ST_CP 产生一上升沿(输出数据)是二个独 立过程,实际应用时互不干扰。即可输出数据的同时移入数据。
具体编程方法为
while(1) {
Row0=0; //即将第 0 行点亮。 Column=0x0820; //即列送入 0000100000100000,点亮第 0 行的 4、10 两列 Row1=0; //即将第 1 行点亮。 Column=0x0440; //即列送入 0000010001000000,点亮第 1 行的 5、9 两列 Row2=0; //即将第 2 行点亮。 Column=0x7FFC; //即列送入 0111111111111100,点亮第 2 行的 1、2、3、4、5、6、7、8、9、10、11、12、13 列 „„ Row15=0; //即将第 15 行点亮。 Column=0x1010; //即列送入 0001000000010000,第 15 行的 3、11 列 } 因 此 , 当 我 们 使 用 共 阴 极 16X16 点 阵 进 行 行 扫 描 显 示 时 , 汉 字 “ 善 ” 的 编 码 为 { 0x0820,0x0440,0x7FFC,0x0100,0x1FF0,0x0100,0x7F FC,0x1110,
LED16 16 点阵的使用
单片机原理与应用
1.在 16X16 点阵上显示汉字“善”
1.1 汉字显示的原理
以 UCDOS 中文宋体字库为例,每一个字由 16 行 16 列的点阵组成显示。即国家标准汉字库中的每一 个字均由 256 点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。 事实上这个汉字屏不仅可以显示汉字,也可以显示在 16X16 像素范围内的任何图形。这里我们以“善”字 说明,如图 1 所示。
2.选择“P”按钮或菜单“Library/Pick Divice/Symbol„ P”菜单,从“元件库”中选取元件。依次添
加其他元件。其名称和位置见下表。
元件名称
Category
Sub-Category
Results
单片机
Microprocessor ICs 8051 Family
AT89C52
8X8 绿色点阵
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出它的扫描代码从而显示 在屏幕上。不过现在有很多现成的汉字字模生成软件,就不必自己去画表格算代码了。
1.2 硬件的选择与仿真电路的设计
1.打开 Proteus,选择“File/NewDesign”菜单选项,新建一个“设计项目”。并将项目保存为“16X16_1”。
2
LED16 16 点阵的使用
单片机原理与应用
图2 1).电路说明:
由于 16X16 点阵引脚很多,因此,如果直接用 51 单片机来驱动的话,51 单片机的引脚可能不够, 因此,我们使用 74HC595 这种 8 位串行输入-并行输出移位寄存器,来输出每一行 16 列的编码, 每个 74HC595 有一根串行数据输入口,8 位并行输出口,为了能同时输出 16 位行编码,我们使 用两片 74HC595 级联,这样的安排,我们只要使用 1 根 51 的 I/O 引脚,就可以一次输出每一行 16 列的编码。从而大大的节约了 I/O 引脚。
74HC595 的编程
就是下面三步: 第一步: 目的:将要准备输入的位数据移入 74HC595 数据输入端上。 方法:送位数据到 DS。 第二步: 目的:将位数据逐位移入 74HC595,即数据串入 方法:SH_CP 产生一上升沿,将 DS 上的数据移入 74HC595 中(高位在前,低位在后)。 第三步:
uchar i; a=b=c=d=0; //开始时,令 abcd=0000,即从第一行开始扫描 „„ while(1) {
for(i=0;i<16;i++) // {
P1=i; //i 从 0 增加到 15,则 abcd 就从 0 增加到 15,那么 74hc154 输出从 0 到 15 逐个输出低电平,从而达到了行扫描的目的
此外,由于 74HC595 的输出电流比较大,因此,我们可以不用再外接电流放大电路,简化了我们 系统的硬件设计。
进行行扫描时,要求每一行轮流变为低电平,同样为了节约 I/O 引脚,我们使用 4-16 译码器 74HC154 来完成这个任务(使用两片 3-8 译码器 74LS138 级联也可以)。74HC154 译码器有 4 个 输入,16 个输出,这 16 个输出任意时候只能有一个是低电平(其余的都是高电平),因此,我们 能通过输入 4 位编码,来控制低这 16 个输出哪一个是输出低电平,这样,我们只需要使用 4 根 51 的 I/O 引脚就可以进行行扫描了。
2). 4-16 译码器 74HC154 的使用 它的引脚如图 3 所示。
3
LED16 16 点阵的使用
单片机原理与应用
图3
引脚说明:
1-11,13-17 :输出端(低电平有效) 12:Gnd 电源地 (0V) 18-19:使能输入端(低电平有效) 20-23:地址输入端 (A 为低位,D 为高位) 24:VCC 电源正 (+5V) 它的真值表如图 4 所示。
sbit sh_cp =P0^0; //SHcp(移位寄存器时钟输入)的上升沿输入到移位寄存器中 sbit st_cp=P0^1; //在 STcp(锁存器时钟输入)的上升沿输入到锁存寄存器中去(相当于输出)
sbit ds = P0^2; sbit oe = P0^3;
//输出使能端
//**************************************** //初始化 74hc595
Optoelectronics
Dot Matrix Displays MATRIX-8X8-GREEN
8 位串行输入/输出或 TTL74HC series 者并行输出移位寄存 器
74HC595
4-16 译码器
TTL74HC series
74HC154
依次从备选元件库中摆放器件,连线,画出仿真电路图,如图 2 所示。
图 1 16*16LED 汉字显示 通常我们使用 4 块 8X8 的点阵来组合成一块 16X16 的点阵。假设我们使用的是共阴极的点阵,那么 如果我们使用“行扫描”的方式来显示这个“善”字,那么,我们应该这样做。 1) 先点亮第 0 行的 4、10 两列。 2) 再点亮第 1 行的 5、9 两列。 3) 再点亮第 2 行的 1、2、3、4、5、6、7、8、9、10、11、12、13 列。 4) „„ 5) 最后点亮第 15 行的 3、11 列。 6) 反复循环 如果写成伪代码,那么应该是这样的
14
串行数据输入
VCC
16
电源
74HC595 输入输出功能的说明:
Q0—Q7: 八位并行输出端,可以直接控制数码管的 8 个段。 Q7': 级联输出端。我将它接下一个 595 的 DS 端。 DS: 串行数据输入端。 74HC595 的控制端说明: /MR(10 脚): 低点平时将移位寄存器的数据清零。通常我将它接 Vcc。 SH_CP (11 脚):上升沿:时数据寄存器的数据移位。Q1-->Q1-->Q2-->...-->Q7-->Q7’;下降沿:移位 寄存器数据不变。(脉冲宽度:5V 时,大于几十纳秒就行了。我通常都选微秒级) ST_CP (12 脚):上升沿时移位寄存器的数据进入输出锁存寄存器,下降沿时输出锁存寄存器数据不变。 通常我将 ST_CP 置为低电平,当移位结束后,在 ST_CP 端产生一个正脉冲(5V 时,大于几十纳秒就行了。 我通常都选微秒级),更新显示数据。 /OE(13 脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便 地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。 (Q7’):串行输出引脚,SH_CP 上升沿时数据寄存器的数据移位。Q1-->Q1-->Q2-->...-->Q7-->Q7’ 会 按位从 Q7’引脚输出。我将它接下一个 595 的 DS 端。
电路的连接说明
为了正常的使用 74HC154,我们将它的 G1G2 引脚(即 E1E2 引脚)连接在地上,A、B、C、D 连接 在 P1.0~P1.3 上,然后令 A、B、C、D 从 0000~1111 变化,那么输出就从 Y0~Y15 逐个被拉低到 0;
代码如下:
sbit a=P1^0; sbit b=P1^1; sbit c=P1^2; sbit d=P1^3; //译码器 74hc154 的四根输入地址线分别连接到 P1.0~P1.3 上 „„ void main() {