您现在的位置: 主页 > MCU > 单片机技术应用 > AT89C51串并转换驱动数码管实验指导 -
本文所属标签:
为本文创立个标签吧:

AT89C51串并转换驱动数码管实验指导 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-07 

[导读]器件:74hc595.引脚说明:SDA:数据输入口。SH_CP:数据输入控制端,在每个SH_CP的上升沿, SDA口上的数据移入寄存器, 在 SH_CP的第 9个上升沿, 数据开始从 QS移出。ST_CP:数据置入锁存器控制端。Q0~Q7:数据并行输

器件:74hc595.

本文引用地址: http://www.21ic.com/app/mcu/201111/99291.htm

引脚说明:

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 脚。

实验内容:

按下图连接器件:

 

程序如下所示:

 

 

C程序

 

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit SDA =   P1^1;

sbit SHIFT  =  P1^2;

sbit ST  =  P1^0;

#define NOP _nop_()

uchar led[] = {0x5b,0x3f,0x3f,0x6f};

uchar select[] = {0x0fe,0xfd,0xfb,0xf7};

uchar i=0;

void Init( )

{

  SDA = 0;

  SHIFT = 0;

  ST = 0;

}

void delay()

{

 uchar jj;

 for(jj=0;jj<200;jj++);

 while(jj--);

}

void display(uchar dat)

{

  uchar ii;

  uchar sdata=dat;

 

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

{

    if(sdata&0x80)

SDA=1;

  else

SDA = 0;

    sdata<<=1;

    SHIFT =0;

    NOP;

    NOP;

    SHIFT = 1;

   NOP;

   NOP;

  }

  ST = 1;

  NOP;

  NOP;

  ST = 0;

}

void main()

{

  Init();

  while(1)

{

  delay();

delay();

  P2 = select[i];

  display(led[i]);

  i=(i+1)%4;

  }

}

 



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > AT89C51串并转换驱动数码管实验指导 -
 

"AT89C51串并转换驱动数码管实验指导 -"的相关文章

网站地图

围观()