74HC595驅(qū)動(dòng)24位數(shù)碼管
74HC595是一個(gè)8位移位寄存器的數(shù)字芯片,并具有輸出鎖存和三態(tài)輸出。
既然可以驅(qū)動(dòng)了那么多的數(shù)碼管,驅(qū)動(dòng)大屏點(diǎn)陣還是夢(mèng)?絕對(duì)不是夢(mèng)?
引腳功能:
第8腳GND,電源地。
第16腳VCC,電源正極
第14腳DATA,串行數(shù)據(jù)輸入口,顯示數(shù)據(jù)由此進(jìn)入,必須有時(shí)鐘信號(hào)的配合才能移入。
第13腳EN,使能口,當(dāng)該引腳上為“1”時(shí)QA~QH口全部為“1”,為“0”時(shí)QA~QH的輸出由輸入的數(shù)據(jù)控制。
第12腳STB,鎖存口,當(dāng)輸入的數(shù)據(jù)在傳入寄存器后,只有供給一個(gè)鎖存信號(hào)才能將移入的數(shù)據(jù)送QA~QH口輸出。
第11腳CLK,時(shí)鐘口,每一個(gè)時(shí)鐘信號(hào)將移入一位數(shù)據(jù)到寄存器。
第10腳SCLR,復(fù)位口,只要有復(fù)位信號(hào),寄存器內(nèi)移入的數(shù)據(jù)將清空,顯示屏不用該腳,一般接VCC。
第9腳DOUT,串行數(shù)據(jù)輸出端,將數(shù)據(jù)傳到下一個(gè)。
第15、1~7腳,并行輸出口也就是驅(qū)動(dòng)輸出口,驅(qū)動(dòng)LED。
附上仿真圖:
驅(qū)動(dòng)程序也很簡(jiǎn)單:#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() //中斷和定時(shí)器初始化{IE=0x82; //打開(kāi)總中斷,定時(shí)器T1和T0中斷TMOD=0x01; //設(shè)定T1,T0位工作方式1TH0=0x9e;TL0=0x58; //T0裝初值TR0=1; //開(kāi)始時(shí)鐘開(kāi)始工作}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 //定時(shí)器0,工作方式1,時(shí)鐘中斷{TH0=0x9e;TL0=0x58; //T0裝初值count++;if(count==40){count=0;sec++; if(sec==60){sec=0;min++;if(min==60)min=0;}}}
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
c++相關(guān)文章:c++教程
評(píng)論