第一章 項目計劃
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的定時器完成秒錶和倒計時功能。
2.3 關鍵硬件模塊設計原理
2.3.1 振盪電路
在電子錶的設計中,振盪電路是必不可少的。它用於產生一個標準頻率,也就是時間標準信號,然後通過分頻器產生時間脈衝。其頻率精度與穩定性決定了多功能電子錶時間的準確度。為了使電路更容易起震,頻率更穩定,並聯兩個22pF的瓷片電容。如圖2-2。
我們採用的是12M石英晶振。
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Ω。
2.3.3 按鍵
三個按鍵分別接到P2.0,P2.1,P2.2口,並聯,用戶通過按鍵來實現相應功能,如圖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
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
2.3.6 電源電路
採用了大容量電解電容旁邊並聯一隻小電容的電路結構作用有三:一是作為本集成電路的蓄能電容;二是濾除該器件產生的高頻噪聲,切斷其通過供電迴路進行傳播的通路;三是防止電源攜帶的噪聲對電路構成干擾。
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
2.6 流程圖
主程序流程圖:
注:I/O口初始化將P0、P2設置為強推輓輸出。
定時器初始化設置定時器1為方式1,定時器0為方式2。
定時器1的流程圖:
定時器0流程圖:
2.7 PCB圖 見圖5-1
閱讀更多 帶你玩轉娛樂圈 的文章