网站导航: 首页 > 设计参考 > 正文 文章搜索
AT89C51串并转换驱动数码管实验指导
 
文章编号:
091111222418
文章分类: 单片机 51系列
点 击:
...
关 键 词: AT89C51,串并转换,数码管,74hc595
文章来源:
网络
摘 要:
利用74HC595实现数码管的驱动

实现器件: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 脚。

实验内容:
按下图连接器件:
 

程序如下所示:
 

 
  1. #include <reg52.h>   
  2. #include <intrins.h>   
  3. #define uchar unsigned char   
  4. #define uint unsigned int   
  5.   
  6. sbit SDA =     P1^1;   
  7. sbit SHIFT  =  P1^2;   
  8. sbit ST  =  P1^0;   
  9. #define NOP     _nop_()   
  10.   
  11. uchar led[] = {0x5b,0x3f,0x3f,0x6f};   
  12. uchar select[] = {0x0fe,0xfd,0xfb,0xf7};   
  13. uchar i=0;   
  14.   
  15. void Init( )   
  16. {   
  17.   SDA = 0;   
  18.   SHIFT = 0;   
  19.   ST = 0;   
  20. }   
  21.   
  22. void delay()   
  23. {   
  24.  uchar jj;   
  25.  for(jj=0;jj<200;jj++);   
  26.  while(jj--);   
  27. }   
  28.   
  29. void display(uchar dat)   
  30. {   
  31.   uchar ii;   
  32.   uchar sdata=dat;   
  33.   for(ii=0;ii<8;ii++)   
  34.   {   
  35.     if(sdata&0x80)SDA=1;   
  36.  else SDA = 0;   
  37.     sdata<<=1;   
  38.     SHIFT =0;   
  39.     NOP;   
  40.     NOP;   
  41.     SHIFT = 1;   
  42.    NOP;   
  43.    NOP;   
  44.   }   
  45.   ST = 1;   
  46.   NOP;   
  47.   NOP;   
  48.   ST = 0;   
  49. }   
  50.   
  51. void main()   
  52. {   
  53.   Init();   
  54.   while(1){   
  55.   delay();   
  56.   delay();   
  57.   P2 = select[i];   
  58.   display(led[i]);   
  59.   i=(i+1)%4;   
  60.   }   
  61.   
  62. }  

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4