專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

74HC595驅(qū)動24位數(shù)碼管

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2012年01月03日   【字體:

74HC595是一個8位移位寄存器的數(shù)字芯片,并具有輸出鎖存和三態(tài)輸出。
既然可以驅(qū)動了那么多的數(shù)碼管,驅(qū)動大屏點(diǎn)陣還是夢?絕對不是夢?
 
引腳功能:
 
第8腳GND,電源地。
第16腳VCC,電源正極
第14腳DATA,串行數(shù)據(jù)輸入口,顯示數(shù)據(jù)由此進(jìn)入,必須有時鐘信號的配合才能移入。
第13腳EN,使能口,當(dāng)該引腳上為“1”時QA~QH口全部為“1”,為“0”時QA~QH的輸出由輸入的數(shù)據(jù)控制。
第12腳STB,鎖存口,當(dāng)輸入的數(shù)據(jù)在傳入寄存器后,只有供給一個鎖存信號才能將移入的數(shù)據(jù)送QA~QH口輸出。
第11腳CLK,時鐘口,每一個時鐘信號將移入一位數(shù)據(jù)到寄存器。
第10腳SCLR,復(fù)位口,只要有復(fù)位信號,寄存器內(nèi)移入的數(shù)據(jù)將清空,顯示屏不用該腳,一般接VCC。
第9腳DOUT,串行數(shù)據(jù)輸出端,將數(shù)據(jù)傳到下一個。
第15、1~7腳,并行輸出口也就是驅(qū)動輸出口,驅(qū)動LED。
 
附上仿真圖:

驅(qū)動程序也很簡單:
 
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar 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;i<8;i++)
 {
  if(temp&0x80) SDA=1;
  else SDA=0;
  SH=0;
  _nop_();
  _nop_();
  SH=1;
  temp<<=1;  
 }  
}
void init_T()   //中斷和定時器初始化
{
 IE=0x82;  //打開總中斷,定時器T1和T0中斷
 TMOD=0x01;  //設(shè)定T1,T0位工作方式1
 TH0=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;i<5;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;
  }
 }
}
關(guān)閉窗口

相關(guān)文章