【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

第一章 項目計劃

1.1 項目分析

1.1.1 項目名稱

多功能數字電子錶

1.1.2 項目的發展趨勢

隨著現代電子技術的發展,人們對鐘錶的精確度的要求也越來越高。機械鐘雖然不會被淘汰,但它所表現出來的作用有所限制,它未來的發展也不會無窮無盡。在滿足現代人生活節奏的同時,電子錶不單為時間而生,它將有很大的發展空間,比如現在流行的電話手錶,一個電子錶還可以用來跑步計數,查看天氣,溫度檢測等等。電子錶的發展也隨著時代的發展一起前進,正好迎合了我們的項目多功能數字電子錶。在不久的將來,通過人類的不斷進步,電子錶的功能將逐漸增加,比如導航,視頻通話等都有可能實現。

1.1.3 市場需求

過去幾年市場對電子錶的需求越來越大每年銷量增長加快,其中精度高,功能多樣的電子錶的需求更是猛增。使用電子錶的人群主要是學生,上班族。他們需要價格較低,功能豐富的電子錶,因此我們團隊設計研發一種低價的多功能電子錶來滿足市場需求。

1.2 方案設計

1.2.1 項目功能

多功能數字電子錶將實現以下功能:

1.時間功能。顯示當前時間,精確到秒,並且當時間有誤時,用戶可以手動校準。

2.日期功能。日期是年、月、日。用戶可通過按鍵來切換查看當前日期,也可以實現手動設置進行校準。

3.鬧鐘功能。用戶可通過按鍵設置鬧鐘。

4.秒錶功能。用戶可進行啟動、暫停(繼續)、清零操作,精確到0.01秒。

5.倒計時功能。用戶設置初始時間按下啟動鍵電子錶開始倒計時,當時時間歸零時,響鈴提醒用戶。

1.2.2項目材料及計劃

該設計中單片機採用STC12C5A60S2和低功耗實時時鐘芯片DS1302搭配上按


鍵來實現基本功能。STC12C5A60S2單片機集高速、低功耗、超強抗干擾於一身。選擇具有涓細電流充電能力的低功耗實時時鐘電路DS1302對時間進行計時,它可以精確到秒,還具備閏年補償等多種功能,而且該芯片的使用壽命長,誤差小,還具有時間校準等功能。顯示這方面我們打算用數碼管顯示,但根據最後的需要可能有變,目前有液晶和數碼管顯示這兩種方案,液晶比普通數碼管相比硬件連接更復雜,價格更貴,對系統的要求較高。此外,我們還將用到的材料是蜂鳴器,用於鬧鈴和倒計時的響鈴提醒。按鍵可用於切換顯示、時間校準、鬧鐘的設定等功能。

除了以上的器件外,在項目設計過程中我們還會用到其他一些電子元件,比如電容,電阻,三極管等等。

1.3 可行性分析

我方團隊三人各有所長,李林航擅長程序設計和編寫,有些較為豐富的經驗,參加過多次比賽,成績優異,彭建峰在電路設計方面很有經驗,主要負責電路方面的主體任務,梁斌則在各個方面協助兩位組員,並且主要負責報告的撰寫整合,採購原件等任務。分工合作,通過硬件和編程結合,和實際的手工操作,就可以實現多功能數字電子錶功能。在按鍵不超過三個的條件下,要實現多個功能,可以採用按鍵結合共同作用來實現多個功能。

第二章 設計說明

2.1 功能指標

2.1.1 顯示器

選用共陰極4位數碼管作為顯示器。

2.1.2 按鍵

設計三個按鍵,通過按鍵操作來實現切換和設置功能,可分別顯示時、分、秒、年份、月份、天數、秒錶、倒計時、鬧鐘。考慮到功能多,按鍵少,所以我們採用了組合鍵操作來減少按鍵數量節約設計空間和成本。

2.1.3 蜂鳴器

選用蜂鳴器作為鬧鐘和倒計時的響鈴提醒,採用單片機推輓式輸出和9013來控制其正常工作。

2.1.4 單片機

選用STC12C5A60S2單片機,它是高速、低功耗、超強抗干擾的新一代8051單片機。並且它的功能性強,價格合理,用起來也比較方便主要具有以下幾個特點: 4KB可改編程序Flash儲存器。、全靜態工作、128*8字節內部RAM、32個外部雙向輸入/輸出(I/O)口、中斷優先級有四種狀態可定義、2個16位可編程定時計數器、低功耗和掉電模式。配合DS1302時鐘芯片,用C語言編寫程序來完成項目的軟件需求。

2.2 設計原理及原理圖

我們多功能電子錶原理圖如圖2-1所示,包括的元器件有:4位數碼管、STC12C5A60S2單片機、電阻、DS1302時鐘芯片、振盪器、ISP下載器、蜂鳴器、瓷片電容,按鍵以及三極管。用三線制SPI串行通信協議控制DS1302相應的寄存器修改和讀取它的時間數據(BCD碼),再通過轉碼函數將其數據轉換成十進制數後控制數碼管顯示。通過按鍵切換讀取或更改對應的時間,再通過設置STC12C5A60S2的定時器完成秒錶和倒計時功能。

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

圖2-1 電子錶電路設計原理圖

2.3 關鍵硬件模塊設計原理

2.3.1 振盪電路

在電子錶的設計中,振盪電路是必不可少的。它用於產生一個標準頻率,也就是時間標準信號,然後通過分頻器產生時間脈衝。其頻率精度與穩定性決定了多功能電子錶時間的準確度。為了使電路更容易起震,頻率更穩定,並聯兩個22pF的瓷片電容。如圖2-2。

我們採用的是12M石英晶振。

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

圖2-2 振盪電路

2.3.2 顯示器

採用4位共陰極數碼管作為顯示器,段選端接P0口,位選端接P2口高四位。數碼管直接由P0口電流驅動,串聯1k電阻控制電流大小,P2口直接連接數碼管的選擇位即可,如圖2-3。

I/O口輸出電壓約為5V, 紅色發光二極管導通壓降約為1.8-2.2V,數碼管工作總電流不超過20mA,可以計算出限流電阻為(5V-1.8V)/(20mA/8)=1.28kΩ, (5V-2.2V)/(20mA/8)=1.12kΩ。所以電阻阻值在1.12k-1.28kΩ之間均可。但為了留有冗餘本方案設計的限流電阻為1.3kΩ。

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

圖2-3 顯示器電路

2.3.3 按鍵

三個按鍵分別接到P2.0,P2.1,P2.2口,並聯,用戶通過按鍵來實現相應功能,如圖2-4。

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

圖2-4 按鍵電路

當童鎖打開時,只有K1可以工作,用來切換顯示,K2和K3不能工作。

當童鎖關閉時,按鍵K1切換設置的位置,按鍵K2和K3進行加減操作,具體功能如下:

1、按K1切換顯示時、分、秒、年、月、日。K2進行減操作,K3進行加操作。

2、按K1切換設置鬧鐘,K2進行減操作,K3進行加操作,K2,K3一起按進行開/關鬧鐘。

3、按K1切換設置秒錶,K2開始/暫停,K3清零。

4、按K1切換設置倒計時,K2進行減操作,K3進行加操作。

2.3.4 DS1302時鐘芯片

該芯片可提供秒、分、時、日、月、年,並且具有閏年補償功能。如圖2-5

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

圖2-5 時鐘芯片電路

X1和X2接32.768kHz的晶振,使得芯片能正常工作。RET控制移位寄存器或復位。

VCC2接輸入電源,VCC1接大電容的正極,在主電源失效時保持時間和日期數據。該芯片工作於VCC1和VCC2中較大者。當VCC2比VCC1高0.2V時,VCC2給DS1302供電,當VCC1比VCC2高時,VCC1給DS1302供電,GND接地,DS1302連接單片機外接4.7k上拉電阻來確保芯片可以正常工作。

SCLK用來同步串行接口上的數據動作。I/O表示輸入與推輓輸出,I/O管腳是三線接口的雙向數據管腳,為了使其正常工作。CE是輸入,當CE信號在讀寫時要保持高電平。為了使它們連接單片機能夠正常工作,我們依次外接了一個47k的上拉電阻。

2.3.5 蜂鳴器

採用蜂鳴器作為鬧鈴。蜂鳴器結構簡單,控制方便。佔用單片機I/O口P2.3,用NPN型三極管9013控制蜂鳴器。三極管基極連接單片機I/O口,發射極接地,當P2.3引腳為高電平時,三極管導通,使得蜂鳴器正常工作,如圖2-6。

\u0001

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

圖2-6 蜂鳴器電路

2.3.6 電源電路

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

圖2-7 電源電路

採用了大容量電解電容旁邊並聯一隻小電容的電路結構作用有三:一是作為本集成電路的蓄能電容;二是濾除該器件產生的高頻噪聲,切斷其通過供電迴路進行傳播的通路;三是防止電源攜帶的噪聲對電路構成干擾。

2.4 軟件設計

2.4.1 main程序

void main(void)

{

P2M0 = 0xff;

P2M1 = 0x00; //P2強推輓輸出

P0M0 = 0xff;

P0M1 = 0x00; //P0強推輓輸出

//****************定時器初始化*******************

TMOD= 0x12; //設置定時器1為方式1,定時器0為方式2

TH1 = -10; //2.5ms中斷一次

TL1 = -250;

TH0 = -250; //0.25ms中斷一次

TL0 = -250;

TR1 = 1; //打開定時器1

ET1 = 1; //打開定時器1中斷

ET0 = 1; //打開定時器0中斷

EA = 1; //開總中斷

display(); //讀取DS1302的時間信息並數碼管顯示

while(1)

{

if(cKey)

{

DisposeKEY(); //按鍵掃描

}

if (hour > 23 || second > 59 || minute > 59)

{

Ds1302Init();

}

}

}

}

2.4.2 定時器0

void IntT0() interrupt 1

{

if (DJS == 1) //倒計時模式

{

uchar j,k;

j++;

if(j == 40) //中斷40次0.01s

{

j = 0;

if (k == 0)

{

k = 100;

if (DL == 0)

{

if (DH == 0)

{

DD = 1; //倒計時結束標誌位

TR0 = 0; //關閉定時器0

return;

}

DH--;

DL = 60;

}

DL--;

}

k--;

}

}

else //秒錶模式

{

uchar i;

i++;

if(i == 40) //中斷40次0.01s

{

i = 0;

mL++;

if(mL == 100) //中斷4000次1s

{

mL = 0;

mH++;

if(mH == 60) //中斷240000次一分鐘

{

mH = 0;

}

}

}

}

}

2.4.3 定時器1

void IntT1() interrupt 3

{

TH1 = -10; //2.5ms中斷一次

TL1 = -250;

//*************************中斷次數計數******************

nTimer++;

if(nTimer == 200)

{

SMG = ~SMG; //0.5s數碼管亮/滅一次

nTimer = 0;

}

//*************************顯示刷新******************

P0 = 0; //先清顯示再換位選

if ((Nhour == hour && Nminute == minute && kk == 1)||(DD == 1))

{

P2 = acLEDCS[cScanIndex]|0x0f; //送位選數據

}

else

{

P2 = acLEDCS[cScanIndex]|0x07; //送位選數據

}

P0 = acLED[cScanIndex++]; //送顯示數據,位選指針移位

cScanIndex &= 3; //位選指針回位

DisposeKEY();

//*************************掃描按鍵******************

if(nDelayKey==0)

{

cKey = P2 & 0x07; // 取鍵值P10、P11、P12

if(cKey != 0x07)nDelayKey=100; // 設置延遲時間削顫

else

{

bStill=0;

cLongDelay=0;

} // 松鍵

}

else // 利用DelayKey按鍵消顫

{

nDelayKey--;

if(nDelayKey==0)

{

cKeyCode = P2 &0x07; // 取鍵值P10、P11、P12

if(cKey != cKeyCode)

{

cKeyCode = 0;

}

}

}

}

2.5 Proteus仿真圖

當童鎖打開時,只有K1可以工作,用來切換顯示,K2和K3不能工作。

當童鎖關閉時,按鍵K1切換設置的位置,按鍵K2和K3進行加減操作,如圖3-1

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

3-1 電路Proteus仿真圖

2.6 流程圖

主程序流程圖:


【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

4-1 主程序流程圖

注:I/O口初始化將P0、P2設置為強推輓輸出。

定時器初始化設置定時器1為方式1,定時器0為方式2。

定時器1的流程圖:

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

定時器0流程圖:


【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)

2.7 PCB圖 見圖5-1

【51單片機】基於51單片機的多功能數字電子錶(內含源碼、PCB)


分享到:


相關文章: