关于单片机的一些小实验_04利用IO口线模拟同步串口驱动74HC595控制八个LED灯花样显示
移位寄存器74hc595控制8位数码管
一不用单片机串口电路原理图:C程序:#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit QS=P2^0; // 串行数据输入端sbit shuchu=P2^1; // 存储寄存器脉冲输入sbit yiwei=P2^2; // 移位寄存器脉冲输入sbit Q1=P2^3; //38译码器输入选择sbit Q2=P2^4;sbit Q3=P2^5;uchar shuma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}void wei(uchar z) //数码管位选择{Q1=z&0x01;Q2=(z>>1)&0x01;Q3=(z>>2)&0x01;}void display(){uchar i,j,temp;for(i=0;i<8;i++){wei(i);temp=shuma[i];for(j=0;j<8;j++){QS=temp&0x80;yiwei=0;yiwei=1;temp=temp<<1;}shuchu=0;shuchu=1;delay(2);for(j=0;j<8;j++) //消影{QS=1;yiwei=0;yiwei=1;}}}void main(){while(1){display();}}二用单片机串口(P3^0和P3^1)电路原理图:C程序:#include<REG51.H>#define uint unsigned int#define uchar unsigned char//sbit QS=P3^0; // 串行数据输入端sbit shuchu=P3^2; // 存储寄存器脉冲输入//sbit yiwei=P3^1; // 移位寄存器脉冲输入sbit Q1=P3^3; //38译码器输入选择sbit Q2=P3^4;sbit Q3=P3^5;uchar shuma[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};/*由于串口发送是由低向高发送,所以得把数码从高低位调换如‘0’码为0xco 11000000换为00000011 0x03*/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}void wei(uchar z) //数码管位选择{Q1=z&0x01;Q2=(z>>1)&0x01;Q3=(z>>2)&0x01;}void display(){uchar i;for(i=0;i<8;i++){wei(i); //选择数码管位SBUF=shuma[i]; //向串口缓冲寄存器中存入数据while(!TI); //等待发送完成TI=0; //清楚发送完成标志shuchu=0; //输出shuchu=1;delay(2);SBUF=0xff; //消影while(!TI);TI=0;}}void main(){/*单片机上电后默认为串口方式0,所以不需要设置串口模式*/ // EA=1; //开总中断// ES=1; //开串口中断// IE=0x90;/*SM0=0; //选择串行工作模式0SM1=0;*/// TCON=0x00;// TI=0;while(1){display();}}。
串入并出芯片74HC595应用实例
基于proteus的51单片机仿真实例七十五、串入并出芯片74HC595应用实例标签: proteus单片机实例芯片应用2010-02-24 00:331、本例中利用一片595控制一个数码管显示。
实现了利用3个IO口控制8位数据的输出2、74HC595的控制端口:1)SH_CP(11脚):移位时钟脉冲输入端。
在上升沿时移位寄存器将数据移位2)DS(14脚):串行数据输入端。
本例通过移位运算将每次移位的数据送到PWD寄存器的进位标志位CY,CY再将值传递给DS引脚,8次移位后完成一个字符的串行传送。
3)ST_CP(12脚):锁存脉冲控制端,在上升沿时移位寄存器的数据被传入存储寄存器,这时如果OE端为低电平,传入存储器的数据会直接输出到输出端Q0-Q7。
本例在一个字节的移位操作完成后,通过在ST_CP端产生一个上升沿将数据送出。
4)/MR(10脚):低电平时将移位寄存器数据请0.一般情况下接VCC5)/OE(13脚):高电平时输出端禁止输出(高阻态)。
低电平时允许数据输出使用74HC595的优点是能锁存数据,这样在移位过程中可以保持输出端的数据不变。
而74HC164则没有这种功能。
//利用74HC595实现端口扩展#include <reg51.h> // 寄存器头文件包含#include <intrins.h> // 空操作函数,移位函数头文件包含sbit SH_CP = P2^0; //移位时钟脉冲端口sbit DS = P2^1; // 串行数据输入端口sbit ST_CP = P2^2; //锁存端口unsigned char temp;unsigned char code disp_buff[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管段码表//延时函数void delayms(unsigned int x){unsigned char i;while(x--){for(i = 0;i < 120;i++);}}//串行输入函数void input_595(void){unsigned char i;for(i = 0;i < 8;i++){temp <<= 1; // 数据移位DS = CY; //产生一个时钟上升沿,使数据移位SH_CP = 1; //_nop_();_nop_();SH_CP = 0;}}//数据并行输出函数void output_595(void){ST_CP = 0; // 锁存器端口产生一个上升沿,将数据输出_nop_();ST_CP = 1;_nop_();ST_CP = 0; //锁存数据}//void main(void){unsigned char i;while(1){for(i = 0;i < 10;i++){temp = disp_buff[i]; //数码管显示input_595(); //将一个字节的数据串行输入595output_595(); //595移位寄存器数据传输到存储寄存器,并输出到数据端口 delayms(500);}}}3、在keil c51中新建工程ex63,编写如下程序代码,编译并生成ex63.hex文件4、在proteus中新建仿真文件ex63.dsn,电路原理图如下所示5、将ex63.hex文件载入at89c51中,启动仿真,按动拨码开关,观察运行结果。
74HC595芯片对单片机IO口的扩展原理与应用
2020年第4期信息与电脑China Computer & Communication软件开发与应用74HC595芯片对单片机IO 口的扩展原理与应用杨恒敏(江苏联合职业技术学院扬州分院,江苏 扬州 225003)摘 要:单片机在使用过程中存在IO 端口有限的性能缺陷,笔者针对利用74HC595芯片扩展单片机IO 口的基本原理进行了详细分析,围绕流水灯效果、电子游戏扑克机、16×32LED 点阵显示器3个层面,探讨了单片机IO 口扩展的具体设计方案与实现路径,以期为顺利解决单片机IO 口紧缺问题提供借鉴。
关键词:74HC595芯片;单片机;IO 口扩展中图分类号:TP368.1 文献标识码:A 文章编号:1003-9767(2020)04-120-03Expanding Principle and Application of 74HC595 Chip to IO Port of SingleChip MicrocomputerYang Hengmin(Yangzhou Branch of Jiangsu Union Technical Institute, Yangzhou Jiangsu 225003, China)Abstract: There are limited performance defects of IO ports in the use of single-chip microcomputers. This article analyzesthe basic principles of using 74HC595 chip to expand the single-chip IO ports. At the level, the specific design scheme and implementation path of the expansion of the IO port of the single-chip microcomputer are discussed, in order to provide a reference for the smooth solution of the shortage of the IO port of the single-chip microcomputer.Key words: 74HC595 chip; single chip microcomputer; IO port expansion0 引言当前在使用单片机的过程中常面临IO 端口紧缺的问题,74HC595芯片作为一种通用位移缓存器,可实现8位串行输入/输出或并行输出,其电路连接方式与代码编程较为简单、驱动能力较强,并且凭借存储寄存器可保障在移位过程中并排输出端口数据不变,易于实现对单片机IO 口的扩展,具备良好的应用价值。
最详细的74HC595芯片使用方法介绍
最详细的74HC595芯片使用方法介绍2010-01-17 00:07:05 来源: 电子工程师论坛Arduino采用的ATmega168芯片带12个数字I/O管脚,其中每个都可以对一个数字量进行控制,从而实现类似于点亮一个发光二极管这样的功能。
在实际的工程应用里,有时我们可能会遇到需要对更多的数字量进行控制的场合,比如同时控制16个发光二极管,这时Arduino自带的数字I/O管脚就不够用了,必须进行相应的扩展。
其中一种可行的办法就是借助74HC595这样一个8位串入并出移位寄存器,这个芯片能够多个级连起来一起使用,因此理论上能够通过Arduino上有限的几个管脚(最少三个)产生任意多个的数字输出。
74HC595同数据相关的引脚可以分为三类:DS:串行数据输入,接Arduino的某个数字I/O引脚。
Q0~Q7:8位并行数据输出,可以直接控制8个LED,或者是七段数码管的8个引脚。
Q7′:级联输出端,与下一个74HC595的DS相连,实现多个芯片之间的级联。
74HC595同控制相关的引脚一共有四个:SH_CP:移位寄存器的时钟输入。
上升沿时移位寄存器中的数据依次移动一位,即Q0中的数据移到Q1中,Q1中的数据移到Q2中,依次类推;下降沿时移位寄存器中的数据保持不变。
ST_CP:存储寄存器的时钟输入。
上升沿时移位寄存器中的数据进入存储寄存器,下降沿时存储寄存器中的数据保持不变。
应用时通常将ST_CP置为低点平,移位结束后再在ST_CP端产生一个正脉冲更新显示数据。
MR:重置(RESET),低电平时将移位寄存器中的数据清零,应用时通常将它直接连高电平(VCC)。
OE:输出允许,高电平时禁止输出(高阻态)。
引脚不紧张的情况下可以用Arduino的一个引脚来控制它,这样可以很方便地产生闪烁和熄灭的效果。
实际应用时可以将它直接连低电平(GND)。
对于一个最简单的74HC595应用来讲,可以用Arduino的三个数字I/O端口分别控制DS、SH_CP和ST_CP,然后将MR和OE分别接VCC和地。
基于51单片机之74HC595实验例程
74HC595初始化调用:HC595_Init();参数:返回值:结果:备注:
*****************************ห้องสมุดไป่ตู้***************************void
HC595_Init(void){ucharj;for(j=0;j<8;j++){temp=temp<<1;//会把最高
基于51单片机之74HC595实验例程
**************************Copyright(C)CaKe
*****************************************
=============================================================
主函数调用:参数:返回值:结果:备注:
**************************************************************void
main(){SCLK_595=0;RCK_595=1;while(1){uchari;for(i=0;
i<8;i++){temp=DAT[i];HC595_Init();delay(100);}
时钟脉冲sbitSDATA_595=P2;//串行数据输入sbitRCK_595=P2 ;
//输出锁存器控制脉冲uchar
temp;*********************************************************函数名:
延时子程序调用:delay();参数:返回值:结果:备注:
74hc595的用法 -回复
74hc595的用法-回复74HC595是一种串行输入/并行输出的8位移位寄存器,被广泛应用于数字电路和嵌入式系统设计中。
它是通过串行数据输入的方式将数据存储在内部的8位移位寄存器中,并且可以通过并行输出的方式将数据输出到8个输出引脚上。
本文将一步一步回答有关74HC595的用法。
第一步:了解74HC595的引脚功能74HC595一共有16个引脚,每个引脚都有特定的功能。
以下是74HC595引脚的功能解释:- SER(Serial Data Input):串行数据输入引脚,用于输入要存储的数据。
- SRCLK(Shift Register Clock Input):移位寄存器时钟输入引脚,通过上升沿或下降沿的时钟信号,将串行输入的数据存储到移位寄存器中。
- RCLK(Register Clock Input):寄存器时钟输入引脚,通过上升沿或下降沿的时钟信号,将移位寄存器中的数据并行输出到输出引脚上。
- OE(Output Enable):输出使能引脚,通过控制该引脚的高低电平,可以使输出引脚处于高阻态或工作态。
- STCP(Storage Register Clock Input):存储寄存器时钟输入引脚,通过上升沿或下降沿的时钟信号,将移位寄存器中的数据存储到存储寄存器中。
- SHCP(Shift Register Clock Input):移位寄存器时钟输入引脚,通过上升沿或下降沿的时钟信号,将存储寄存器中的数据并行输出到输出引脚上。
- Q0-Q7(Parallel Data Outputs):并行数据输出引脚,通过并行方式输出存储在移位寄存器中的数据。
第二步:连接74HC595到微控制器为了正确使用74HC595,需要将其连接到微控制器或其他数字电路中。
以下是连接74HC595到微控制器的步骤:1. 将74HC595的VCC引脚连接到微控制器的电源引脚,并确保电压匹配(一般为5V)。
2. 将74HC595的GND引脚连接到微控制器的地引脚。
单片机驱动数码管设计详解(用74HC595实现)
单⽚机驱动数码管设计详解(⽤74HC595实现)简单设计了⼀个单⽚机驱动数码管的电路,该设计中只使⽤了4位数码管,占⽤了单⽚机3个IO⼝,如果驱动芯⽚全⽤满可以驱动8位数码管。
仅供初学者分享学习。
1. 数码管显⽰设计本设计使⽤了⼀个4位的数码管,为共阳型,为了节省单⽚机的IO⼝,使⽤了两⽚74HC595作为数码管的驱动芯⽚,共占⽤3个IO⼝。
74HC595部分电路图如下:与单⽚机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。
两⽚595采⽤级联⽅式,即U2的第9脚接到U3的第14引脚。
2. 74HC595简介74HC595是8位的移位寄存器,串⼊并出,并具有锁存功能,被⼴泛的⽤于数码管、点阵的驱动电路中。
其管脚介绍如下:15:数据输出A-接数码管数据A段;1:数据输出B-接数码管数据B段;2:数据输出C-接数码管数据C段;3:数据输出D-接数码管数据D段;4:数据输出E-接数码管数据E段;5:数据输出F-接数码管数据F段;6:数据输出G-接数码管数据G段;7:数据输出H-接数码管数据H段;16:电源正脚-接电源正;8:电源负脚-接电源负;14:数据输⼊脚-接单⽚机管脚;12:数据锁存时钟-接单⽚机管脚;11:数据输⼊时钟-接单⽚机管脚;13:使能输出脚-低电平有效,接低电平;10:数据清零-不清零,接⾼电平;9:数据级联输出-接下⼀⽚595的数据输⼊脚;74HC595的真值表如下:知道了74HC595的引脚定义和真值表,那该如何编程呢?下⾯重点来了,通过时序图来编程。
看重点!!!3. 74HC595时序图我是重点!我是重点!我是重点!通过时序可以看出:1. SCK是上升沿的时候要把数据写⼊;2. RCK是上升沿的时候数据才能锁存显⽰;3. 有数据操作的过程中RESET必须是⾼电平;4. EN必须是低电平,595才能⼯作;知道了以上4点就可以写程序了。
其中3、4条是硬件连接上的事情(也可以⽤单⽚机的IO⼝来连接,这样的话可以随时控制74HC595的⼯作与否情况)。
74HC595芯片的应用实例
74HC595 芯片的应用实例
在学习51 单片机控制LED 点阵的时候碰到74HC595 芯片,大学学的数电知识忘了差不多了,就在网上搜了一些资料,看到这篇写的不错,把大部分文章转过来,最后面是我的开发板里的程序资料。
下面是正文:
这个夏季学习semiok 同学自己动手焊接了一个LED 显示屏,MCU 用的是ATmega16,实现字幕的滚动显示,由于成本问题,只做了16*64 大小的,也就只能显示4 个中文汉字,这是研究显示驱动的时候找到的关于74HC595 的资料,有时间就把所有制作过程放上来。
正面样子还行
背面惨不忍睹
74HC595 同数据相关的引脚可以分为三类:
SDI:串行数据输入,接单片机的某个I/O 引脚。
Q0~Q7:8 位并行数据输出,可以直接控制8 个LED,或者是七段数码管。
74hc595驱动led点阵原理及74HC595在8x8LED点阵中的应用
74hc595驱动led点阵原理及74HC595在8x8LED点阵中的应用74HC595工作原理只有1个移位寄存器,但有1+8个,共9个锁存器。
其中第1个锁存器可以理解为中转前置锁存器,它并没有连接Q0-Q7,后面8个锁存器连接了Q0-Q7。
当第1次SCK和LCK时,移位寄存器中=第1位数据,前置锁存器=第1位数据。
但是并没有进入到Q0-Q7所对应的锁存器当中去。
Q0到Q7=NON。
当第2次SCK和LCK时,移位寄存器中=第2位数据,前置锁存器=第2位数据。
同时前置锁存器把之前的第1位数据才更新到Q0对应的锁存器当中去。
此时Q0=第1位。
Q1到Q7=NON。
当第3次SCK和LCK时,移位寄存器中=第3位数据,前置锁存器=第3位数据。
同时前置锁存器把之前的第2位数据才更新到Q0对应的锁存器当中去,Q0把之前的第1位数据给Q1,此时Q0=第2位。
Q1=第1位。
Q2到Q7=NON。
当循环8次后(给出8个SCK和8个LCK后),移位寄存器中=第8位数据,前置锁存器=第8位数据。
但Q0-Q6里分别对应第7位-第1位数据,第8位数据并没有更新到Q0,同时Q7=NON。
这就是为什么给出循环8次的程序,总是不能显示第8位数据的原因。
因此要全部显示8位,需要再多给一次SCK和LCK。
那么问题来了,最后给这次SCK和LCK,全部显示8位了。
但是:移位寄存器和前置锁存器中又锁定了8位之外的第9位无用数据。
那么我们就可以用到SCLR(10脚)了。
给SCLR一个下降沿就可以了。
这个下降沿同时清空移位寄存器和前置锁存器。
但并不立即生效!只有产生下一个SCK时,才生效。
所以,SCLR时,前置锁存器和Q0-Q7锁存器依然锁定的是原来的数据,直到下一个SCK 之前,不会改变输出内容。
而等我们下一次再传送一个新的8位数据时,在第一个SCK的时候,SCLR生效之后才接收新数据,因为不会影响接收新数据。
这个过程我称之为“收口操作“。
74HC595在【8x8LED点阵】中的应用每个灯就相当于坐标图中的一个点,具有唯一独特的坐标位置,这样就可以通过引脚的信号来控制每个灯的关和开col管脚连接的是P0的八个引脚,row管脚连接的是595的八位并行输出端。
74hc595 工作原理
74hc595 工作原理
74HC595是一种集成电路芯片,它提供了一个8位的移位寄存器和一个串行输入/串行并行输出功能。
该芯片的工作原理如下:
1. 时钟信号:74HC595通过外部提供的时钟信号进行工作。
时钟信号用于同步数据的移位操作。
2. 数据输入:通过串行输入引脚SER输入数据。
当时钟信号的上升沿到达时,输入数据被移入移位寄存器中的第一个位。
之后,每个时钟信号的上升沿,数据将向左依次移位,直到移位寄存器中的最后一个位。
3. 移位寄存器:移位寄存器是由8个触发器组成,每个触发器都可以存储一个位的值(0或1)。
在数据输入完成后,每个触发器存储了相应的数据位。
4. 数据输出:在并行输出模式下,通过并行输出引脚Q0-Q7输出存储在移位寄存器中的数据。
这意味着可以同时输出8个位的数据。
在串行输出模式下,通过引脚Q7'S(又称为Q7'引脚)输出最后一个位的数据。
5. 存储寄存器:存储寄存器用于保存通过移位寄存器移入的数据,以便在输出时能够固定显示。
通过上述过程,74HC595实现了将串行输入的数据移位并以
并行输出的形式存储,从而实现数据的并行输出。
这使得它在需要同时控制多个设备的应用中非常有用,如LED显示、数码管、驱动器等。
关于单片机的一些小实验_04利用IO口线模拟同步串口驱动74HC595控制八个LED灯花样显示
*功能:利用IO口线模拟同步串口驱动74HC595控制LED1~LED8这八个LED灯进行花样流水灯显示。
*硬件条件:1.CPU型号:AT89S52
{
uint8 i;
while(--count != 0)
{
for(i = 0; i < 125; i++); // ";"表示空语句,CPU空转。
}// i从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/********************************************************************************************
*函数名称:main()
*功能:利用IO口线模拟同步串口驱动74HC595控制LED1~LED8这八个LED灯进行花样流水灯显示。
*********************************************************************************************/
typedef signed char int8; //有符号8位整型变量
typedef unsigned short uint16; //无符号16位整型变量
typedef signed short int16; //有符号16位整型变量
typedef unsigned int uint32; //无符号32位整型变量
* 2.晶振:12.000MHz
74hc595级联工作原理
74hc595级联工作原理74HC595是一种级联式移位寄存器,常用于扩展单片机的输出端口。
其工作原理是通过串行输入、并行输出的方式,实现对多个输出口的控制。
我们来了解一下74HC595的基本结构。
它由一个移位寄存器和一个存储寄存器组成。
移位寄存器由8个D触发器构成,可以实现8位二进制数据的移位操作。
存储寄存器用于存储移位寄存器中的数据,并将其输出到8个输出端口。
在74HC595级联的应用中,我们可以将多个74HC595连接在一起,通过级联的方式扩展输出端口数量。
具体连接方式是将一个74HC595的Q7'输出端口连接到下一个74HC595的串行输入端口(SER)。
这样,通过一个时钟信号(SCK)和一个锁存信号(RCK),我们可以将数据从一个74HC595移位到下一个74HC595,并最终输出到扩展的输出端口。
在级联的过程中,需要注意的是,第一个74HC595的串行输入端口(SER)连接到单片机的输出端口,而最后一个74HC595的输出端口则连接到外部设备。
通过移位操作,我们可以将数据从单片机传输到扩展的输出端口,实现对外部设备的控制。
在控制过程中,我们可以通过时钟信号(SCK)来控制数据的移位操作。
当时钟信号的上升沿到来时,数据从一个74HC595移位到下一个74HC595。
而锁存信号(RCK)则用于控制数据的输出。
当锁存信号的上升沿到来时,数据被锁存到存储寄存器中,并同时输出到扩展的输出端口。
在使用74HC595级联时,我们可以通过编程的方式来控制数据的移位和输出。
通过设置串行输入端口(SER)的高低电平,我们可以将相应的数据送入移位寄存器。
然后,通过时钟信号和锁存信号的控制,将数据移位并输出到扩展的输出端口。
需要注意的是,由于74HC595是级联式移位寄存器,数据的传输是串行的,因此在控制过程中需要按照正确的顺序传输数据。
如果顺序出错,将会导致输出端口的控制错误。
总结一下,74HC595级联工作的基本原理是通过串行输入、并行输出的方式,实现对多个输出端口的控制。
利用2片74HC595驱动8个数码管显示
/*---------------------------------------------*/ unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0 1 2 3 4 5 6 7 8 9
} 注:74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25m A)比74595(35mA)的要小,14脚封装,体积也小一些。 74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在 串行速度慢的场合很有用处,数码管没有闪烁感。 与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。
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++) { SCL1 = 0; //先将移位寄存器控制引脚置为低 //取数据的最高位 //将数据的次高位移到最高位 //再置为高,产生移位时钟上升沿,上升沿时数据寄存器 //循环8次,刚好移完8位
用两片74HC595驱动两个四连体数码管(共阳极,动态扫描) 首先介绍一下74HC595芯片:
74HC595对单片机IO口的扩展及应用
74HC595对单片机IO口的扩展及应用作者:曹少科杨晴陈海宇王硕来源:《科技风》2019年第13期摘要:74HC595是美国国家半导体公司生产的通用位移寄存器芯片,它可以实现8位串行输入输出或者并行输出,操作方便简单,可以很容易的完成对单片机IO口的扩展。
[1]本文主要是介绍用74HC595芯片来扩展IO口详细原理,并利用此方法进行实验,实现流水灯效果。
关键词:单片机;74HC595;扩展IO口;流水灯上世纪70年代到80年代期间,单片机凭借着它体积小,低功耗,性价比高的优势,被越来越多的人所使用,并被广泛运用于各个领域。
但随着科技不断地进步与发展,我們对于单片机的应用更加广泛,我们也慢慢发现了51单片机的一些缺点,即IO端口有限,很多人在运用单片机时总会出现IO口不够用的现象,而74HC595芯片刚好能弥补此缺陷,大量扩展单片机的IO口。
174HC595芯片的选择74HC595是硅结构的CMOS器件,能实现串入转并入,数据通过一个IO串口输入后经过74HC595后将数据8位并行输出。
[2]74HC595与74HC164芯片功能基本相同,但前者价格更低廉,驱动能力更强,操作简单,但因为74HC595有存储寄存器,所以在移位的过程中,并排输出端口的数据保持不变。
所以选用74HC595芯片来扩展51单片机IO口比较合适。
2扩展方案2.1硬件连接与实现原理若要以74HC595芯片实现对IO口的扩展,首先需要定义一个单片机I0口与74HC595芯片DS相连,以此来控制串行数据的输入。
而移位寄存器和存储寄存器是不同的时钟,当SH_CP处于上升沿时,数据会输入到移位寄存器中,当ST_CP处于上升沿时会传入的存储寄存器中。
因此两个时钟需要分别进行连接,移位寄存器有串行输入DS引脚、串行输出引脚Q7’和低电平复位引脚MR。
存储寄存器有并行数据输出引脚Q0~Q7和低电平输出有效OE引脚。
所以用MR进行复位时,只是将位移寄存器中的数据清除,而不必担心存储寄存器中的数据有所变化。
使用SPI接口的74HC595控制 8位数码管显示
在介绍例子之前,我们先了解一下硬件连接图,连接如图1所示。
图中共使用三片74HC595芯片,分别控制三个数码管,三片74HC595通过Q7’引脚进行级联。第一片74HC595的DS引脚连接到了ATmega88的MOSI引脚,而SH_CP引脚连接到了ATmega88的SCK引脚,ST_CP引脚连接到了ATmega88的PB1引脚。
使用SPI接口控制74HC595 LED显示
SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。
SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:
(1)MOSI–主器件数据输出,从器件数据输入
(2)MISO–主器件数据输入,从器件数据输出
(3)SCLK–时钟信号,由主器件产生
(4)/SS–从器件使能信号,由主器件控制
在BASCOM中,提供了软件实现的SPI接口的语句,同样BASCOM也有支持硬件SPI的语句。
'--------------------------专用字形表------------------------------------------
Segtab:
Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB7
《单片机原理与应用》实验报告-574hc595实验
leds(255);//全灭
}
4.实验操作说明
第一步:连接电路,上传代码;
第二步:观察数码管的显示情况。
5其他说明
无
6.实验结果
数码管依次循环显示:数字1~9,小数点,全熄灭。
见实验5文件夹下视频:74HC595控制8段数码管。
五、教师评语
签名:
日期:
成绩
《单片机原理与应用》实验报告
实验序号:5实验项目名称:74hc595实验
学 号
1507162233
姓 名
杨舫
专业、班
15计算机
实验地点
指导教师
何一凡
实验时间
2016.10.22
一、实验目的
1.了解74hc595的工作原理
2.掌握74hc595的使用方法
3.熟练掌握Arduino设计的流程、方法
二、实验设备(环境)及要求
delay(1000); //暂停1秒钟让你看到效果
}
void loop()
{
leds(249);//1
leds(164);//2
leds(176);//3
leds(153);//4
leds(146);//5
leds(130);//6
leds(248);//7
leds(128);//8
l
1.原理图
2.实际连接图
3.实验程序代码
int latchPin = 4;
int clockPin = 5;
int dataPin = 2; //这里定义了那三个脚
void setup ()
{
pinMode(latchPin,OUTPUT);
74HC595芯片做单片机IO扩展proteus仿真
74HC595芯片做51单片机IO扩展PROTEUS仿真最近有个小活需要用到IO扩展,经搜索资料,有很多方式,比如MCP23017/MCP23S17、74HC595、8255A、74HC164、74HC138等,经对比我选择74HC595,MCP23017/MCP23S17相对功能更好些,可以做输入输出使用,74HC595只能用作输出,8255A采用并行口扩展,74HC164的缺点是没有输出寄存器,移位过程中输出端数据不稳定,且没有串行输出接口。
一、74HC595芯片介绍595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
芯片引脚定义图:/MR(10脚): 低电平时将移位寄存器的数据清零。
通常接到VCC防止数据清零。
SH_CP(11脚):上升沿时数据寄存器的数据移位。
Q0->Q1->Q2-->Q3-->...-->Q7;下降沿移位寄存器数据不变。
(脉冲宽度:5V时,大于几十纳秒就行了。
我通常都选微秒级)ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
通常我将ST_CP置为低电平,当移位结束后,在ST_CP端产生一个正脉冲(5V时,大于几十纳秒就行了。
我通常都选微秒级),更新显示数据。
/OE(13脚): 高电平时禁止输出(高阻态)。
如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。
比通过数据端移位控制要省时省力。
二、PROTEUS仿真按下图在PROTEUS中做好连线Keil下编写C51程序如下:#include<reg52.h>typedef unsigned char uint8_t;typedef unsigned short int uint16_t;typedef unsigned int uint32_t;sbit ST_CP = P2^7; //输出时钟sbit DS = P2^6; //串行数据输入sbit SH_CP = P2^5; //输入时钟uint16_tled_buff[]={0xfffe,0xfffd,0xffb,0xfff7,0xffef,0xffdf,0xffbf, 0xff7f,0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff};void send_byte16(uint16_t byte16)//发送16位数据{uint8_t i=0;for(i=0;i<16;i++){if((byte16<<i)&0x8000){DS = 1;SH_CP = 0;SH_CP = 1;}else{DS = 0;SH_CP = 0;SH_CP = 1;}}ST_CP = 0;ST_CP = 1;}/*** @brief :1MS延时函数* @note :12MHz 下1MS延时 */static void drv_delay_1ms( ) {uint16_t Ms = 1;uint32_t j = 80;while( Ms-- ){while( j-- );}}/*** @brief :MS延时函数* @Ms:延时的MS数*/void drv_delay_ms( uint16_t Ms ) {while( Ms-- ){drv_delay_1ms( );}}void main(){uint8_t i=0;while(1){for(i=0;i<16;i++){send_byte16(led_buff[i]);drv_delay_ms(1000);send_byte16(0xffff);drv_delay_ms(1000);}}}程序思路:循环16次,在每次时钟ST_CP的上升沿循环串行写入数据到内部寄存器,最后在SH_CP上升沿将寄存器数据并行输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*****************************************************************
***************************
*功能:
利用IO 口线模拟同步串口驱动74HC595控制LED1~LED这八个LED灯进行花样流水灯显示。
*硬件条件:1.CPU型号:
AT89S52
*2. 晶振:12.000MHz
*3. 用短接P2.3__SI2
* 用短接P2.2__RCK2
*用短接P2.1__SCK2
* 日期:
2014 年04 月24 号
*****************************************************************
****************************/
#include "reg52.h"// 包含头文件
/* 与编译器无关的数据类型定义*/
/*****************************************************************
***************************/
typedef unsigned char uint8;// 无符号8 位整型变量
typedef signed char int8;// 有符号8 位整型变量
typedef unsigned short uint16;// 无符号16 位整型变量
typedef signed short int16;// 有符号16 位整型变量
typedef unsigned int uint32;// 无符号32 位整型变量
typedef signed int int32;// 有符号32 位整型变量
typedef float fp32;// 单精度浮点数( 32 位长度) typedef double fp64;// 双精度浮点数( 64 位长度)
/********************************************************************* ***********************/ /* 定义位变量*/
sbit P2_3 = P2 八 3;
sbit P2_2 = P2 八 2;
sbit P2_1 = P2 八 1;
sbit P2_0 = P2 八 0;
#defineSI2_H()(P2_3=1)/定义"SI2_H)为P2.3输出高电平,作为74HC595_2 的数据输入信号
#define SI2_L()(P2_3=0)/定义"SI2_L()'为P2.3输出低电平,作为74HC595_2 的数据输入信号
#define RCK2_H()(P2_2=1)定义"RCK2_H()为P2.2输出高电平,作为
74HC595_2的片选输入信号
#define RCK2_L()(P2_2=0)定义"RCK2_L()为P2.2输出低电平,作为
74HC595_2的片选输入信号
#define SCK2_H()(P2_1=1)定义"SCK2_H()为P2.1 输出高电平,作为
74HC595_2的时钟输入信号
#defineSCK2_L()(P2_仁0)定义"SCK2_L()为P2.1 输出低电平,作为
74HC595_2的时钟输入信号
*****************************************************************
***************************
* 函数名称:Delay() *功能:软件xx *xx 参数:
count xx 参数,值越大,xx 越长
* 出口参数:无
*********************************************************************
************************/
void Delay(uint16 count){uint8 i;
while(--count != 0){for(i = 0; i < 125; i++);〃";"表示空语句,CPU空转。
}//i从0加到125,在12M晶体下CPU大概耗时1毫
******************************************************************
秒}/
**************************
* 函数名称:
SendDataTo74HC595_2()
*功能:
向74HC595_2发送一字节数据
*xx 参数:
data 要发送的数据
出口参数:无* 注意:
发送数据时,高位先发送
*****************************************************************
****************************/
void SendDataTo74HC595_2(uint8 dat){uint8 i;
RCK2_L();〃RCK为低电平
for(i=0;i<8;i++)// 发送8 位数据( 1 个字节) {
SCK2_L();〃SCK为低电平
/*设置SI2的输出值*/
if((dat & 0x80)!=0)
{SI2_H();}〃SI2输出高电平
else
{SI2_L();}〃SI2输出低电平
dat<v=1;〃将要发送的1字节数据左移一位SCK2_H();〃SCK为高电
平}RCK2_H();〃RCK为高电平}/*流水灯花样,低电平点亮,注意调用时用了取反"操作*/ const uint8 DISPLAY_TAB[42]={
0x00,0xff,// 全部熄灭后,再全部点亮
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,/依次逐个点亮
0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,〃依次逐个叠加0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,〃依次逐个递减0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,俩个靠拢后分开
0x81,0xc3,0xe7,0xff,0xff,0xe7,0xc3,0x81,//从两边叠加后递减
};
*****************************************************************
***************************
* 函数名称:
main()
*功能:
利用IO 口线模拟同步串口驱动74HC595控制LED1~LED这八个LED灯进行花样流水灯显示。
*****************************************************************
****************************/
void main (void){uint8 i;
while
(1)〃死循环{for(i=0;i<42;i++){Se ndDataTo74HC595_2(~DISPLAY_TAB[i]输出LED显示数据Delay
(100);//xx}}}。