通信技術專業畢業設計

}

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即可復位。