单片机怎么写才能让led灯每隔5秒亮下一个并且数码管一直从5到0显示倒计时? 200
设为共阳极七段数码管;
char segCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} //共阳极七段码
char bitCode[]={0x01,0x02,0x04,0x08,0x10,0x20} //共阳极6位位码,高电平有效
/***在指定位显示数据***/
// m为待显示的七段码数据
// k为指定的位显示数据
void show(char m,char k)
{ char dat;
dat = segCode[m]; // m=0,1,2,3,4,5,6,7,8,9
HC573(dat,1); //输出段码
dat = bitCode[k]; // k=0,1,2,3,4,5
HC573(dat,2); //输出位码
}
sbit segm = P2^6; //段锁存
sbit bitc = P2^7; //位锁存
/*** HC573 接收锁存数据***/
void HC573(char dat,char nub)
{
P0=dat;
if(nub==1)
{ segm=1;segm=0;} //输出段锁存信号
if(nub==2)
{ bitc = 1;bitc = 0;} //输出位锁存信号
}
bit intflag;
void main()
{ char times;
intflag=0; times=5;
P1=0xff;
initime0() ; //初始化定时器0
while(1)
{ if(intflag)
{ intflag=0 ;
show(times,0) ; // 因为仅有一位显示,不考虑位扫描问题
times--;
if(times==0) { times=5; P1=~P1; }
}
}
}