新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 74HC595驱动24位数码管

74HC595驱动24位数码管

作者:时间:2012-08-10来源:网络收藏

是一个8位的数字芯片,并具有输出锁存和三态输出。
既然可以驱动了那么多的数码管,驱动大屏点阵还是梦?绝对不是梦?

引脚功能:

第8脚GND,电源地。
第16脚VCC,电源正极
第14脚DATA,串行数据输入口,显示数据由此进入,必须有时钟信号的配合才能移入。
第13脚EN,使能口,当该引脚上为“1”时QA~QH口全部为“1”,为“0”时QA~QH的输出由输入的数据控制。
第12脚STB,锁存口,当输入的数据在传入寄存器后,只有供给一个锁存信号才能将移入的数据送QA~QH口输出。
第11脚CLK,时钟口,每一个时钟信号将移入一位数据到寄存器。
第10脚SCLR,复位口,只要有复位信号,寄存器内移入的数据将清空,显示屏不用该脚,一般接VCC。
第9脚DOUT,串行数据输出端,将数据传到下一个。
第15、1~7脚,并行输出口也就是驱动输出口,驱动LED。

附上仿真图:
点击浏览下一页

驱动程序也很简单:#includereg51.h>#includeintrins.h>#define uchar unsigned charuchar code display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar buf[5];sbit SH=P2^0;sbit SDA=P2^1;sbit ST=P2^2;uchar count,sec,min;void delay(unsigned char i){unsigned char j=220;while(i--)while(j--);}void write_595(uchar p){uchar i,temp;temp=p;for(i=0;i8;i++){if(temp0x80) SDA=1;else SDA=0;SH=0;_nop_();_nop_();SH=1;temp=1;  }  }void init_T()   //中断和定时器初始化{IE=0x82;  //打开总中断,定时器T1和T0中断TMOD=0x01;  //设定T1,T0位工作方式1TH0=0x9e;TL0=0x58;  //T0装初值TR0=1;   //开始时钟开始工作}void main(){uchar scan,i;init_T();while(1){buf[0]=sec%10;buf[1]=sec/10;//  buf[2]=;buf[3]=min%10;buf[4]=min/10;scan=0x01;for(i=0;i5;i++){   ST=0;ST=1;write_595(~display[buf[i]]);      write_595(~display[sec%10]);write_595(~display[sec/10]);write_595(~display[min%10]);   delay(1);P1=~scan;   scan=1;} }}void time_T0() interrupt 1    //定时器0,工作方式1,时钟中断{TH0=0x9e;TL0=0x58;       //T0装初值count++;if(count==40){count=0;sec++; if(sec==60){sec=0;min++;if(min==60)min=0;}}}

c语言相关文章:c语言教程


c++相关文章:c++教程




评论


相关推荐

技术专区

关闭