74HC595 驱动88点阵

74HC595 驱动88点阵
74HC595 驱动88点阵

开始课程设计的题外话+74HC595 驱动8*8点阵

这学期要做单片机的课程设计我这个不靠谱的小组长折腾着我们组的成员把开始定好的题目换成了做俄罗斯方块

元件是专业统一买现在东西还没回来先把原理和软件这一部分搞清楚

【外观】

用6个8*8的LED点阵做显示屏

1个开关按钮;1个复位按钮

有左右下翻转4个控制按钮

用小喇叭加入音效,1个开/关音效按

两层设计上面层放点阵屏幕和7个按钮下面层放芯片喇叭等等其他所有元件←希望放得下

【功能】

初步——

俄罗斯方块的基本功能:1能随机落下6种方块;2操作按钮能控制方块移动;3触底判断是否满屏,满屏则结束游戏,未满屏判断是否满行,满行则消除行,进入下一次循环;

次之——

1开机加入logo与欢迎界面;2游戏中加入音效;3保存最高分值;4可选择游戏难度嗯………………想到再加

74HC595 驱动8*8点阵

8X8点阵共由64个发光二极管组成且每个发光二极管是放置在行线和列线的交叉点上当对应的某一行置1电平某一列置0电平则相应的二极管就亮

移位锁存器74HC595(74LS595)原理:74HC595为8位输出锁存移位寄存器RESET: 复位信号

shitf clock:移位时钟

serial data input: 串行数据输入

output enable:输出使能

latch clock:锁存时钟

595有3层结构:

第一层为移位D触发器;

第二层为锁存D触发器;

第三层为输出3态门;

当复位信号为0时,移位D触发器清0;

当移位脉冲从L->H时,第一个移位D触发器的Q=D;其它的Qn=Qn-1;当锁存脉冲从0->1时,第二层为锁存D触发器的输出=/输入;

当OE=1时,595的输出为高阻态;

当OE=0时,595的输出为第二层为锁存D触发器的输出的反相;

74595的数据端:

QA--QH(15,1,2,3,4,5,6,7): 八位并行输出端可以接点阵的8列

QH'(9): 级联输出端将它接下一个595的SI端

SI(14): 串行数据输入端

74595的控制端说明:

SCLR(10脚): 低电平时将移位寄存器的数据清零通常将它接Vcc

SHCP(11脚):上升沿时数据寄存器的数据移位QA-->QB-->QC-->...-->QH 下降沿移位寄存器数据不变(脉冲宽度:5V时大于几十纳秒就行了通常都选微秒级)

STHCP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器下降沿时存储寄存器数据不变通常将RCK置为低电平当移位结束后在RCK端产生一个正脉冲(5V时大于几十纳秒就行了通常都选微秒级)更新显示数据

G(13脚): 高电平时禁止输出(高阻态)如果单片机的引脚不紧张用一个引脚控制它可以方便地产生闪烁和熄灭效果比通过数据端移位控制要省时省力

74HC595是一个串入并出的芯片通过一个for(i=0;i<8;i++)来存储数据

具体来说就是第一个时钟信号来到时低位的数据向高位挪动一位

在这个程序中是SH_CK 信号当SH_CLK 是一个上跳沿时传入的形参dat与0x80相与得到的数为1 则通过SDA TA置1 否则通过SDA TA置0 并存储在SDA TA的相应位置(最低位)上DS内部也自动左移一位数据然后dat向左移一位使次高位变为最高位与0x80相与并存储

通过8次后就可以得到数据并存储在SDA TA中这时ST_CK一个上跳沿数据即送出去了

//串行数据输入

void Ser_IN(unsigned char Data)

{ unsigned char i;

for(i = 0; i < 8; i++)

{ SH_CK = 0; //先置低

SD = Data & 0x80; //取数据的最高位

Data <<= 1; //将数据的次高位移到最高位为下一次取数据做准备

SH_CK = 1; //再置高产生移位时钟上升沿上升沿时数据寄存器的数据移位

}

}

//并行数据输出

void Par_OUT(void)

{ ST_CK = 0; //先置低

ST_CK = 1; //再置高产生移位时钟上升沿

//上升沿时移位寄存器的数据进入数据存储寄存器更新显示数据

}

/************ 点阵扫描:从左到右3次-从右到左3次-从上到下3次-从下到上3次循环***************/

#include

#include "74HC595.H"

unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delayms(unsigned int x) //延时约x ms

{ unsigned int i,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

void main(void)

{ unsigned char i,j;

while(1)

{ for(j=0;j<3;j++) //从左到右3次

{ for(i=0;i<8;i++)

{ Ser_IN(taba[i]);// 列扫描

Ser_IN(0xff);// 行送扫描数据

Par_OUT();//74HC595输出显示

delayms(100);

}

}

for(j=0;j<3;j++)//from right to left 3 time

{ for(i=0;i<8;i++)

{ Ser_IN(taba[7-i]);// 列扫描

Ser_IN(0xff);// 行送扫描数据

Par_OUT();//74HC595输出显示

delayms(100);

}

}

for(j=0;j<3;j++)//从上到下3次

{ for(i=0;i<8;i++)

{ Ser_IN(0x00);// 列扫描

Ser_IN(tabb[i]);//8 行送扫描数据

Par_OUT();//74HC595输出显示

delayms(100);

}

}

for(j=0;j<3;j++)//从下到上3次

{ for(i=0;i<8;i++)

{ Ser_IN(0x00);// 列扫描

Ser_IN(tabb[7-i]);// 行送扫描数据

Par_OUT();//74HC595输出显示

delayms(100);

}

}

}

}

/******以下为目录包含文件74HC595.H*****/

//Note: 74HC595驱动

//File: 74HC595.H

// __ __

//Note: MR 主复位接电源正极OE 使能端输出有效接电源负极

#ifndef __74HC595_H__ // #ifndef判断后面的标示符是否为未定义的#define __74HC595_H__

sbit SD = P1^4; //串行数据输入

sbit ST_CK = P1^5; //存储寄存器时钟输入

sbit SH_CK = P1^6; //移位寄存器时钟输入

//函数声明

void Ser_IN(unsigned char Data); //串行数据输入

void Par_OUT(void); //串行数据输出

//串行数据输入

void Ser_IN(unsigned char Data)

{

unsigned char i;

for(i = 0; i < 8; i++)

{

SH_CK = 0; //CLOCK_MAX=100MHz

SD = Data & 0x80;

Data <<= 1;

SH_CK = 1;

}

}

//并行数据输出

void Par_OUT(void)

{

ST_CK = 0;

ST_CK = 1;

}

#endif //#endif用于结束条件编译编译时与前面最近的#if作为一对

74hc595驱动数码管

74hc595驱动数码管 版本一 顶层例化文件 module seg7x8( input CLOCK_50, // 板载50MHz时钟 input Q_KEY, // 板载按键RST output [7:0] SEG7_SEG, // 七段数码管 段脚 output [2:0] SEG7_SEL // 七段数码管 待译位脚 ); // 显示效果: // ------------------------- // |1 |2.|3 |4 | |B |C |D | // ------------------------- seg7x8_drive u0( .i_clk (CLOCK_50), .i_rst_n (Q_KEY), .i_turn_off (8'b0000_1000), // 熄灭位[2进制][此处取第3位 .i_dp (8'b0100_0000), // 小数点位[2进制][此处取第6位 .i_data (32'h1234_ABCD), // 欲显数据[16进制] .o_seg(SEG7_SEG), .o_sel(SEG7_SEL) ); endmodule 驱动文件 module seg7x8_drive(

input i_clk, input i_rst_n, input [7:0] i_turn_off, // 熄灭位[2进制 input [7:0] i_dp, // 小数点位[2进制 input [31:0] i_data, // 欲显数据[16进制 output [7:0] o_seg, // 段脚 output [2:0] o_sel // 使用74HC138译出位脚 ); //++++++++++++++++++++++++++++++++++++++ // 分频部分 开始 //++++++++++++++++++++++++++++++++++++++ reg [16:0] cnt; // 计数子 always @ (posedge i_clk, negedge i_rst_n) if (!i_rst_n) cnt <= 0; else cnt <= cnt + 1'b1; wire seg7_clk = cnt[16]; // (2^17/50M = 2.6114)ms //-------------------------------------- // 分频部分 结束 //-------------------------------------- //++++++++++++++++++++++++++++++++++++++ // 动态扫描, 生成seg7_addr 开始 //++++++++++++++++++++++++++++++++++++++ reg [2:0] seg7_addr; // 第几个seg7 always @ (posedge seg7_clk, negedge i_rst_n) if (!i_rst_n) seg7_addr <= 0; else seg7_addr <= seg7_addr + 1'b1; //-------------------------------------- // 动态扫描, 生成seg7_addr 结束 //-------------------------------------- //++++++++++++++++++++++++++++++++++++++

利用74HC595实现多位LED显示的方法

1 引言 单片机应用系统中使用的显示器主要有LED和LCD两种。近年来也有用CRT显示的。前者价格低廉,配置灵活,与单片机接口方便;后者可进行图形显示,但接口较复杂,成本也较高。LED(Ling Emiting Diode)是发光二极管的缩写。实际应用非常普遍的是八段LED显示器。LED显示器在大型报时屏幕,银行利率显示,城市霓虹灯建设中,得到广泛应用。在这些需要多位LED显示的场合,怎样实现系统稳定,价格低廉的显示,成为决定其成本的关键所在。 2 74HC595实现LED静、动态显示基本原理 74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。而且价格低廉,每片单价为1.5元左右. 2.1 静态显示 每位LED显示器段选线和74HC595的并行输出端相连,每一位可以独立显示(见图1)。在同一时间里,每一位显示的字符可以各不相同(每一位由一个74HC595的并行输出口控制段选码)。 N位LED显示要求N个74HC595芯片及N+3条I/O口线,占用资源较多,而且成本较高。这对于多位LED 显示很不利。 2.2 动态显示

在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制(见图2)。由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示相同的字符。想要每位显示不同的字符,就必须采用扫描的方法,即在每一瞬间只使用一位显示字符。在此瞬间,74HC595并行输出口输出相应字符段选码,而位选则控制I/O口在该显示位送入选通电平,以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。由于74HC595具有锁存功能,而且串行输入段选码需要一定时间,因此,不需要延时,即可形成视觉暂留效果。 N位LED显示时,只需要一片74HC595即可完成,成本最低。但是,此种方法的最大弱点就是当LED的位数大于12位时,出现闪烁现象,这是所有动态LED显示方式共同的弱点。 3 多位LED显示方法的实现

51单片机驱动两片74HC595级联动态驱动8位数码管

51单片机驱动两片74HC595级联动态驱动8位数码管 功能: 用2片74HC595驱动8位数码管, 级联的最低1片595控制位选,那么第一片控制段选 平台: STC89C52 现象: 8位数码管从第一位开始从0计数,满10进位 版本说明: 第0版本没有使用定时器中断,同时定义了一个unsigned long int 变量计数,再把这个数的每位分离出来显示,所以导致有点闪屏,此版本使用定时器中断,而且没有用unsigned long int 之类的变量,而是用数组Val[8] 来计数, 主函数只负责显示,其它的在中断函数里面处理,这样显示一点都不闪屏, 备注: 可以用ULN2003A 接在数码管的com 口来提高驱动能力,ULN2003A里面有7个NPN三极管, 可以大大提高驱动能力 #include <> sbit SCK = P1^1; // 数据输入时钟线,脉冲 sbit SI = P1^0; // 数据线 sbit RCK = P1^2; // 锁存 unsigned char code SMG[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 段码 unsigned char code Wei[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 位选unsigned char Val[8] = {0}; // 要显示的数据 ************************ 函数声明************************ void interrupt_init(void); void timer_init(void); 控制74HC595输出数据 void Output(void) { RCK = 0; RCK = 1; } 向74HC595中写入一字节数据 void Write_Byte(unsigned char dat) { unsigned char i = 0; for(i=0; i<8; i++) { SCK = 0; SI = dat & 0x80;

两片74HC595级联驱动两个四连体数码管

两片74HC595级联驱动两个四连体数码管 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。 数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。 我的硬件连接:用级联方式连接! 工作顺序:单片机先送1个8位数据到第一个595的内部移位寄存器->然后数据会送到内部的输出寄存器->输出 当MR(10引脚)为高电平,OE(13引脚)为低电平时,数据在SH CP上升沿进入移位寄存器,在ST CP上升沿输出到并行端口。 可能这还不太好理解,没关系,咱去程序应用中理解! 请看一个简单的程序: sbit SDA1 = P0^0; //串行数据输入,对应595的14脚SER sbit SCL1 = P0^1; //移位寄存器时钟输入,对应595的11脚SCK sbit SCL2 = P0^2; //存储寄存器时钟输入,对应595的12脚RCK unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0 1 2 3 4 5 6 7 8 9 unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay2ms(void) { unsigned char i,j; for(i=133;i>0;i--) for(j=6;j>0;j--); } void 595_in(unsigned char Data) { unsigned char i; for(i = 0; i < 8; i++) //循环8次,刚好移完8位

74HC595驱动数码管上显示数字

/******************************************************************************* * 标题: 试验74HC595驱动数码管上显示数字(C语言)* 连接方法:JP12用条线冒短接JP3和JP2 用8PIN排线连接 ******************************************************************************** * 通过本例程了解74HC595(串入并出)基本原理和使用* 请学员认真消化本例程,懂74C595在C语言中的操作* ********************************************************************************/ #include #include #define NOP() _nop_() /* 定义空指令*/ //SPI IO sbit MOSIO =P3^4; //串行数据线 sbit R_CLK =P3^5; //数据并行输出控制 sbit S_CLK =P3^6; //串行时钟线 void delay(unsigned int i); //函数声名 void HC595SendData(unsigned char SendV al); //函数声名 // 此表为LED 的字模// 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20) unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71}; main() { unsigned char HC595SendVal; unsigned int LedNumVal = 1; while(1) { LedNumVal++; HC595SendVal = LED7Code[LedNumV al%16]; //LED7;显示0-F LedNumVal%10 显示0-9 HC595SendData(HC595SendVal); //调用595驱动函数 delay(200); } } /*******************延时函数************/ void delay(unsigned int i) { unsigned int j; for(i; i > 0; i--) //CPU循环执行i*300次 for(j = 300; j > 0; j--);

51单片机+74HC595驱动数码管程序

51单片机+74HC595驱动数码管程序 这里是电路图:完整的源码和图纸下载地址:51hei/bbs/dpj-20392-1.html 下面是51 单片机驱动74hc595 芯片的程序:#include //包含51 单片机的头文 件#include #define uint unsigned int#define uchar unsigned char//sbit sin_595 =P1;//sbit rclk_595 =P1;//sb it sclk_595 =P1 ;//sbit s_clr =P1;sb it a_cp_595 =P2; //串行移位时钟脉冲sh_cp_595sbit b_cp_595 =P2;//输出锁存器控制脉冲 st_cp_595//sbit _oe_595 =P1 ; //8 位并行输出使能/禁止(高阻态)sbit ds_595 =P2 ; //串行数据输入extern uchar datas[6]; //存放6 个数码管的显示数字uchar ledcode[]={0xC0,// 00xF9,// 10xA4,// 20xB0,// 30x99,// 40x92,// 50x82,// 60xF8,// 70x80,// 80x90,// 90x88,// A0x83,// B0xC6,// C0xA1,// D0x86,// E0x8E// F};void delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void led_display(void){ uchar i,j; bit testb; uchar bdata movebit[6]; uchar bdata test; //_oe_595=0; //选中数码管for(i=0;i<6;i++) movebit[i]=ledcode[datas[i]]; // P1=0; delay(1); for(i=0;i<6;i++) //数据移位{ test=movebit[i]; for(j=0;j<8;j++) { testb=test&0x80; test=test<<1; if(testb) { ds_595=1; } else {ds_595=0; }a_cp_595=1; a_cp_595=0; } //数据移位} b_cp_595=0; b_cp_595=1; b_cp_595=0;} tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

使用74HC595实现IO口的扩展

使用74HC595实现I/O口的扩展 一、实验目的 1. 了解74HC595(串入并出)基本原理和使用 2. 了解数码管的基本原理和驱动方式 3. 学会使用74HC595来驱动静态数码管 二、实验器材 C51单片机开发板(含74HC595芯片,静态数码管)1块 8PIN排线1根 数据线1根 三、实验原理 1. 数码管 数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管(还有一种“米”字型的数码管,其段数更多),八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示),其基本原理是:将所有LED的一端(正极、负极均可)连在一起作为一个公共端,然后通过分别控制这组LED的另一个端口来使部分LED点亮,从而达到显示一定字形的目的。 (1)数码管的分类 按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。我们在实际使用中一定要搞清楚数码管是共阴极的还是共阳极的。 (2)数码管段、位引脚的确定(以4位8段数码管为例) 数码管引脚测量分三步:极性判断(共阳极还是共阴极)、公共端判断(位选端口)、段码端判断(段选端口)。 首先要确定数码管是共阴极还是共阳极的:找一个3到5V的直流电源,准备几个1K或者几百欧姆的电阻。将电源的正极串接一个电阻后连在数码管的任意一个脚上,然后将电源的负极逐个接到数码管的其余引脚上,观察数码管的某一段是否会点亮,如果全部引脚试过都没有亮的,那么将电源正极(串电阻)换一个引脚再试,直到有一个LED发光,这时固定电源负极不动,电源正极(串电阻)逐个接到数码管的其余引脚上,如果有8段LED都亮,说明该数码管是共阴极的。相反,按住电源正极不动,电

74HC595介绍及头文件讲解

74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。 595引脚介绍 ________ QB--|1 16|--Vcc QC--|2 15|--QA QD--|3 14|--SER-------------------串行输入 QE--|4 13|--/G---------------------使能端输出有效(低电平) QF--|5 12|--RCK-------------------存储寄存器时钟输入 QG--|6 11|--SCK-------------------移位寄存器时钟输入 QH--|7 10|--/SCLR----------------主复位(低电平) GND-|8 9|--QH'--------------------串行输出端 |________| 74595的数据端: 1)、QA--QH: 八位并行输出端,可以直接控制数码管的8个段。 2)、QH': 级联输出端。我将它接下一个595的SER端。 3)、SER: 串行数据输入端。 74595的控制端说明: 1) 、/SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。 2)、SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级) 3)、RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。 4)、/G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。 注:74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。 74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。 与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。 程序讲解: //Note: 74HC595驱动 //File: 74HC595.H //Date: 08-7-16 //Time: 8:50 // ______ __ //Note: SCLR(10脚)主复位接电源正极, G(13脚)使能端,输出有效接电源负极 //防止74HC595.H头文件被主程序重复调用 /*--------------------------------------------*/ #ifndef __74HC595_H__ #define __74HC595_H__

(完整版)595驱动数码管

器件:74hc595. 引脚说明: SDA:数据输入口。 SH_CP:数据输入控制端,在每个SH_CP的上升沿, SDA口上的数据移入寄存器, 在SH_CP的第9个上升沿, 数据开始从QS移出。 ST_CP:数据置入锁存器控制端。 Q0~Q7:数据并行输出端。 数据从SDA 口送入74HC595 , 在每个SH_CP的上升沿, SDA口上的数据移入寄存器, 在SH_CP的第9个上升沿, 数据开始从QS 移出。如果把第一个74HC595的QS和第二个74HC595 的SDA 相接, 数据即移入第二个74HC595中,照此一个一个接下去, 可接任意多个。数据全部送完后, 给ST_CP一个上升沿, 寄存器中的数据即置入锁存器。此时如果EN 为低电平, 数据即从并口Q0~Q7输出, 把Q0~Q7 与LED的8 段相接, LED就可以实现显示了。要想软件改变LED的亮度, 只需改变EN的占空比就行了。 实验原理及内部结构:

如图所示: 74HC595 内含8 位串入、串/并出移位寄存器和8位三态输出锁存器。 寄存器和锁存器分别有各自的时钟输入(SH_CP和ST_CP) , 都是上升沿有效。 当SH_CP从低到高电平跳变时,串行输入数据(SDA) 移入寄存器; 当ST_CP从低到高电平跳变时, 寄存器的数据置入锁存器。 清除端(CLR) 的低电平只对寄存器复位(QS 为低电平) ,而对锁存器无影响。 当输出允许控制(EN) 为高电平时, 并行输出(Q0~Q7) 为高阻态, 而串行输出(QS) 不受影响。 74HC595 最多需要5 根控制线,即SDA、SH_CP、ST_CP、CLR 和EN。其中CLR 可以直接接到高电平, 用软件来实现寄存器清零; 如果不需要软件改变亮度, EN可以直 接接到低电平, 而用硬件来改变亮度。把其余三根线和单片机的I/ O 口相接, 即可实现对LED 的控制。数据从SDA 口送入74HC595 ,在每个SH_CP的上升沿, SDA 口上的数据移入寄存器, 在SH_CP的第9个上升沿, 数据开始从QS 移出。如果把第一个 74HC595 的QS和第二个74HC595 的SDA 相接, 数据即移入第二个74HC595 中, 照此一个一个接下去, 可接任意多个。数据全部送完后, 给ST_CP 一个上升沿,寄存器中的数据即置入锁存器。此时如果EN 为低电平, 数据即从并口Q0~Q7 输出, 把Q0~Q7 与LED 的8 段相接, LED就可以实现显示了。要想软件改变LED 的亮度, 只需改变EN 的占空比就行了。。LED 的亮度用PR1~PR3 的阻值来控制。P1 口的P115 、P116 、P117 用来控制LED 的显示,分别接到ST_CP、SH_CP和SDA 脚。 实验内容: 按下图连接器件:

74HC595实现多位LED显示的方法

74HC595实现多位LED显示的方法 单片机应用系统中使用的显示器主要有LED和LCD两种。近年来也有用CRT显示的。前者价格低廉,配置灵活,与单片机接口方便;后者可进行图形显示,但接口较复杂,成本也较高。LED(Ling Emiting Diode)是发光二极管的缩写。实际应用非常普遍的是八段LED显示器。LED显示器在大型报时屏幕,银行利率显示,城市霓虹灯建设中,得到广泛应用。在这些需要多位LED显示的场合,怎样实现系统稳定,价格低廉的显示,成为决定其成本的关键所在。 2 74HC595实现LED静、动态显示基本原理 74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。而且价格低廉. 2.1 静态显示 每位LED显示器段选线和74HC595的并行输出端相连,每一位可以独立显示(见图1)。在同一时间里,每一位显示的字符可以各不相同(每一位由一个74HC595的并行输出口控制段选码)。 N位LED显示要求N个74HC595芯片及N+3条I/O口线,占用资源较多,而且成本较高。这对于多位LED显示很不利。 2.2 动态显示 在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制(见图2)。由于所有LED的段选码皆由一个74HC595并行输

出口控制,因此,在每一瞬间,N位LED会显示相同的字符。想要每位显示不同的字符,就必须采用扫描的方法,即在每一瞬间只使用一位显示字符。在此瞬间,74HC595并行输出口输出相应字符段选码,而位选则控制I/O口在该显示位送入选通电平,以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。由于74HC595具有锁存功能,而且串行输入段选码需要一定时间,因此,不需要延时,即可形成视觉暂留效果。 N位LED显示时,只需要一片74HC595即可完成,成本最低。但是,此种方法的最大弱点就是当LED的位数大于12位时,出现闪烁现象,这是所有动态LED显示方式共同的弱点。 3 多位LED显示方法的实现 74HC595具有一个8位串行输入并行输出的移位寄存器和一个8位输出锁存器。 ;================================================ ;74HC595 走马灯演示程序 ;================================================ SDATA_595 EQU P1.0 ;串行数据输入 SCLK_595 EQU P1.1 ;移位时钟脉冲 RCK_595 EQU P1.2 ;输出锁存器控制脉冲 ;================================================ ORG 0000H LJMP MAIN ORG 0030H ;================================================ MAIN: MOV SP,#60H MOV R0,#0FEH MAIN1: CALL OUT_595 CALL DELAY MOV A,R0 RL A MOV R0,A JMP MAIN1 ;--------------------------------------------------------------- ;输出锁存器输出数据子程序 ;--------------------------------------------------------------- OUT_595: LCALL WR_595 CLR RCK_595

51单片机驱动74HC595的编程及使用要点

74595外形图 ______ QB--|1 16|--Vcc QC--|2 15|--QA QD--|3 14|--SI QE--|4 13|--/G QF--|5 12|--RCK QG--|6 11|--SCK QH--|7 10|--/SCLR GND-|8 9|--QH' |_____| 74595的数据端: QA--QH: 八位并行输出端,可以直接控制数码管的8个段。 QH': 级联输出端。我将它接下一个595的SI端。 SI: 串行数据输入端。 74595的控制端说明: /SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。 SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级) RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就 行了。我通常都选微秒级),更新显示数据。 /G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。 注1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。 2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。3)595是串入并出带有锁存功能移位寄存器,

如何控制74hc595驱动led产生灰度等级

如何控制74hc595驱动led产生灰度等级 问: 平常我们用595来驱动led的话要么亮,要么灭,灰度怎么产生呢? 整体的灰度倒是很好控制。直接将数据送号,然后用一个pwm波形控制oe脚就可以了,但是如果要产生一个每个点都好像是有灰度,每个点的灰度值都不同改怎么处理呢? 市面上我见过一种灯饰控制器,七彩的流水效果,各个颜色之间是过渡色,并不是突兀的直接变化,比如大屏幕它们的灰度是怎么控制的呢? ----------------------------------------------------------------------------------------------------------------------------------------- 答: 我本来不想说的,因为以前有人说过现在LED的资料漫天飞,没什么行业秘密16个灰度,也就是 0--15,用4个BIT来表示, 8-4-2-1 用PWM产生4个联系不同占空比的脉冲 T8 8/16 对应BIT8 T4 4/16 对应BIT4 T2 2/16 对应BIT2 T1 1/16 对应BIT1 8/16表示的是把PWM的周期划分为16份,其中量的周期占8份,其他雷同 当这4个脉冲运行后,由于人的生理特点。也会出现需他的灰度; 同上面的方法比较,它需要4次个周期人眼才能感觉出灰度; 但是对PWM的要求就很低;比如256种灰度,不过送8次,1024也不过要10次

大大减低了对硬件的要求,现在基本都是使用这种方法; 在一个595上+出现不同的灰度,就必须结合上面说的东东; 把一个灰度分解成4帧 例如灰度9: 1001 T8 8/16 对应BIT8 T4 不亮对应BIT4 T2 不亮对应BIT2 T1 1/16 对应BIT1 所以我们的各个灰度分解为4帧,送4次都595,就可以了 例如在1个595上出现下面不同灰度的4个点,(就以4个点举例,) 4个点的灰度 3,12,10,7 转化为BIN码 0011 1100 1010 0111 把8-4-2-1码分割出来,得到独立的4帧 BIT8 0 1 1 0 BIT4 0 1 0 1

74HC595的驱动程序

#include #include #define uchar unsigned char sbit mosi = P2^0; sbit sck = P2^1; sbit rck = P2^2; unsigned char qw,bw,sw,gw; unsigned int num=0; unsigned char jishu; unsigned char temp= 0xfe; unsigned char code Disp_Tab[] = { 0xee,0x48,0x76,0xB6,0x9a,0xbc,0xfc,0x86,0xfe,0xbe}; void delay(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i < 50; i++); } } void hc595sendbyte(unsigned char date) { unsigned char i; for(i=0;i<8;i++) { if((date >> i)& 0x01)mosi=1; else mosi=0; sck=0; delay(1); sck=1; } } void display() { rck=0; qw=num/1000; bw=num%1000/100; sw=num%1000%100/10; gw=num%1000%100%10;

hc595sendbyte(Disp_Tab[gw]); hc595sendbyte(Disp_Tab[sw]); hc595sendbyte(Disp_Tab[bw]); hc595sendbyte(Disp_Tab[qw]); rck=1; } void T_init() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; } void main(void) { T_init(); while(1) { display(); } } void T0_time() interrupt 2 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; jishu++; if(jishu==6) { jishu=0; num++; if(num==9999)num=0; } }

74HC595驱动两位数码管程序Word版

/*==================================================================== ====================================================================== ==*/ /*============================================================================= ==============================================================*/ #include #include #include #include #include #define unchar unsigned char #define unint unsigned int #define unlong unsigned long /*============================================================================= ==============================================================*/ /*============================================================================= ==============================================================*/ #define dmx_total_data 3 #define DMAX 101 #define DMIN 0 #define CONTIME_T1 20000 #define CONTIME_T3 200 #define CONTIME_T2 100 #define TIME0 256-17 #define BUTTON1 1 #define BUTTON2 2 sfr WDT_CONTR =0XE1; sfr ISP_DATA =0XE2; sfr ISP_ADDRH =0XE3; sfr ISP_ADDRL =0XE4;

74HC595驱动两个7段数码管

一个程序输出正好要用两个BCD数码管显示P0的读出数据,不巧手头只有单个的这种共阳极7段数码管。 于是用两片74HC595驱动了这两个数码管,达到显示数据的目的。 网上的很多程序都是74HC595驱动多位数码管的,如果要驱动这样比较“原始”的单个数码管,只好自己参考了一些程序,改写了程序,仿真以及实践成功。 本程序简单修改也可以用在其他74HC595电路以及7段数码管驱动等应用上。 Proteus仿真画面如下: 源程序如下: #include //51头文件 #include//“空指令”头文件 sbit H_SH=P3^0; sbit H_DS=P3^1; sbit H_ST=P3^2; //H 管脚定义 sbit L_SH=P3^3; sbit L_DS=P3^4; sbit L_ST=P3^5; //L 管脚定义 int num[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f, 0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管,先显示A~H各段,确认各段电路是否正常,然后显示0~F。 // int num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码管的编码 //-----延时子程序------ void delay(int i) //延时大小与i有关 { int j; while(i--) for(j=255;j>0;j--) ; } //-----LED显示子程序------ void led() { static int j=0; int i; for(i=0;i<8;i++) { H_DS=(num[j]<

74hc595芯片使用方法

74hc595芯片使用方法 来源:互联网作者: 关键字:74hc595芯片 74hc595外形图 74595的数据端: QA--QH: 八位并行输出端,可以直接控制数码管的8个段。 QH': 级联输出端。将它接下一个595的SI端。 SI: 串行数据输入端。 74595的控制端说明: /SCLR(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。 SCK(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级) RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。 /G(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。 注1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。 2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。 3)595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,在正常使用时SCLR为高电平,G为低电平。从SER每输入一位数据,串行输595是串入并出带有锁存功能移位寄存器,它的使用方法很简单,如下面的真值表,在正常使用时SCLR为高电平,G为低电平。从SER每输入一位数据,串行输入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。入时钟SCK上升沿有效一次,直到八位数据输入完毕,输出时钟上升沿有效一次,此时,输入的数据就被送到了输出端。 595具体使用的步骤: 第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。

74HC595 驱动88点阵

开始课程设计的题外话+74HC595 驱动8*8点阵 这学期要做单片机的课程设计我这个不靠谱的小组长折腾着我们组的成员把开始定好的题目换成了做俄罗斯方块 元件是专业统一买现在东西还没回来先把原理和软件这一部分搞清楚 【外观】 用6个8*8的LED点阵做显示屏 1个开关按钮;1个复位按钮 有左右下翻转4个控制按钮 用小喇叭加入音效,1个开/关音效按 两层设计上面层放点阵屏幕和7个按钮下面层放芯片喇叭等等其他所有元件←希望放得下 【功能】 初步—— 俄罗斯方块的基本功能:1能随机落下6种方块;2操作按钮能控制方块移动;3触底判断是否满屏,满屏则结束游戏,未满屏判断是否满行,满行则消除行,进入下一次循环; 次之—— 1开机加入logo与欢迎界面;2游戏中加入音效;3保存最高分值;4可选择游戏难度嗯………………想到再加 74HC595 驱动8*8点阵 8X8点阵共由64个发光二极管组成且每个发光二极管是放置在行线和列线的交叉点上当对应的某一行置1电平某一列置0电平则相应的二极管就亮

移位锁存器74HC595(74LS595)原理:74HC595为8位输出锁存移位寄存器RESET: 复位信号 shitf clock:移位时钟 serial data input: 串行数据输入 output enable:输出使能 latch clock:锁存时钟 595有3层结构: 第一层为移位D触发器; 第二层为锁存D触发器; 第三层为输出3态门; 当复位信号为0时,移位D触发器清0; 当移位脉冲从L->H时,第一个移位D触发器的Q=D;其它的Qn=Qn-1;当锁存脉冲从0->1时,第二层为锁存D触发器的输出=/输入; 当OE=1时,595的输出为高阻态; 当OE=0时,595的输出为第二层为锁存D触发器的输出的反相;

相关文档
最新文档