52單片機重新上電后不執行while(1)語句 (重新上電8個數碼管只顯示:85-62-32) 而重新燒錄程式會顯示 00-00-00
按道理重新上電顯示 00-00-00 才是正確的啊
void main()
{
InitTIMER0(); //定時器0初始化
a_tmpdisplay[0]= 2; //數據的轉換,因我們采用數碼管1~9的顯示,將數據分開
a_tmpdisplay[1]= 3;
a_tmpdisplay[2]= 10;
a_tmpdisplay[3]= 2;
a_tmpdisplay[4]= 6;
a_tmpdisplay[5]= 10;
a_tmpdisplay[6]= 5;
a_tmpdisplay[7]= 8; //初始化不能放在while 語句里,如放在while語句里數碼管會不顯示
while(1)
{
if(ReadRTC_Flag)
{
ReadRTC_Flag = 0 ;
tiaoshi();
a_tmpdisplay[0]= miao%10; //數據的轉換,因我們采用數碼管1~9的顯示,將數據分開
a_tmpdisplay[1]= miao/10;
a_tmpdisplay[2]= 10;
a_tmpdisplay[3]= fen%10;
a_tmpdisplay[4]= fen/10;
a_tmpdisplay[5]= 10;
a_tmpdisplay[6]= shi%10;
a_tmpdisplay[7]= shi/10;
if(shan==1)
{
shanshuo();
if(mie==1)
{
// if(xuan>3) xuan=1;
switch(xuan)
{
case 1: a_tmpdisplay[7]=11,a_tmpdisplay[6]=11;break;
case 2: a_tmpdisplay[4]=11,a_tmpdisplay[3]=11;break;
case 3: a_tmpdisplay[1]=11,a_tmpdisplay[0]=11;break;
}
}
}
}
}
}
void tim(void) interrupt 1 using 1 //中斷,用于數碼管掃描
{
static unsigned char i,num;
TH0=0xf5;
TL0=0xe0;
P0=smgduan[a_tmpdisplay[i]]; //查表法得到要顯示數字的數碼段
switch(i)
{
case(0):
LC = 0; LB = 0; LA = 0; break;
case(1):
LC = 0; LB = 0; LA = 1; break;
case(2):
LC = 0; LB = 1; LA = 0; break;
case(3):
LC = 0; LB = 1; LA = 1; break;
case(4):
LC = 1; LB = 0; LA = 0; break;
case(5):
LC = 1; LB = 0; LA = 1; break;
case(6):
LC = 1; LB = 1; LA = 0; break;
case(7):
LC = 1; LB = 1; LA = 1; break;
}
i++;
if(i==8)
{
i=0;
num++;
if(10==num) // 隔斷時間讀取1302數據, 時間間隔可以調整
{
ReadRTC_Flag=1; //使用標志位判斷
num=0;
}
}
|