1.输出数据用cy进位输出
2.使用定时器定时1秒
CY(Carry)在单片机里是进位标志。CY=0是无溢出,CY=1有溢出。用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0。对无符号数的运算,判断只需CY即可,对于无符号数的运算,CY位就可以表示其是否溢出。但如果是有符号数,则不能按CY标志来判断了。
#include #includesbit sbclk=P2^5: //H74HC595的时钟引脚 sbit sbsck=P2^6; //74HC595的控制引脚 sbit sbser=P2^0;//74HC595的数据引脚 unsigned char temp; unsigned char counter=0x00;//计数器 bit bT0flg=0;//T0标志位 unsigned char code sbserY_CODE[]=//字形编码 { 0xc0.0xf9.0xa4.0xb0.0x99,0x92,0x82,0xf8,0x80,0x90, }; /定时器0初始化函数 void InitT0(void) { TMOD=0x01;//使用工作方式1 TH0=0xFF; TL0=0x9C;//100ms定时 ET0=1;//开启定时器0中断 TR0=1;//启动定时器 } //定时器0中断处理函数 void Timer0Deal(void) interrupt 1 using l {ET0=0;//关闭中断 TH0=0xFF;//重新装入预置值 TL0=0x9C; ET0=1://打开T0中断 counter++: if(counter==10)//定时1s { bTOfg=1;//定时器中断标志位置位 counter=0; } } //H74HC595的输出函数,参数为待输出的数据 void output595(unsigned char temp) {unsigned char; for(i=0;i<8;i++) { temp<<=1//移位 sbser=CY;//数据输入 sbclk=1://发送控制信号 _nop_();//延时 _nop_(); sbclk=0;//清除控制信号 } } //74HC595的时钟输出函数 void clk595 () {sbsck=0;//时钟线清除 _ nop _(); sbsck=1;//时钟线++ _ nop _(); sbsck=0; } void main() { unsigned char timer; InitT0();//初始化TO EA=1;//开启中断 while(1)//循环输出0~9 { while(bTOflg==0);//等待秒信号 bTOflg=0; timer++;//秒计数器增加 if(timer>9) { timer=0;//到9则恢复到0 } output595(sbserY_CODE[timer]); clk595(); }}



