74hc595级联程序范例

电子常识

2585人已加入

描述

  74HC595具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器有相互独立的时钟。数据在SH_cp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在ST_cp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。

  74hc595级联程序:

  /****************************************************************************** * *

  远程116

  * 2012.sunmer

  * 双74HC595级联,驱动8位动态数码管, *

  ******************************************************************************/

  #include 《reg52.h》

  sbit ser=P1^0;

  sbit rck=P1^2;

  sbit sck=P1^1;

  unsigned char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳段码 unsigned char no[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码 unsigned char num[8]={2,0,1,2,0,7,1,3}; //显示2012.07.13 unsigned char al; unsigned int add;

  /****************************************************************************** *

  *

  延时函数

  *

  ******************************************************************************/

  /* 延时t毫秒 */

  void delay_ms(unsigned int delaytime)

  {

  unsigned int i,j;

  for(i=0;i《delaytime;i++)

  for(j=0;j《125;j++); /* 对于11.0592M时钟,约延时1ms */ }

  /******************************************************************************

  *

  * 联级595数据传送函数

  * 传送格式(位码,段码)

  *

  ******************************************************************************

  / void send_595_data(unsigned char send_address,unsigned char send_data) {

  unsigned char i,j,temp0,temp1;

  temp0=send_address;

  temp1=send_data;

  if((al==3)||(al==5)) //加小数点

  {

  if(add《300) temp1&=0x7f; }

  for(i=0;i《8;i++) //传送位码 {

  if(temp0&0x80)

  ser=1;

  else

  ser=0;

  temp0《《=1;

  rck=0;

  rck=1; }

  for(j=0;j《8;j++) //传送段码

  {

  if(temp1&0x80)

  ser=1; else ser=0;

  temp1《《=1; rck=0; rck=1;

  }

  sck=0; sck=1;

  //产生上升沿,数据移位并行输出 sck=0; }

  /******************************************************************************

  *

  * 主函数

  *

  ******************************************************************************

  / void main(void)

  {

  for(;;)

  {

  for(al=0;al《8;al++)

  {

  send_595_data(~no[7-al],seg[num[al]]); //显示2012.07.13 } add++;

  if(add==600)

  add=0;

  }

  }

74HC595

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_68235634 2019-01-09
0 回复 举报
请问al代表啥意思,al为啥没有定义 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分