【例4.4】74HC595驱动数码管实现秒计时
1.输出数据用cy进位输出
2.使用定时器定时1秒
CY(Carry)在单片机里是进位标志。CY=0是无溢出,CY=1有溢出。用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0。对无符号数的运算,判断只需CY即可,对于无符号数的运算,CY位就可以表示其是否溢出。但如果是有符号数,则不能按CY标志来判断了。
#include<AT89X52.h>
#include<intrins.h>
sbit sbclk=P2^5:
sbit sbsck=P2^6;
sbit sbser=P2^0;
unsigned char temp;
unsigned char counter=0x00;
bit bT0flg=0;
unsigned char code sbserY_CODE[]=
{
0xc0.0xf9.0xa4.0xb0.0x99,0x92,0x82,0xf8,0x80,0x90,
};
/定时器0初始化函数
void InitT0(void)
{
TMOD=0x01;
TH0=0xFF;
TL0=0x9C;
ET0=1;
TR0=1;
}
void Timer0Deal(void) interrupt 1 using l
{ET0=0;
TH0=0xFF;
TL0=0x9C;
ET0=1:
counter++:
if(counter==10)
{
bTOfg=1;
counter=0;
}
}
void output595(unsigned char temp)
{unsigned char;
for(i=0;i<8;i++)
{
temp<<=1
sbser=CY;
sbclk=1:
_nop_();
_nop_();
sbclk=0;
}
}
void clk595 ()
{sbsck=0;
_ nop _();
sbsck=1;
_ nop _();
sbsck=0;
}
void main()
{
unsigned char timer;
InitT0();
EA=1;
while(1)
{
while(bTOflg==0);
bTOflg=0;
timer++;
if(timer>9)
{
timer=0;
}
output595(sbserY_CODE[timer]);
clk595();
}}
|