|
/*===============================================================*/
/* 第二組級(jí)聯(lián)74LS595_2數(shù)碼管驅(qū)動(dòng)程序 */
/*===============================================================*/
#ifndef _LS595_2driver_H_
#define _LS595_2driver_H_
sbit RCK_595_2 = P0^4; //第二組級(jí)聯(lián)595的并行輸出時(shí)鐘
sbit DS_595_2 = P0^3; //第二組級(jí)聯(lián)595數(shù)據(jù)線
sbit CLK_595_2 = P0^5; //第二組級(jí)聯(lián)595移位輸入時(shí)鐘
unsigned char code countupseg[] = //第二組595中定義0~9,高亮低滅
{// 0 1 2 3 4 5 6 7 8 9
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
};
unsigned char code roundseg[6]={0x01,0x02,0x04,0x08,0x10,0x20}; //花式旋轉(zhuǎn)
/*延時(shí)函數(shù) 1ms為單位*/
void Delay_ms(unsigned int t) //延時(shí)函數(shù),t/ms
{
unsigned int a,b;
for(a=0;a<t;a++)
{
for(b=0;b<100;b++)
{
_nop_();
}
}
}
/* 向1個(gè)LS595_2寫(xiě)入1個(gè)字節(jié)*/
void Send1byte_595_2(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(dat&0x80)
DS_595_2 = 1;
else
DS_595_2 = 0;
dat <<=1;
CLK_595_2 = 0;
_nop_();
CLK_595_2 = 1;
}
}
/* 向3個(gè)級(jí)聯(lián)LS595_2寫(xiě)入3個(gè)字節(jié)*/
void Send3byte_595_2(unsigned char dat1,unsigned char dat2,unsigned char dat3)
{
Send1byte_595_2(dat1);
Send1byte_595_2(dat2);
Send1byte_595_2(dat3);
}
/*允許將LS595輸出并行數(shù)據(jù)*/
void Out_595_2()
{
RCK_595_2 = 0;
_nop_();
RCK_595_2 = 1;
}
/*顯示倒計(jì)時(shí) 3位*/
void Displaycountupnum(unsigned int num)
{
unsigned int units,tens,hundreds;
units = num%10;
tens = (num/10)%10;
hundreds = num/100;
Send3byte_595_2(countupseg[hundreds],countupseg[tens],countupseg[units]); //顯示倒計(jì)時(shí)的個(gè)、十、百位
Out_595_2();
}
/*大字花式轉(zhuǎn)圈*/
void Displayround()
{
unsigned char j;
for(j=0;j<5;j++)
{
Send3byte_595_2(roundseg[j],roundseg[j],roundseg[j]);
Out_595_2();
Delay_ms(800);
}
}
#endif |
|