通信技術專業畢業設計
}
if((key4==0)&&(tr0==0)) //模式選擇按鈕,僅在停止狀態下有效
{ delay(5);
if(key4==0)
{ mode=~mode;
while(!key4) display();}
}
if((key5==0)&&(tr0==0)) //時間設置,僅在停止狀態下有效
{ delay(5);
if(key5==0)
{ while(!key5)
display();
setup();}
}
}
}
void t0_time() interrupt 1
{ uc m;
th0=0x4b; //定時器定時時間為50ms
tl0=0xff;
m++;
if(m==20)
{ m=0;
if(mode==1) //正向計數
{ num[0]++;
if(num[0]==10)
{ num[0]=0;
num[1]++;
if(num[1]==6)
{ num[1]=0;
num[2]++;
if(num[2]==10)
{ num[2]=0;
num[3]++;
if(num[3]==10)
num[3]=0;}
}
}
}
else
{ num[0]--;
if(num[0]>9)
{ num[0]=9;
num[1]--;
if(num[1]>5)
{ num[1]=5;
num[2]--;
if(num[2]>9)
{ num[2]=9;
num[3]--;
if(num[3]>9)
{ num[3]=0;
tr0=0;
fin_flag=1;
clr();}
}
}
}
}
}
}
void t1_time() interrupt 3
{ uc shan,beep_stop;
th1=0x4b;
tl1=0xff;
shan++;
if(shan==10)
{ shan=0;
set_shan=~set_shan;
if((fin_flag)||(timing)) //當反向計數完成時 或計時時間到時
{ beep_stop++;
beep=~beep;
if(beep_stop==10)
{ fin_flag=0;
timing=0;
num[4]=0;num[5]=0;num[6]=0;num[7]=0;
beep_stop=0;
beep=1;}
}
}
}
2.4軟件仿真
為了使電子數字秒表能實現單片機內部存儲器eeprom,可以存儲十組數據。數碼管前兩位顯示分鐘,后兩位顯示秒。正計時、倒計時可以切換。倒計時結束蜂鳴器報警,倒計時時間可設置。可以設置鬧鐘,查看記錄的數據,暫停,清零等功能。用keil c51軟件編輯c語言程序并且編譯調試,在編寫程序和編譯調試的過程中出現了很多問題。在編寫程序的時候將數碼管顯示的子程序和中斷漏寫了,導致程序不能編譯成功。在編寫程序是將特殊符號弄錯或漏寫,在編程時最容易出現的就是將“;”漏寫和將“,”和“、”弄錯,以至程序不能正常編譯。
2.5軟硬件仿真
用keil c51軟件編輯c語言程序,將編寫好的c語言程序編譯成功后生成hex代碼,供下載器使用。使用proteus isis繪制原理圖,將keil c51和proteus isis連接起來調試,進行仿真。當按下k1鍵時,電子數字秒表開始計時,如果想要對時間進行調整,可以通過調整設置模塊來實現。當按下k2鍵時,可以存儲數據,每按一次存儲一組數據,能存儲最近十組數據。如想要倒計時可以按下k5鍵來調節倒計時的秒數,倒計時結束時蜂鳴器響五聲后停止。如想要切換到正計時可以按下k4鍵,同時k5鍵還可以調鬧鐘,鬧鐘時間到時,蜂鳴器響五聲數碼管閃五下停止。如果想要退出重新計時就再按一下k6即可復位。